面向对象之「类关系」解惑篇

对于新手来说,我们在使用面向对象的思想来分析问题的时候,经常难以分清对象之间的关系。就前段时间,我偶有感悟,希望对大家有所帮助。

在详细分析之前,我先说一句:

请无时无刻的记住,我们使用的面向对象是分析现实世界中对象的关系,以此来简化我们分析问题的难度。

因此,我们来分析类之间关系的时候,首先参考的是现实世界中对象的关系。

 

类之间的关系有:依赖、关联、聚合(组合)和泛化。

  • 依赖:是对象间最弱的一种关系,一个对象依赖于另一个对象是指这个对象和它之间存在短期的关系。在这个短暂的关系中,依赖的对象通过调用被依赖对象的方法来获取它提供的服务,或者依此来配置被依赖的对象。类的依赖总是单向的
举例:
  一个维修工人,他维修的时候需要拧螺丝,而拧螺丝又需要钳子,那么维修工人在完成拧螺丝的工作时需要依赖于钳子拧螺丝的方法,假如这个工人不只是一个拧螺丝的维修工人,那么钳子对于工人来说就是暂时的工具,所以,我们可以说维修工人(对象)依赖于钳子(对象)。
设计:
  对于上面的例子,钳子对象,可以在维修工人完成拧螺丝的方法内进行实例化,也就是一个局部的对象。
  • 关联:是对象间长期的关系。在关联中,一个对象保存对另一个对象的引用,并在需要的时候调用这个对象的方法。

举例:

  对于上面的例子中,假如那个工人只负责拧各种螺丝,而且拧螺丝的时候一直需要使用钳子,那么,工人和钳子就是一个长期的关系,所以,我们可以说维修工人和钳子是关联关系。

 

设计:

  对于上面的例子,把钳子(类)作为维修工人(类)成员,即在维修工人(类)里面保存钳子(类)的引用。

 

  • 组合表明一个对象是被一个更大的整体所拥有。这个被包含的对象可能不参与更多的组合关系,并且不能独立于这个整体而存在

举例:

  对于一个人来说,心脏是人的组成部分,心脏具有跳动的方法,人需要心脏跳动的方法,假如人死了,心脏对这个人就没有意义了,那么,心脏和人的生命周期是一致的,所以,我们可以说心脏和人之间是聚合关系。

 

设计:

  心脏(类)作为人(类)的成员,并且,心脏对象的实例化和销毁,全部在人对象里面完成。

 

  • 聚合:表明一个对象是一个更大的整体的一部分。这个被包含的对象可能会参与多个的聚合关系,并相对整体而对立存在。(可以把聚合和组合看成是特殊的关联关系)

举例:

  对于上面的例子,假如这个人死后,他的心脏可以被移植给他人使用,那么,对于这种情况,我们可以说心脏和人的关系是聚合关系。

 

设计:

  和关联的设计方法一样。


  • 泛化:是类的一般描述具体描述之间的关系,具体描述建立在一般描述的基础之上,并对其进行了扩展。具体描述与一般描述完全一致所有特性、成员和关系,并且包含补充的信息。

举例:

   在一间学校里面,我们称呼学校里所有的老师为老师,这是一种一般描述,称呼专门教数学的老师为数学老师,这是一种具体描述,泛化是一个由专门化到一般化的过程,即可以说老师是数学老师的泛化。

 

设计:

  对于上面的例子,通常是数学老师(类)继承老师(类)。



posted @ 2010-10-09 21:43  LayzerAr  阅读(379)  评论(0编辑  收藏  举报