乐趣区

关于java:设计原则及UML类图

一、繁多职责准则

就一个类而言,应该仅有一个引起它变动的起因。

如果一个类承当的职责过多,就等于把这些职责耦合在一起,一个职责的变动可能会减弱或者克制这个类实现其余职责的能力。这种耦合会导致软弱他的设计,当变动产生时,设计会蒙受到意想不到的毁坏;软件设计真正要做的许多内容就是发现职责并把那些职责互相拆散。

二、凋谢 - 关闭准则

软件实体应该能够扩大,但不可批改。该准则是面向对象设计的外围所在,遵循这个准则能够带来面向对象技术所宣称的可保护、可扩大、可复用、灵活性好。

设计人员必须对于他设计的模块应该对哪种变动关闭做出抉择,必须先猜测出最有可能产生的变动品种,而后结构形象来隔离那些变动。最后编写程序时假如变动不会产生,当变动产生时,就创立形象来隔离当前产生的同类变动,回绝不成熟的形象。

三、里氏代换准则

子类型必须可能替换掉它们的父类型。因为子类型的可替换性才使得应用父类类型的模块在无需批改的状况下就能够扩大。

四、依赖倒转准则

高层模块不应该依赖低层模块,两个都应该依赖形象;形象不应该依赖细节,细节应该依赖形象。

要针对接口编程,不要针对实现编程。该准则能够说是面向对象设计的标记,编写时思考的是如何对形象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口。

五、迪迷特准则(起码常识准则)

如果两个类不用彼此间接通信,那么这两个类就不该当产生间接的相互作用;如果其中一个类须要调用另一个类的某一个办法的话,能够通过第三者转发这个调用。

该准则其基本思维,是强调了类之间的松耦合;类之间的耦合越弱,越利于复用,一个处在弱耦合的类被批改,不会对有关系的类造成波及。在类的结构设计上,每一个类都该当尽量升高成员的拜访权限。

六、合成 / 聚合复用准则

尽量应用合成 / 聚合,尽量不要应用类继承。

聚合示意一种弱的“领有”关系,体现的是 A 对象能够蕴含 B 对象,但 B 对象不是 A 对象的一部分;合成则是一种强的“领有”关系,体现了严格的局部和整体的关系,局部和整体的生命周期一样。

优先应用对象的合成 / 聚合将有助于你放弃每个类被封装,并被击中在单个工作上,这样类和类继承档次会放弃较小规模,并且不太可能增长为不可管制的硕大无朋。

七、UML 例图

‘+’示意 public,‘-’示意 private,‘#’示意 protected;

合成是一种强的’领有’关系,体现了严格的局部和整体的关系,局部和整体的生命周期一样;

继承关系 实现关系 关联关系 聚合关系 合成关系 依赖关系
空心三角形 + 实现 空心三角形 + 虚线 实线箭头 空心菱形 + 实线箭头 实心菱形 + 实线箭头 虚线箭头

在 UML 类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合 (Composition),依赖 (Dependency)

1. 泛化(Generalization)

【泛化关系】:是一种继承关系,示意个别与非凡的关系,它指定了子类如何特化父类的所有特色和行为。例如:老虎是动物的一种,即有老虎的个性也有动物的共性。

【箭头指向】:带三角箭头的实线,箭头指向父类

2. 实现(Realization)

【实现关系】:是一品种与接口的关系,示意类是接口所有特色和行为的实现.

【箭头指向】:带三角箭头的虚线,箭头指向接口

3. 关联(Association)

【关联关系】:是一种领有的关系,它使一个类晓得另一个类的属性和办法;如:老师与学生,丈夫与妻子关联能够是双向的,也能够是单向的。双向的关联能够有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带一般箭头的实心线,指向被拥有者

4. 聚合(Aggregation)

【聚合关系】:是整体与局部的关系,且局部能够来到整体而独自存在。如车和轮胎是整体和局部的关系,轮胎来到车依然能够存在。

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无奈辨别,必须考查具体的逻辑关系。、

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

5. 组合 (Composition)

【组合关系】:是整体与局部的关系,但局部不能来到整体而独自存在。如公司和部门是整体和局部的关系,没有公司就不存在部门。

组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求一般的聚合关系中代表整体的对象负责代表局部的对象的生命周期。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

6. 依赖 (Dependency)

【依赖关系】:是一种应用的关系,即一个类的实现须要另一个类的帮助,所以要尽量不应用双向的相互依赖.

【代码体现】:局部变量、办法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

各种关系的强弱程序:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

退出移动版