Luk*_*gli 12
首先,您通常不需要接口,因为如果一个对象实现了与另一个对象相同的消息,它就可以替换它.在Java和C#中,除非它们位于同一层次结构中,否则您无法执行此操作,因此您需要接口.
在今天与我的同事讨论之后,在我看来,答案是任何类都可以被视为接口,因为任何类都可以在消息中传递给任何其他类.
smalltalk中的任意数量的类都可以响应同一条消息,因此您不需要按照C#和java的接口.
小智 5
正如卢卡斯所说,大多数时候,你不需要它们.主要是因为实现多态性,您唯一需要的是实现相同的消息.无需为它们定义通用类型.
另一方面,有时候,从MY的角度来看,你确实需要接口.大多数情况下,当你有合同展示,或有一种抽象的超类.这在开发框架时非常常见.以记录器或序列化器为例.在这种情况下,您可能希望定义序列化程序应实现的强制方法.然后你可以创建一个抽象的超类,所有方法都是这样实现的:
LoggerIterface >> log: anObject
self shouldBeImplemented
LoggerIterface >> reset
self shouldBeImplemented
Run Code Online (Sandbox Code Playgroud)
等等......所以,检查这个类,你现在需要实现哪些方法,以便这个对象的用户运行良好.注意这#shouldBeImplemented是Object用这样的东西实现的(在Pharo Smalltalk中):
Object >> shouldBeImplemented
"Announce that this message should be implemented"
self error: 'This message should be implemented'
Run Code Online (Sandbox Code Playgroud)
但正如你所看到的,它只是一种惯例,它不是由语言本身强加的.
干杯
马里亚诺
| 归档时间: |
|
| 查看次数: |
1907 次 |
| 最近记录: |