学习UML首先要了解面向对象的主要特征以及对象之间的关系。
-
OOP(面向对象)主要特征:
- 抽象:强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。
- 封装:隐藏数据和实现,提供公共的方法供用户调用。
-
继承:继承是指一个对象直接使用另一对象的属性和方法
- 多态:接口的多种不同的实现方式即为多态。也可以理解为同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
-
类之间的关系:
-
继承:子类自动共享父类数据结构和方法的机制。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
-
实现(Realization):是一种类与接口的关系,表示类是接口所有特征和行为的实现.
实现与继承统称为泛化关系(Generalization)
-
关联(Association):对于两个相对独立的对象,当一个对象与另一个对象有种某种对应关系,这两个对象之间为关联关系。
-
聚合(Aggregation):聚合关系是关联关系的一种,是强的关联关系,聚合是关联关系的一种,耦合度比关联关系强,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是平等关系,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
-
组合(Composition):组合关系是关联关系的一种,是比聚合关系还要强的关系,类和类之间的关系是“整体-部分”的关系,整体和部分具有相同的生命周期,部分不能脱离整体而独立存在。
-
依赖(Dependency):是一种使用的关系,即一个类的实现需要另一个类的协助.
- 各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 - 还有一些概念,内聚与耦合:
内聚:指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
耦合:一个软件结构内不同模块之间互连程度的度量。
对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。
-
下面这张UML图,比较形象地展示了各种类图关系: