一、UML的基本单元
一个图标表示一个class,有类的名字,加减号是共有或私有的,它包含一些属性和一些方法。
二、类的继承表示
空三角的箭头表明了继承,箭头方向是从子类到父类,多个子类可以共用一个箭头。
这里的Cat是从生物,动物一步一步继承过来的。如果结构比内容更重要,那么UML的图示可以省略具体的内容。
三、OO的核心元素
3.1 抽象(Abstraction)
一般一个类就对应一个物体(Object),物体可以是一个实物,也可以是一个虚拟的。
一个类不需要表示物理世界上的全部信息,只需要关注我们需要的内容。
比如飞机可以有飞行的属性,或者飞机也可以代表一次航班。这样不同的飞机,就可以有不同的状态和行为。
3.2封装(Encapsulation)
类可以通过设置public、protect和private属性,来确保类对外部有限接口。
比如我们开汽车只需要旋转钥匙就能启动汽车,而不用关心它内部如何实现,这个启动汽车的动作就可以是一个接口。
FlyingTransport确定了一个接口,这个fly可以被不同的子类实现不同的动作。
- 实线加箭头,表示依赖。
- UML里只有方法的类,其实是一个接口类。
- 虚线加空心三角表示类实现了一个接口。
3.3 继承(Inheritance)
继承可以使得新的类不用复制相同的代码,而是通过继承服用父类的代码。
所有的父类如果有一些接口,那么子类全部都会实现一遍这些接口
3.4 多态(Polymorphism)
比如Animal里有一个抽象方法,那么子类Cat、Dog都可以实现不同的内容。发出不同的声音,这就是多态。
vector<Animal*> bag = { new Cat(), new Dog() };
foreach(Animal one : bag) {
one.makeSound();
}
//Meow
//Woof
类之间的关系
关联(Association)
关联:是一个对象使用或与另一个对象交互的一种关系类型。
上图用一个简单的箭头表示,Professor中使用到了Student类,这更像是在Professor类中的一块内容 。
当然也会存在双向箭头的情况,说明两个类都是互相关联的。
依赖(Dependency)
依赖:表示一种弱的关联变量,通常暗示着类之间不是永久的链接。这种关系通常是一个类(Professor)接受另一个类(Salary)的方法、
实例化或使用另一个类(Salary)。
这里有如何发现类之间的依赖关系的:如果对一个类的定义的更改会导致对另一个类的修改,则在两个类之间存在依赖关系。
组合(Composition)
组成:意味着“全体 – 部分” 的关系在两个类之间,一个类由另一个对象的一个或多个实力组成。
这种关系与其他关系之间的区别在于,该组件只能作为容器的一部分存在。
在UML中,组合关系由一条线表示,在容器末端有一个填充的菱形,在末端有一个箭头指向组件。
聚合(Aggregation)
聚合:组合的一个不那么严格的变体,其中一个对象只包含对另一个对象的引用。
该容器不控制组件的生命周期。该组件可以在没有该容器的情况下存在,并且可以同时链接到多个容器。
在UML中,聚合关系的绘制方式与组合相同,但在箭头的底部有一个空菱形。