类 class

类图最上部分方框为 类名称
中间部分为 类属性
最下的方框为 类方法
类名称是强制的,因为类的属性和方法很有可能在规划的时候无法穷尽其方法和属性。所有有时候只标注一个类名称
属性,方法的书写格式


名称:类型(方法为返回值类型)
最前面的符号表示 类属性和方法的权限
public 用+表示
private 用-表示
protected 用#表示
package 用~表示
static 下划线 _ 表示
class 类名:
{
public://公有成员
int num;
private:私有成员
int age;
protected:保护成员
int sex;
};
类的public成员可以被任意实体访问,你可以认为它就是c语言中的struct结构体,可以直接用a.x这种形式访问;
类的private成员不能直接被类的实体访问,也不能被子类的实体访问,但是可以被类的成员函数访问;
类的protected成员不能直接被类的实体访问,但是可以被子类访问,也可以被类的成员函数访问;
接口interface
接口是一组操作的集合,其中的每个操作用于描述类或组件的一个服务。

接口的图表和类非常相似 《》 尖括号代表接口
类间关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
依赖(Dependency)
依赖表示一个类以某种形式依赖于其他类。 当两个类处于依赖关系中时,其中一个类的改变可能会影响另一个类。 在程序代码中,依赖关系意味着一个类的对象出现在另一个类的操作中。
依赖关系是一种偶然的、较弱的使用关系,特定事物的改变可能影响到使用该事情的其它事物,在需要表示一个事物使用另一个事物时使用依赖关系。
依赖关系的表现形式
B类的实例作为A类方法的参数
B类的实例作为A类方法的局部变量
A类调用B类的静态方法
例如 人依赖于空气

这种依赖关系 是类和类间的关系,用带箭头的虚线表示。
关联
关联(Association)关系是一种结构化关系,用于表示一类对象与另一类对象之间的联系。
,通常将一个类的对象作为另一个类的成员变量。
关联关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的,它是依赖关系更强的一种关系。
单向关联用带箭头的实线表示,同时一方持有另一方的实例,并且由于是单向关联,如果在关联线上注明关系,则只可注明单向的关系

用实线箭头表示

自关联是指属性类型为该类本身。例如在链表中,每个节点持有下一个节点的实例,如下图所示

默认情况下,关联是双向的。例如数据库管理员(DBA)管理数据库(DB),同时每个数据库都被某位管理员管理。因此,DBA和DB之间具有双向关联关系,如下图所示。

继承
Generalization
泛化(Generalization)关系,用于描述父类与子类之间的关系,父类又称作超类或者其类,子类又称为派生类。注意,父类和子类都可为抽象类或者具体类。
继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。
子类能吸收已有类的属性和行为,并能拓展新的能力

人 继承于动物
符号为 实线空心三角
聚合
聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,部分对象是整体对象的一部分,但是部分对象可以脱离整体对象独立存在,也即整体对象并不控制部分对象的生命周期。从代码实现上来讲,部分对象不由整体对象创建,一般通过整体类的带参构造方法或者Setter方法或其它业务方法传入到整体对象,并且有整体对象以外的对象持有部分对象的引用。
在UML类图中,聚合关系由带箭头的实线表示,并且实线的起点处以空心菱形表示,如下图所示。
表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。 两个对象具有各自的生命周期
人群是人的聚合。 一个人离开,人群不一定消失,有着各自的生命周期。

组合
组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象控制成员对象的生命周期,一旦整体对象不存在了,成员对象也即随之消亡。
从代码实现上看,一般在整体类的构造方法中直接实例化成员类,并且除整体类对象外,其它类的对象无法获取该对象的引用。
组合是一种强的‘拥有’关系,是一种contains-a的关系,体现了严格的部分和整体关系,部分和整体的生命周期一样
人和头
头是人的组件,生命周期一样。

实现Realization
实现表示一个class类实现interface接口(可以是多个)的功能。
在UML类图中,类与接口间的实现关系用带空心三角形的虚线表示。同时类中也需要列出接口中所声明的所有方法(这一点与类间的继承关系表示不同)。

棒棒糖表示法


最后理清一下思路看一个例子

视角
如果需要把一个项目中所有的类和类的关系一次性描述清楚,是极其困难的
conceptual perspective
在画一只马的时候可以先画一个简图,这就是概念图


无论用什么语言去实线,概念图都是一样的。
specification perspective


这个阶段有时候可以看到一些软件接口
实现阶段


本文详细介绍了UML类图的基本组成元素,包括类、接口及其关系。解释了类的属性和方法,以及类与类之间的关系如依赖、关联、继承、聚合、组合和实现等。
946

被折叠的 条评论
为什么被折叠?



