我正在阅读有关面向对象的编程语言的类的一些幻灯片,并逐步进入了type-subtype定义:

芭芭拉·利斯科夫(Barbara Liskov),“数据抽象和层次结构”,SIGPLAN Notices,
23,5(1988年5月):



然后再举一个例子:



现在...对我来说似乎应该是相反的:Point≤PositivePoint,因为我不能在使用带有负坐标的Point的程序中使用PositivePoint,而我可以相反。

我怀疑语法是Type ≤ Sub-type还是Sub-Type ≤ Type,但是该语句似乎更清楚了,那又是怎么了?

编辑

为了使事情变得更简单,问题是:
您能说PositivePointPoint的子类型吗?
为什么?

第二次编辑

我在这里报告我在评论中写的内容,希望它可以使我的问题更清楚:

最佳答案

Liskov是正确的,PositivePoint≤Point,因为PositivePoint是对Point的改进。任何使用Point的代码也必须能够使用PositivePoint,因为总有可能Point的坐标始终为正。反之则不成立,因为使用PositivePoint的代码可能会在假设坐标始终为正的情况下运行,而用Point替换PositivePoint将破坏该假设。

请注意,她并不是说PositivePoint可以代替Point,而只是在需要Point的地方可以使用PositivePoint。

10-06 13:19