在面向对象的软件系统里,一切都是对象。对象是个名词,而对象中的方法都是动词。方法表示一个对象所具有的“能力”,而对象“成员属性”则表示了对象所拥有的资源。对象之间所谓的发消息就是调用该对象的方法,就是触发该对象的某种能力去完成一项任务。而面向对象软件设计的核心就是组织各种对象,通过他们之间的消息传递来完成各种工作。
其实无论面向过程的程序设计还是面向对象的程序设计都无法减少程序设计的复杂度,只是看适合哪类软件系统而已。就目前的客户端软件系统,多数是事件驱动(消息驱动)的,这类软件系统往往没有一个明确的任务,或者说任务的头绪很多,由外界去触发(产生消息),软件系统往往和OS共同去完成对这些消息的响应工作。而完成这些消息的响应的,往往是软件系统中不同的对象(模块)。
对象间的关系:当今的面向对象设计其实已经是面向类的设计了,开发人员需要做的是组织各种类之间的关系,而常用的类(对象)之间的关系包括:聚合,组合,依赖,继承等等。
软件里分层的概念:对象间的组织最好不要是网状结构,这样的结果就是互相依赖,导致软件的复杂度提高,当然网状结构的软件也许可以正常的运行,但是代价一定是难以维护和升级。所以最好是分层,单项依赖。继承其实就是一种分层的概念,当你把消息抛给父对象时,由于派生的原因,可能最终去执行任务的对象是其子对象。在分层的约束中,上层知道下层的全部,但是下层不知道上层的一切。聚合更是一种分层的概念,A对象包含了B对象,你把消息抛给A对象,A其实要借助B对象来完成。对外界,只看到了A,B其实就是A的下层。
调用和回调:调用很简单,一般上层对象对下层的直接函数调用。但是下层对上层就最好不要直接调用了,因为理论上讲,下层是不知道上层有哪些方法的。那下层怎么主动和上层沟通呢,这就是回调了。在面向对象的回调中经常使用的是回调接口。回调接口其实就是定义了一系列的方法(C++里用虚函数表示),上层对象去实现这些方法就可以了,而下层呢,则拥有这个接口的指针(其实就是上层对象的指针),必要时,下层调用这些接口方法,就相当用把消息传给了上层。这样的好处就是避免了上层对下层的依赖。
接口(interface):在面向对象软件系统里,接口就是表示对一个对象你能向它发什么消息。实现了该接口就是表示要能对这些消息产生响应。在事件驱动型的系统里,其实接口就是一系列的事件,而接口的实现就是对事件的处理。在一个系统里,事件往往是有限的可以事先预知的,所以我们才可以定义接口。比如HTTP操作的事件(接口)无非就是get,post等,而回调接口也无非就是Receive-header,Receive-body等。所以是有限的可以预先知道的,这样我们可以定义这些接口。接口其实就是协议。
消息机制:消息机制可以分为静态消息机制和动态消息机制。前者表示发送对象者必须知道接收者是什么对象,或者至少要知道其基类对象。显而易见,C++语言里的消息机制就是静态的,因为你必须要知道调用哪个对象(或其基类)。而动态消息机制就是发送对象不论谁接收,发消息就是了,自有机制去保证谁去接收消息。我们最容易相到的就是windows sdk程序。鼠标点击产生一个click事件,OS会接收这个消息到消息队列,然后去派发(dispatch)到相应的窗口(对象)。
本文深入探讨了面向对象设计的基本概念,包括对象、方法、成员属性等,并详细解释了对象间的关系如聚合、组合及依赖等。此外还介绍了软件分层、调用与回调机制、接口的作用以及消息机制的不同类型。
2312

被折叠的 条评论
为什么被折叠?



