【发布时间】:2021-12-04 17:29:19
【问题描述】:
注意:这个问题是关于通用 OOP 设计,而不是特定语言。包含的所有代码都是 python、C++ 和 Java 的伪代码组合,旨在清晰易读,但不一定完美。
OOP 设计的中心原则之一是为接口编码,而不是为实现编码。我们有一个有用的技巧是从其他地方将合约导入到我们的对象中。因此,List 对象可以实现 Prototype 合约和 Iterator 合约(使用 GoF 设计模式术语),还可以实现自己的方法。这让我们可以做类似的事情
Prototype objects[] = {List, Integer, Image}
Prototype other_objects[]
for item in objects:
Append item.Clone() to other_objects
并使用运行时调度来确定调用了哪个 Clone 方法。
在多重继承语言(例如 C++)中,我们只需继承其中的每一个:
List inherits Prototype, Iterator {
...
//overriding Prototype
Clone() {...}
...
//Overriding Iterator
First() {...}
Next() {...}
IsDone() {...}
CurrentItem() {...}
...
}
这里我们不关心 Prototype 和 Inheritance 是纯接口还是抽象类,因为我们使用的是真正的继承。
对于单继承语言多接口语言(如java)我们不得不说我们的对象是一种特定类型的对象,然后我们可以给它接口。我们仍然可以使用分派,因为编译器知道对象使用特定的合约。
List(AbstractList) implements Prototype, Iterator {
...
//implementing Prototype
Clone() {...}
...
//implementing Iterator
First() {...}
Next() {...}
IsDone() {...}
CurrentItem() {...}
...
}
在当今和整个历史中,OOP 中存在/常见的其他接口选项有哪些?例如,如果一种语言没有多重继承,我们也无法实现接口,那么存在哪些技术?
【问题讨论】:
标签: oop