享受代码,享受人生

SOA is an integration solution. SOA is message oriented first.
The Key character of SOA is loosely coupled. SOA is enriched
by creating composite apps.
posts - 213, comments - 2315, trackbacks - 162, articles - 45
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

面向对象乱弹(二)

Posted on 2004-12-12 16:57  idior  阅读(...)  评论(...编辑  收藏

下面就来谈谈对象这个概念

我们就从sumtec的主谓宾谈起。面向对象就是从动宾结构发展到了主谓宾的结构。sumtec的文章 ,很有思想哦。
主谓宾的结构对于描述这个世界,显的更加的形象。其中的主语和宾语都是对象。由此我们展开了抽象,注意我们是对对象进行的抽象。举个例子先:

小明开日光灯。

小明.TurnOn(日光灯);
(这个例子不太好,不过从这个例子中,大家有没有看到什么奇怪的地方,我是又有了些想法,感觉大部分情况下我们用的还是动宾结构,行为往往处于宾语中,下次再说,不过可能还是乱弹)

然后我们就展开了抽象大法。对日光灯进行抽象,抽象出了ITurnable这个接口。注意在乱弹(一)
中也提到了这个例子,当时有一个问题,现在可以有答案了。就是为什么同样对于日光灯我们会产生两个接口ILightable和ITurnable,答案就在于行为!对一个对象进行抽象,那么抽象的依据是什么,就是行为,责任。这个对象有什么样的行为和责任,我们就会根据我们的需要能抽象出这个行为和责任。比如现在我对日光灯又有一个行为的要求,我要它能被序列化,那么我们就会抽象出ISerializable这个接口。

面向对象就是面向抽象, 就是面向接口,大概就是由此而来吧。大家看到这里的抽象是针对对象进行的,依据是行为责任。所以面向对象的本质就是面向抽象就是面向接口,而为什么要叫面向对象呢?因为抽象和接口都来源于对象。

现在我开始乱弹了,大家都知道,抽象的作用就是可以在以后添加新对象的时候不改变原有的系统。而如果在原来的系统中添加新的行为,那么我们的面向对象的抽象是没什么用的。那么面向对象这个过程扩展是什么样子?如果我们对行为和责任进行抽象呢?抽象的依据又是什么呢?我自己是没想通。就想到了函数指针。大家发表意见啊,可能这只是乱弹。

讲了这么些,你对对象的看法是什么呢? 对象是名词?是函数加数据? 更好的看法应该是具有某些行为和责任的实体。那些行为和实体就是我们抽象的依据。

最后给<Design Patterns Explained>中的三句话        

         Design to interfaces.

         Find what varies and encapsulate it.

         Favor composition over inheritance

.

窃以为这三句话是面对对象的三句经典名言,可以在你编程的时候常想想哦。