类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性信息。
类定义了一组有着状态和行为的对象。属性通常用没有身份的数据值表示,如数字和字符串。行为由操作来描述,方法是操作的实现。对象的生命期则由附加给类的状态机来描述。
那么接下来介绍一下类的具体构造,类的构造包括名称,属性,操作,如下图:
结构
1、 名称(Name):类的名称是每个类中所必有的构成元素。
2、 属性(Attributes)
(1) 可见性:类中属性的可见性主要包括公有(public)、私有(Private)和受保护(Protected)。在UML中,公有类型的用“+”表达,私有类型用“-”表达,而受保护类型则用“#”表达。UML的类中不存在默认的可见性,如果没有显示任何一种符号,就表示没有定义该属性的可见性。
(2) 属性名:按照UML的约定,单字属性名小写。如果属性名包含多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。
(3) 类属性。属性也可以作为一个类属属性来定义,这就意味着此属性被该类的所有对象共享。在类图中,类属性带有一条下划线。
3、 操作(operations)。类的操作是对类的对象所能做的事务的抽象,相当于一个服务的实现。
构造介绍完了,接着就向大家介绍一下类之间的关系吧。
关系
关系包括着关联、依赖,泛化,实现
1. 关联
关联名
1).名称(association name):用以描述该关系的性质
2).角色(Role):当一个类处于关联的某一端时,该类就在这个关系中扮演了一个特定的角色,角色是关联中国靠近他的一端的类对另外端的类呈现的职责。
3).多重性(Multiplicity):关联角色的多重性说明一个关联实例中有多少个相互连接的对象。
普通关联
i. 单向关联
表示相识关系,指一个类知道另外一个类。代码中的体现是这个类就可以调用另 一个类的公共属性和方法。没有生命期的依赖。一般表示为一种引用。
ii. 双向关联:指双方都知道对方的存在。代码中的体现:,都可以调用对方的公共属性和方法。(这种关 系在设计的时候比较少用到,关联一般都是有向的)
iii. 两个类之间可以有多种关联
iv. 一个类可以和多个类关联
自身关联
自己引用自己,带着一个自己的引用。代码中的体现:就是在自己的内部中有着一个自身的 引用。
整体和部分关联
(1).聚合:
空心菱形
(2).组合
实心菱形
比较
必须现有主体才能有个体的是组合;主体不存在的情况下个体也可以存在的是聚合。但是这个要视问题域而 定;比如我们在一个主机类中,螺丝钉一定要组合在主机中,因为他离开了主机就没有意义了;但是在卖零部件的店铺业务中,就是螺丝钉离开了主机,它还是有意义的,这就是聚合了。所以还有一种说法:A组合 B,则A需要知道B的生存周期,即可能A负责生成或释放B,或者A通过某种途径知道B的生成和释放。
2.依赖
1.依赖是一种使用关系。用带箭头的虚线表示,其中箭头指向被依赖方。
2.依赖是个普遍存在的关系;初学者会大量使用依赖关系,但是这样表示是不严密,如果两个类之间还有结构化关 系就用关联关系;因为结构化关系中包含使用依赖关系
3. 就是在一个类中的某个方法中用到了另一个类
3. 泛化
也就是我们常说的继承关系(继承:一个类继承另外一个类的同一功能,并增加自己的新功 能);用实线空心的三角形来表示,其中空心三角形指向
继承分类
1.单重继承:一个子类只能有一个父类
2.多重继承:一个子类可以有多个父类
父类,表示子类继承父类。
4. 实现关系
实现是类元之间的语义关系,在该关系中一个类元描述了另一个类元保证实现的契约。
泛化和实现关系的区别:
泛化关系是指同一语义层的元素连接起来,通常在同一模型内;实现关系将不同语义层内的元素连接起来,通常在不同模型内。
下面是一个车间工作流程的类图。他描述了车间各个模块之间的相互关系,包括关联,继承等。