OO的思考

抽象的面向对象,抽象的OO。


最近好容易得闲,再次翻开以前的书籍,充充电。躺着想到了一些东西。


在 《effective c++》中,作者强调说 public继承具有is-a之关系,对于java等语言extends类似于c++中的public继承。回想一直以来,人们呐喊着,优先使用组合而不是继承,对于个人而言,有些时候,我会毫不犹豫选择继承,为什么?更多是为了得到"is-a"的语意。Student  “is-a“ Person,Teacher "is-a" Person...这些几乎都是条件反射般的出现(因为这太符合常识和现实了)。然而有时候也不见得如此,经常性的也会有一切违背,比如,在要求fly的关系中,鸵鸟就不是鸟,在某些时候,正方形也不是矩形...这样的例子实在太多了。


说到这里,有一个概念不得不提,那就是著名的里氏替换原则,简单说:父类可以出现的地方子类都可以出现。前几天,我还在群里和一群人讨论此问题的实践。最终也是定格在需求,或者根据需求来分析(具体问题具体分析),此时我是觉得这有点大白话(你饿了就去吃饭,没什么意义)。我想得到的是一个普适的思维过程。于是,开始琢磨这一个过程......

鸵鸟不是鸟,正方形不是矩形,,等等诸如此类的问题为什么会被提出来?人不是石头,为什么没人提,显然,因为前者和我们普通的习惯常识有违(当然我们服从于需求)。由此,可否认为,我们对某一个问题在OO中进行概念化(我没使用建模这个很”伟大“的词),我们需要的是什么?概念化所需要的”类“,以及’类”间的种种的关系。而最开始这种种关系从何处而来,从我们的常识,习惯,现实而来,这已经给我们已经最初的关系雏形了。然后扎根于需求,因为fly的存在,进一步思考,发现或许不合适(我假设你理解并且赞同里氏替换原则),于是进行相应修改。所以有了很多的方法论,很多名词,包括领域专家,,,(很自然而然的)。我们试着量化下这个过程:常识->雏形->需求->修改。大多数是这样,如果一个人说 一个“故事”,猪是石头,那么此处的“猪”和我们现实中的“猪”是同一个事物吗?,“石头”呢??我们的习惯思维方式。


故事到这里结束了吗?还没有,在昨晚看到一篇博文中,认为继承的本意是一种“act-as",它提出来鸵鸟不是鸟这个例子,认为继承不仅仅是”is-a",更重要的是“act-as",我们走的太快了,停一下,鸵鸟是鸟吗?是的(普通意义上),那么在fly需求中为什么又不是呢?因为它的fly无法”act as" 鸟的fly(鸵鸟不能飞),(说到这里我有点恐慌,我不想因为这个问题粘上“对行为建模”还是”对数据建模“的问题上。),我记得那天讨论的时候,我说,假设我要设计一个教务管理系统,我可能会有学生,或者教工,然后从”person“继承,我说完没有太多人对这个问题有什么说的,是太简单了,还是”本来就该这样“(常识),那么学生或者老师一定就“act-as" Person吗?如果不呢?就有问题了吧(想想鸵鸟和鸟的关系)。【暂时写到这吧】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值