×

Loading...

Topic

This topic has been archived. It cannot be replied.
  • 工作学习 / 学科技术 / 【转帖】关于面向对象的讨论
    • 不错呀,谢谢分享👍
    • 所有的oop都可以归结为is-a morphism,
      也就是父子动作必须是一致的,没有冲突,各种interface,abstract class的限制其实就是为了这个,java走的极端,连多重继承都不许,就是为了防止break is-a morphism。但就是因为oop过分强调is-a,会造成实际中乱写的现象。因为Oop本质上是category上的functor映射,有严格的covariance和contravariance的要求,这点上在container上特别明显。实际上oop是语言的一个败笔,因为实际需求当中has-a远超is-a....。简单的说,你的所有Method如果是override父类,必须只能是父类的扩展,而绝对不能是父类method(function)的冲突或者没有实现父类的作用的函数,但实际中大量的需求其实会变成和父类是矛盾需求的,这会造成父子类出现is-not-a morphism,严重影响container,会继而造成container invariant。所以非oop语言现在估计能成一个小热点。