面向对象-知识集

OMG: 对象管理组织(Object Management Group)

ULM: 统一建模语言(Unified Modeling Language)

MDA: 模型驱动架构(Model Driven Architecture)

CORBA: 公共对象请求代理体系结构(Common Object Request Broker Architecture)

OSGi: 开放服务网关协议(Open Service Gateway Initiative), 面向Java的动态模型系统, Java 模块化技术规范

类间的耦合关系

归类:

1.继承(extends),也称泛化(generalization)

2.实现(implements)

3.组合(composition)

4.聚合(aggregation)

5.关联(association)

6.依赖(dependency)

说明:

继承:

子类继承父类,子类与父类之间形成的耦合关系称之为继承关系(泛化关系)。

耦合方向:父类到子类

实现:

一个类实现了一个接口,这个类与接口之间形成的耦合关系就是实现关系。

耦合方向:接口到实现类

组合:

是一种关联关系的特例,语义上体现为contains-a关系,组合关系比聚合更强,也成为强聚合。它同样体现整体和部分的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。代码层面和关联关系一致,只能从语义级别区分。

耦合方向:部分到整体

聚合:

也是一种关联关系的特例,语义上体现为has-a关系。它也体现了整体与部分的关系,但是此时整体与部分之间是可分离的,部分可以属于多个整体对象,他们具有各自的生命周期。

耦合方向:部分到整体

关联:

是一种强的耦合关系,这种关系比依赖关系的耦合更强。在代码层面体现为:一个类(部分)以成员变量的角色在另一个类(整体)中存在。

耦合方向:部分到整体

依赖:

一种弱的耦合关系。代码层面体现为:一个类(提供者)以局部变量,方法的参数,以及对静态方法的调用的角色在另一个类(调用者)中存在。

耦合方向:提供者到调用者

谈谈耦合方向:

所谓耦合方向也是依赖方向。如果A类与B类存在耦合关系,当A类发生变化(可能是增加新的方法,修改了已有的方法的方法描述,删除方法等等)导致B类需要做出调整。则认为耦合方向是从A类到B类。耦合方面描述了变化方向。

在代码层面区分组合与聚合(个人观点):

首先,组合与聚合都是是一种关联关系,体现的都是一种整体与部分的关系,即都会以成员变量的角色表现。而两者的生命周期的区别如何在代码层面体现呢?以java为例,要实现此目的,就必须在整体对象的外部保持局部对象的引用。所以在整体对象的外部是否存在局部对象的引用,应该可以作为组合与耦合在代码层面的区别了。

我认为可以有以下三种形式:

1.构造函数的参数

即部分对象作为构造函数的参数传递给整体对象。因为在整体对象构造之前全局对象就已经存在了(生命周期不一样)。

2.public访问符修饰

全局对象创建之后,可以直接改变局部对象,甚至重新给全局对象赋值一个新的局部对象。

3.get/set方法

全局对象提供了局部成员对象的get或set方法

常见的变化种类:

增加方法,删除方法,改变方法描述符(删除方法+新增方法),增加成员变量,删除成员变量

强弱比较

实现>继承>组合>聚合>关联>依赖

各种关系强弱的比较标准: 被依赖的类的发生各种变化之后,依赖它的类(有耦合关系)也需要变化的可能性大小。

为什么实现比继承更强?因为实现中实现类必须与接口完全一致,当接口发生任何变化的时候,实现类都会变化。而继承关系中子类是为扩展父类,父类即使添加新功能(增加新方法),子类也无需变化。所以在使用接口时,一旦确定了接口就很少改变该接口,最好是新增一个接口类,实现类同时实现多个接口。

研究耦合关系的意义

面向对象编程活动,从耦合关系的角度来看,就是使用以上六种耦合关系来描述实际问题。而程序的优劣也可以根据其中存在的耦合关系是否合适来判断。

面向对象的基本原则,设计模式,六种耦合关系三者之间也存在重要的联系。设计原则的地位是最高的,设计模式是实现原则的手段,而六种耦合关系支撑设计模式的基本要素。设计模式的内容总体上包括:类(包括接口)的划分,类(包括接口)之间的关系。其中类之间的关系就是类之间的耦合关系。

参考:

http://www.cnblogs.com/yyyyy5101/archive/2011/03/11/1981078.html

http://www.360doc.com/content/13/0304/13/10504424_269223190.shtml

设计模式

(一)接口型模式

1.适配器模式

2.外观模式

3.合成模式

4.桥接模式

(二)职责型模式

5.单列模式

6.观察者模式

7.调停者模式

8.代理模式

9.职责链模式

10.享元模式

(三)构造性模式

11.构建者模式

12.工厂方法模式

13.抽象工厂模式

14.原型模式

15.备忘录模式

(四)操作型模式

16.模板方法模式

17.状态模式

18.策略模式

19.命令模式

20.解释器模式

(五)扩展型模式

21.装饰器模式

22.迭代器模式

23.访问者模式

(六)新模式

24.NullObject模式