2

为什么对象的类型引用它的接口?为什么在这里使用术语类型?就 C++ 而言,我无法理解它。

伽玛,埃里希。设计模式:可重用的面向对象软件的元素(Addison-Wesley 专业计算系列)(Kindle Locations 593-596)。培生教育。Kindle版。

对象的类定义了对象的实现方式。该类定义了对象的内部状态及其操作的实现。相反,一个对象的类型只指它的接口——它可以响应的一组请求。一个对象可以有多种类型,不同类的对象可以有相同的类型。

4

2 回答 2

2

过于简单化...

  1. 接口 - 一个类拥有的东西的列表以及它可以做的事情......一个回答“什么”的东西的列表

  2. 实施 - 回答关于“如何”完成“什么”的问题。

示例:一个接口 IPackageMover 做了 2 个事情和 2 个实际实现接口的类(类型)(除了接口要求之外,还做其他事情)

 // the interface
 public interface IPackageMover
 {
    string GetName();
    void public void MoveTo(Package package, string newAddress); 
 }

 // the "type" that has the implementation
 public class JoeThePackageMover : IPackageMover
 {
    public string GetName()
    {
        return "Joe";
    }
    public void MoveTo(Package package, string newAddress)
    {
        PickUp(package);
        Drive(newAddress);
        DropOff(package);
    }
    public void PickUp(Package package)
    {
        // do stuff
    }
    public void Drive(string newAddress)
    {
        // do stuff
    }
    public void DropOff(Package package)
    {
        // do stuff
    }
 }

 // another "type" with the same interface
 public class PassTheBuckPackageMover : IPackageMover
 {
    public string GetName()
    {
        return "What do you want it to be?";
    }
    public void MoveTo(Package package, string newAddress)
    {
        var joe = new JoeThePackageMover();
        joe.MoveTo(package, newAddress);            
    }
    public void Chill()
    {
        //do stuff
    }

 }  
于 2017-10-28T02:01:20.133 回答
1

为什么对象的类型引用它的接口?为什么在这里使用术语类型?就 C++ 而言,我无法理解它。

OOP 中的对象与现实世界并没有太大的不同。例如 :

  1. 一个Car 是-一个 Vehicle。根据这个定义,aCar有能力将人员/货物从一个地方运送到另一个地方。
  2. ACar也是一个Car。根据这个定义,它具有使用方向盘驱动的能力。

在上面的示例中,Car IS-A Car和 aCar也是 a Vehicle ,因为它可以使用方向盘驱动,将货物/人员从一个地方移动到另一个地方。换句话说,现实世界中对象的类型是由你可以用它做的事情来定义的(相对于它的接口)。

如果我们在编程中使用上述类比,Car是的子类,Vehicle并且具有Car对象的代码可以使用Vehicle以及 的所有函数Car。这意味着一个Car IS-A Vehicle和一个Car. 总之,对象的类型由其接口定义,即它支持的操作集。

于 2017-10-27T15:14:51.393 回答