跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
发布时间:2024-08-27
发布时间:2024-08-27
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
1.1跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
1.1.1UML类图
1、UML类图
(1)类图
类是面向对象模型的最基本的模型元素。类图表达为了实现某一用例中的一组对象类之间的静态结构,以及它们之间的联系和交互。
(2)类图的作用
主要体现在描述结构和联系:类图描述系统中类的静态结构,它不仅定义系统中的类,表示类之间的联系(关联、依赖、聚合等),还包括类的内部结构(类的属性和操作)。(3)类与类之间的联系
类与类之间的联系可以分为两种:结构性联系(静态联系)和行为性联系(动态联系)。
1)结构性联系指类的继承与派生、父类与子类间的聚合、组合、泛化/特化等。
2)行为性联系指类之间可以通过消息联系,通过系统预定义或用户自定义的语义联
系。
(4)类的UML的图示
类是对象的集合,这些对象有共同的结构特征、行为特征、联系和语义;在UML中类的图形表示为实线矩形框。
但要注意的是:
在类图中不一定要列出全部的成员内容。如在建立分析模型或设计模型时,可以只列出类名,在图中只需要着重表达类之间的联系;在建立实现模型时,再在类图中给出类的组成成员属性和操作方法等方面的详细内容。如下图所示:
杨教授大学堂,版权所有,盗版必究。1/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
2、类中的属性成员及其UML的图示
(1)属性(成员变量)
类中的成员属性表示的形式为:可视性属性名(多重性):类型=初始值
其中的可视性可以为:公共、保护和私有三种不同的形式,而类型也就是数据类型,依赖于所选择的编程实现的语言。
(2)类的static成员属性
所应该注意的是,对类的成员属性也就是static成员属性在类图中的表示为带下划线的形式。如下面的Compute类中的“oneUSBDevice”成员属性的表示方式。
杨教授大学堂,版权所有,盗版必究。2/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
杨教授大学堂,版权所有,盗版必究。 3/20页
3、类中的方法成员及其UML 的图示
(1)类中的操作(成员方法)
操作是类的行为特征或动态特征,用于对服务或实体相关的操作建模。一个类可以有操作并且可以允许有多个不同的操作,当然也可以没有。没有一个功能操作方法的类经常用于表达数据。
功能操作方法在类图中位于最底部,同时用文字串说明。其表示为:
可视性 操作名(参数列表):返回列表{性质}
注意:
操作在实现阶段经常用函数完成,例如,+carDrive(speed :Integer, direction:Direction)。
(2)类中的操作的类型
1) 实现者操作(Implementor operations ):实现一些业务功能。实现者操作可从交互图
中找到。
2) 管理者操作(Manager operations ):管理对象的生成和构造。例如,类的构造器和
删除器。
3) 访问操作(Access Operations ):属性通常是专用或保护的,但其他类可能要浏览或
改变某个类的属性,可以通过访问操作实现。 应该,通过对每个属性建立Get 和Set 操作来实现。
4、类的职责 类的职责主要指的是类所担任的任务,类的设计要完成什么样的功能,要承担的义务。一个类可以有多种不同的职责,设计得好的类一般至少有一种职责,在定义类的时候,将类的职责分解成为类的属性和方法。
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
通常在UML中在类图的最下方用单独的部分列出类的职责,类的职责其实只是一段或多段文本描述。
5、类的关联(Association)
(1)关联的含义
关联是一种结构化的关系,指一种对象和另一种对象有联系。它是对具有共同结构特性、行为特性、关系和语义的链接的描述。
(2)关联的UML图示
在UML的类图中,关联用一条实线将类连接在一起。如果是单向关联,则在关联端加箭头表示方向。如果是双向关联则不用。
(3)关联的重数
由于关联有两元关系和多元关系。而两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。
杨教授大学堂,版权所有,盗版必究。4/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
并且在关联端可以标出关联中的数量关系——重数(多重性)。关联端的多重性规定该类中有多少个对象参与该关联。常用的有
1)“0..1”:表示零到1个对象
2)“1”:表示1个对象
3)“0..*或者*”:表示零到多个对象
4)“5..17”:表示5 到17个对象
如果图中没有明确地标识关联的重数,那就意味着是1。例如下图所示:
(4)对关联的修饰
1)名字:可以给关系取名字以进一步说明关系的含义
2)角色:关系的两端代表不同的两种角色
3)重数:表示有多少对象通过一个关系的实例相连接
杨教授大学堂,版权所有,盗版必究。5/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
(5)关联的类型
1)普通关联
普通关联是最常见的一种关联,只要类与类之间存在连接关系就可以用普通关联表示。比如,张三使用计算机,计算机会将处理的结果等信息返回给张三,那么,在其各自所对应的类之间就存在普通的关联关系。
普通的关联关系的图示是连接两个类之间的直线。由于关联可以是双向的,因此可以在关联的一个方向上为关联起一个名字,而在另一个方向上起另一个名字(当然,也可以不起名字)。名字通常紧挨着直线书写。
杨教授大学堂,版权所有,盗版必究。6/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
2)导航关联
如果类与类之间的关联是单方向的,则为导航关联。此时其UML的表示应该在关联端加箭头表示方向,以表明只有箭头所指的方向上才有这种关联关系。
如下示例:
Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。
3)限定关联
●在关联端紧靠对象类图标处可以有限定符(Qualifier),该限定符代表被关联的对象
的一个或多个属性的列表。
●带限定符的关联称为限定关联,常用于表示一对多或者多对多的关联关系中。通过
杨教授大学堂,版权所有,盗版必究。7/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
限定关联可以把模型中的重数从一对多变为一对一。
使用限定符将关联中多的那一端的具体对象分成对象集,限定符的名字放置在关联关系末端的一个小方框内,并且可以缺省但要给出该限定符所代表的对象属性的数据类型。
例如,顾客购买电视,他指定买某个品牌型号的电视,则售货员才能明确选取。此时售货员与顾客所指定的电视之间为限定关联,也即与某一特定类型的电视产生关联。
4)自身关联(Reflexive Association)
自身关联也称为递归关联(Recursive Association),是一个类与其本身的关联(在UML 的类图中连接到自身),即一个类的两个对象之间的联系(同类的对象之间的语义上的关联)。例如,某学生既可能是某个班级的班长,也可能是该学校的一个普通学生。
5)关联类
当关联本身也有属性、操作时则称为关联类。因为它既是一个关联同时也是一个类,它定义了一组属于该关联的特性,但这些特性不属于被关联的任何一个类。
此时,在UML的类图示中应该用一条虚线把关联类连到关联线上。如下图所示:
杨教授大学堂,版权所有,盗版必究。8/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
注意:对于多对多的双向关联,可以转化为两个一对多的关联来实现。
6、类的聚合与组合关系
聚合与组合反映了事物的部分与整体之间的关系。通过聚合与组合对实体之间的部分与整体关系建模。识别聚合关系的常用方法是在系统需求分析中寻找“由….构成”、“包含”或者“是….”等字句。
注意:
1)聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上
位于相同的级别。
2)聚合也转换成Java中的一个实例作用域变量。
(1)聚合(Aggregation)
1)比较弱的部分与整体
聚合表示事物的部分与整体的一种松散(比较弱)的对象间的关系,举个例子:计算机和他的外围设备就是一例。
2)UML的表示法
其表示方法为在关联线端加一个小空心菱形,菱形链接处代表整体事物类,称为聚合类,另一端连接代表部分事物类。
杨教授大学堂,版权所有,盗版必究。9/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
3)在Java中的程序示例
(2)共享聚合
1)整体方的类的重数为多
在聚合中,代表部分事物的对象可以属于多个聚合对象,此时为共享聚合(整体方的类的重数为多)。
2)示例
例如,某高校社团组织与其成员的关系,其成员未必只属于该组织,还可以属于别的组织(既是书法协会的成员,也可能又是摄影协会成员)。
(3)组合(Composition)---复合聚合
1)较强的聚合
组合表示事物的部分与整体关系的较强情况,比如:树和它的树叶之间的关系。此时构成整体类的部分类完全属于整体类并且体现树状结构的关系。
2)UML的表示法
其表示方法为在关联线端加一个小实心菱形,菱形链接处代表整体事物类,称为组合
杨教授大学堂,版权所有,盗版必究。10/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
杨教授大学堂,版权所有,盗版必究。 11/20页 类,另一端连接代表部分事物类。可以将组合理解成强类型的聚合。
3)合成的新对象与组成部分的各个对象的关系
在一个合成里,部分与整体的生命周期都是一样的。一个合成的新对象完全拥有对其组成部分的支配权。包括他们的创建和毁灭(与代表整体的对象同时存在、消失)。因为如果没有了整体类,则此时系统中的部分类也没有存在的价值,部分类的存在是因为有整体类的存在。
4)示例
例如,一棵树由树干、树枝、树叶、树根等组成。如下图所示:
例如,一个窗口由文本框、列表框、按钮、菜单等组成。如下图所示:
也可以将几个实心菱形合并为一个,用直线分支地连接到各个部分类,构成一个树状结构。
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
再比如,前面的Employee和TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。
5)“一对一”的组合关系的代码示例
表达CPU(CPU)类对象实例是Computer(计算机)类对象实例的一部分,而且是一个Computer拥有一个CPU。
public class Computer{
private CPU intelCPU;
}
public class CPU{
}
6)“一对多”的组合关系的代码示例
下面的例子表明,Computer(计算机)可以包容0到任意数量的HDDisk(硬盘),而当Computer包容HDDisk的时候,HDDisk可以被0或者1个Computer包容。
为了实现“一对多”的组合关系的这种包容,可以使用集合来保留这些类。
public class Computer{
private ArrayList hdDiskObj ;
}
public class HDDisk{
}
杨教授大学堂,版权所有,盗版必究。12/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
4、泛化与特化
泛化与特化是现实世界中一般性实体与特殊性实体之间的关系,一般性实体是特殊性实体的泛化,特殊性实体是一般性实体的特化。类与其子类便具有这样的关系。如,学生,大学生,研究生等。
(1)继承
UML中地泛化体现了分类与继承原则,一个子类继承超类的全部属性、方法,子类本身还可以有自己的子类,从而构成复杂的一般与特殊的结构。继承又可分为单继承和多继承。
(2)重载与多态
重载与多态是面向对象技术的重要组成部分,重载是实现多态的一条重要途径,对于同一个操作产生不同的结果。在用UML建模时,对于一个操作,可以用约束“{polymorphic}”规定为多态性操作,即该操作可以为子类重载;对于一组泛化,可以用约束“{overlapping}”规定为是可重载的,即它的实例可以有多种类型。
杨教授大学堂,版权所有,盗版必究。13/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
(3)泛化与特化的UML表示形式
1)父类与子类的关系图示为一个带空心三角形的直线,空心三角形紧挨着父类。
2)类的继承关系的层次体现
(4)抽象类的表示形式
抽象类或抽象操作的名字用斜体字表示。关键字abstract可以放置在位于名称下面或后面的特性表中,如Account{abstract},如下的Computer类为系统中的抽象类。
杨教授大学堂,版权所有,盗版必究。14/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
5、依赖(Dependency)和精化
(1)依赖(实体之间一个“使用”关系)
1)依赖关系是一种使用关系
特定事物的改变有可能会影响到使用该事物的事物,反之不成立。软件系统的设计人员在想显示一个事物使用另一个事物时使用依赖关系。在程序设计实现中的依赖关系体现在某个类的方法使用另一个类作为参数。
2)语义联系
依赖是两个模型元素(类、用例)之间的语义联系,依赖是指一个模型元素变化必影响到另一个模型元素;一个模型元素是独立的,另一个模型元素是非独立的(依赖前面的元素)。
3)在UML中的图示
类与类之间的依赖关系的UML图示采用用一条虚箭线表示,箭头指向独立的类。其尾端的类依赖于头端的类。
杨教授大学堂,版权所有,盗版必究。15/20页
跟我学统一建模语言UML——软件系统概要设计中所涉及的UML类图实现示例
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
例如,去餐馆吃饭的情况:要根据菜单点菜。再例如,某一个类使用了另一个类的对象作为操作方法中的参数,则这两个类之间就具有依赖关系,如果一个类存取另一个类中的全局对象以及一个类调用另一个类中的类作用域的操作方法则这两个类之间也就具有依赖关系。
(2)精化
精化关系用于表示同一事物的两种描述之间的关系,对同一事情的两种描述建立在不同的抽象层上。精化关系常用于模型化表示同一个事物的不同实现,比如一个是简单实现,一个是比较复杂或者高效的实现。
精化关系的图示方法与泛化与特化的表示相似,但用带空心三角形的虚线表示并且空心三角形指向粗类。如下面的图示表明设计类是对分析类的精化。
6、某个项目中的各个类的类图实现示例
杨教授大学堂,版权所有,盗版必究。16/20页