oop中的接口,“java-like”和“c ++-like”

时间:2014-02-04 20:26:32

标签: java c++ oop

在C ++中,通常的做法是只在类体中定义方法并在源文件中实现它们。

但这不是一个真正的界面。因为只有类可以实现这些方法。

在Java中,可以像定义类一样定义“接口”。现在任何类都可以实现定义的接口。

现在想象一下,在用Java编程时。我有一个班级“管理”,另一个叫做“联系”。 “管理”类包含一系列“联系人”对象。现在应该定义和实现一些有用的方法,如“添加”,“删除”,“交换”等,以便对“联系”阵列进行操作。

这些方法应该由接口定义,并由“管理”类实现。

我的问题是,如果将接口引用到“客户”类,例如我们称之为ICustomer,或者它应该被引用到“管理”类,这会产生“IAdministration”。

我不介意“foo-able”或“I-foo”,只是关于接口背后的概念?

它们是否应该由描述数据的类(“联系人”)或处理数据的类(“管理”)定向?

我知道这是一个更哲学的问题,但无论如何我想知道你对此的看法。

此致

3 个答案:

答案 0 :(得分:2)

术语“接口”的含义(以及“对象”的含义)取决于您正在考虑的编程范例。

Java完全采用经典的OOP范例,基于对基础和一些接口的继承。

相反,C ++可以支持“多重继承”,这是一个更普遍的概念。 在这种情况下,“接口”可以看作只有纯虚方法的类;

class Ia
{
public:
     virtual int method1()=0;
     virtual int method2()=0;
     virtual ~Ia() {}
};

class Ib
{
public:
     vritual int method3()=0;
     vritual int method4()=0;
     virtual ~Ib() {}
};

class Object
{
public:
    virtual ~Object() {}
};

class A:
   public Object,
   public Ia,
{
public:
     virtual int method1(); //implementation 
     virtual int method2(); //implementation 
};

class B:
   public A,
   public Ib
{
public:
     virtual int method3(); //implementation 
     virtual int method4(); //implementation 
};

在这个意义上,识别你的案例应该很容易

答案 1 :(得分:1)

接口可以面向任何类型的类 隐含/非正式地每个类都有一些接口
由类定义的方法确定。

在你的意义上应该是我的管理。因为它 定义administration上的操作 contact个对象的容器(由您的单词中的数组支持)。

“添加”,“删除”,“交换”不是contact的操作 似乎是对象,但在administration对象上。

ICustomer / IContact将是另一个具有的界面 例如,方法setFirstName,setLastName,setPhone,
getFirstName,getLastName,getPhone等。它只是一些POJO / bean
携带一些数据。所以在我看来你的描述。

答案 2 :(得分:1)

我无法真正效仿你的榜样,但我相信混淆可能源自同一个词的不同用法和含义。

通常,系统接口是外部部件与之交互的方式。这经常在代码中使用,表明此类在其接口中提供了此功能。

一个不同的概念是OO-Interface,它实际上是一个与类型交互的协议。在不同的语言中, interface 用于引用协议或抽象接口

你应该接受这个术语的两种用法,因为两者都很常见。在C ++中,类可以实现一个协议(无状态纯抽象类等同于接口),从而实现接口,它可能具有定义自己的接口的那些和其他函数