类图的内容
一、类图的用途
类图是系统静态图的一部分,它主要用来描述软件系统的静态结构,当系统分析师以支持软件系统的需求为目的设计静态图是通常以下述3中方法之一使用类图。
1.对系统词汇建模
描述系统的边界,也就是说用来决定那些抽象是用来建模系统中的一部分,那些抽象是处于要建模系统之外。
这是非常重要的一项工作,因为系统最基本的元素在这里被确定。
系统分析师可以用类图描述抽象和它们的责任。
2.对简单协作建模
现实世界中的事物大多是相互关系、相互影响的,将这些事务抽象成类之后,情况也如此。所要构造的软件系统中的类很少有孤立存在的,它们总是和其他类协同工作,以实现强于单个类的语义。
因此,在抽象了系统词汇后,系统分析师还要必须将这戏词汇中的事物系统工作的方式可视化和描述。
3.对逻辑数据库模式建模
在设计一个数据库时,通常使用数据库模式来描述数据库的概念设计。数据库模式建模是数据库概念设计的蓝本,可以使用类图对这些数据库的模式进行建模。
二、类图包含7个元素:
1类、2接口、3协作、
4依赖关系、5泛化关系、6实现关系、7关联关系。
下面再以图形化记忆下就清楚了。
1.类
类是面向对象系统组织机构的核心,类用矩形表示,被划分为三部分:
名称部分(Name)
属性部分(Attribute)
操作部分(Operation)
图符:
属性部分:
在UML中属性的语法为:
【可见性】属性名【:类型】 【初始值】 【属性字符串】
(1)可见性:属性具有不可见性。
在UML中公有类型用“+”表达,私有类型用“-“表达,而受保护类型用”#“表达。
(2)属性名:根据定义,类的属性首先是类的一部分,而且每个属性都必须有一个名字以区别类中的其他属性。
(3)类型:属性具有类型,用来说明该属性是什么数据类型
经典的属性有:整型、布尔型、实型、枚举型。
(4)初始值:设定初始值有两个用处
保护系统完整性,防止漏掉取值或被非法的值破坏系统完整性。
为用户提供易用性。
(5)属性字符串
用来指定关于属性的其他信息,例如某个属性应该是永久的,任何希望添加在属性定义字符串的值但又没有合适的地方可以加入的规则,都可以放在属性的字符串里。
操作部分
类的操作是对类的对象所能做的事务的抽象,它相当于一个服务的实现,该服务可以由类的任何对象请求以影响其行为。
在UML中操作的语法:
【可见性】 操作名 【(参数表)】 【:返回类型】 【属性字符串】
(1)可见性:公有(public)用”+“,私有(private)用”-“,受保护(protected)用”#“,包内公有(package)用”~“。
(2)操作名:在实际建模中,操作名是用来描述所属类的行为的动词或动词短语。
(3)参数表:参数的定义方式采用”名称:类型“的定义方式。如果存在多个参数,则将各个参数用逗号隔开。参数可以具有默认值。
(4)返回类型:绝大部分编程语言只支持一个返回值,即返回类型至多一个,虽然没有返回类型是合法的,但是具体的编程语言一般要加上一个关键字”void“来表示五返回值。
(5)属性字符串:如果希望在操作的定义中加入一些除了预定义的元素之外的信息,就可以使用属性字符串。
2.接口
接口是在没有给出对象的实现和状态的情况下对对象行为的描述。接口包含操作但不包含属性,且它没有对外界可见的关联。
当一个接口是在某个特定类中实现时,使用该接口的类通过一个依赖关系(一条带箭头的虚线)与该接口相连接。
3.依赖关系
表示两个或多个模型元素之间语义上的关系。
UML定义了4中基本依赖类型,分别是使用依赖(Usage)、抽象依赖(Abstraction)、授权依赖(Permission)、绑定依赖(Binding)
3.1 使用依赖(Usage)
使用依赖都是非常直接的,通常表示客户使用提供者提供的服务以实现它的行为。
| 依赖关系 | 功能 | 关键字 |
| 使用 | 声明使用一个模型元素需要用到以存在的另一个模型元素,这样才能正确实现使用者的功能(包括调用、实例化、参数和发送) | <<use>> |
| 调用 | 声明一个类调用其他类的操作方法 | <<call>> |
| 参数 | 声明一个操作它的参数之间的关系 | <<parameter>> |
|
发送 |
声明信号发送者和信号接收者之间的关系 |
<<send>> |
|
实例化 |
声明用一个类的方法创建另一个类的实例 |
<<instantiate>> |
3.2抽象依赖(Abstraction)
用来表示客户与提供者之间的关系,依赖在于不同抽象层次上的事物。
| 依赖关系 | 功能 | 关键字 |
| 跟踪 | 声明不同模型中的元素之间存在一些连接,但不如映射精确 | trace |
| 精化 | 声明具有两个不同语义层次上的元素之间的映射 | refine |
| 派生 | 声明一个实例可以从另一个实例导出 | derive |
3.3授权依赖(permisson)
表示一个事物访问另一个事物的能力
| 依赖关系 | 功能 | 关键字 |
|
访问 |
允许一个包访问另一个包的内容 | access |
| 导入 | 允许一个包访问另一个包的内容并为被访问包的组成部分增加别名 | import |
| 友元 | 允许一个元素访问另一个元素,不管被访问的元素是否具有可见性 | friend |
3.4绑定依赖(binding)
是较高级的依赖类型,用于绑定模板以创建新的模型元素
| 依赖关系 | 功能 | 关键字 |
| 绑定 | 为模板参数指定值,以生成一个新的模型元素 | bind |
4.泛化关系(Generalization)
泛化描述了“is a kind of”(是…的一种)关系
如图:
5.关联关系(Association)
关联描述的是一组具有共同结构的特征、行为特征、关系和语义的链接,它是一种结构关系指明一个事物的对象与另一个事物对象间的关系。
如图:
除了关联的基本形式之外,还有6种用于关联的修饰,分别是:名称、角色、多重性、聚合、组合和导航性。
5.1名称(Name)
用来描述关系的性质,如图
关联的名称并不是必须的
5.2角色
当一个类处于关联的某一端时,该类就在这个关系中扮演一个特定的角色。如图
5.3多重性(Multiplicity)
约束是UML三大扩展机制之一,多重性是其中一种约束,也是使用最广泛的约束。
它说明一个学校可以有一个或更多学生,而一个学生可能同时在0或多个学校中学习。
5.4聚合关系(Aggregation)
它表示整体与部分关系的关联,简单的说,关联关系中一组元素组成了一个更大、更复杂的单元,这种关联就是聚合。
举例:
5.5组合关系(Composition)
组合关系是聚合关系中一种特殊情况,是更强形式的聚合,又被称为强聚合。
组合关系用带菱形头的实线表示,头部指向整体。
举例:
5.6导航性(Navigation)
描述的是一个对象通用链进行导航访问另一个对象,即对一个关联端点设置导航属性意味着本端的对象可以被另一端的对象访问。
两个方向上都可以导航的关联成为双向关联,用一条没有箭头的实线来表示。
6.实现关系(Realization)
实现是规格说明和其实现之间的关系,它将一种模型元素与另一种模型元素连接起来,比如类和接口。
实现关系通常在两种情况下被使用:在接口与实现该接口的类之间;在用例以及实现该用例的协作之间。
这个实例描述的是键盘保证自己部分行为可以实现打字员的行为。
7.机房收费系统—类图
对象图(Object Diagram)的内容
对象图表示在某一时刻一组对象以及它们之间关系的图。对象图可以被看成是类图在系统某一时刻的实例。
与创建类图相似,其中的一个区别是在对象名的下面要有下划线,且对象名的表示方法由三种
a.一般方法
b.只有类名,冒号和下划线
c.只有对象名和下划线
一、类图和对象图的区别:
二、对象图建模过程:
(1)确定参与交互的各对象的类,可以参照相应的类图和交互图。
(2) 确定类之间的关系,如依赖、泛化、关联和实现。
(3)针对交互在某特定时刻各对象的状态,使用对象图为这些对象建模。
(4) 建模时,根据建模的目标,绘制对象的关键状态和关键对象之间的连接关系。
三、机房收费系统—对象图