UML介绍
1.建模语言是建模中的一个非常关键的因素。
2.Unified Modeling Language (统一建模语言)是一种通用的模拟语言,可用于确定、展示和记录软件系统;UML中的图形标记非常适用于面向对象的软件设计。
3.什么是UML:(1)不是一种可视化编程语言,而是一种可视化建模语言。
(2)不是工具或知识库的规格说明,而是建模语言的规格说明,是一种表示的标准。
(3)不是过程,也不是方法,但是允许任何一种过程和方法使用它。
4.UML的设计目标:
(1)运用面向对象概念来构造系统模型
(2)建立起从概念模型直至可执行体之间明显的对应关系
(3)着眼于那些有重大影响的问题
(4)创建一种对人和机器都适用的建模语言
面向对象的基本概念
1.面向对象(OO):把软件组织成一系列离散的、合并了数据结构和行为的对象。
2.OO方法特征:标识、分类、继承和多态。
(1)标识:即使所有的属性值都相同,两个对象也是有差别的。
(2)继承:如果类B继承类A,那么类A中描述的操作和信息结构将成为类B的一部分。
借助继承,可以表示类之间的类似性,并且在其他类能继承的一个类中描述这些相似性。因此,就能够复用公共的描述。
继承常常被提倡为软件工业界中关于复用的一个核心思想。继承还有利于软件维护。
通过抽取和共享公共特性就能够通用化一些类,并且把它们放在继承层次的更高位置。同样,如果希望增加新类,可以寻找这样一个类,它已经提供了适用于该新类的某些操作和信息结构。然后,让新类继承这个类,只需增加该新类所独有的那些内容。然后,使这个类专用化。
(3)多态
指同一个实体同时具有多种形式(相同的操作会产生不同的动作)。
在面向对象语言中,接口的多种不同的实现方式即为多态(同样的函数在不同的类上有不同的行为)。
多态性:多态性(Polymorphism)是指同一个消息为不同的对象接收时,可产生不同的动作或执行结果。
3.信息隐蔽和局部化——封装
4.继承与派生
5.接口:接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容。
接口的主要目的是为不相关的类提供通用的处理服务。
当类实现一个接口,它就许诺实现在那个接口中执行所有的方法。
UML对系统建模
1.OO开发的每个阶段都可以用UML模型对系统建模,从系统不同的角度可以分为:类模型:包图、对象图、类图
状态模型:状态图
交互模型:用例、顺序图、活动图
针对系统构架:
构件图、配置图
类模型:提供数据模型
状态模型:各对象的控制结构
交互模型:对象间信息交换,系统的整体视图
UML的结构
UML的重要内容——九种图形
Use Case视图包括系统中所有的角色、用例和用例图可能包括:序列图、协作图和活动图
UML中的类
1、类的表示
(1)类的定义
类是具有相似结构、行为和关系的一组对象的描述符。
(2)类的表示
可视性(Visibility)标记表示:
+ 公共
#保护
- 私用
可视性也可以用以下关键字表示:public(公共)、protected(保护)、private(私用)。
若可视性标记为“+”或“public”,则为公共属性,可以被外部对象访问。
若可视性标记为“#’或“protected”,则为保护属性,可以被本类或子类的对象访问。
若可视性标记为“-”或“private”,则为私用属性,不可以被外部对象访问,只能为本类的对象使用。
可视性可以缺省,表示该属性不可视。
对象图( Object Diagram )
对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类
类和对象的UML 图
+遵守交通规则()
-姓名
-联系方式
行人
姓名 = 李四联系方式 = 120
路人甲 : 行人姓名 = 张三联系方式 = 110
路人乙 : 行人+作证()
-姓名
-联系方式-证人姓名 = 张三联系方式 = 110路人甲 : 证人姓名 = 李四联系方式 = 120
路人乙 : 证人
类 对象
对象的UML 表示法:一个方框,方框里面是对象名后跟冒号和类名,对象名和类名都有下划线。 类的UML 表示法:名字放在方框正中,首字母大写,用单数名词表示类名。
UML
六大关系
关联关系(Association),聚合关系(Aggregation),组合关系(Composition),依赖关系(Dependency),实现(Realization),泛化(Generalization) 1.关联关系(Association)
关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有 (has a)联系。
在UML 类图中,用实线连接有关联的对象所对应的类,在使用C#、C++和Java 等编程语言实现关联关系时,通常将一个类的对象作为另一个类的属性。
关联是模型元素间的一种语义联系,当类之间在概念上有连接关系时,类之间的连接叫做关联。 队员和球队之间的关联,可以用短语“队员为篮球队效力”来刻画,图形表示为:
Player
Team
plays on
关联关系(Association)
Person 类与Bicycle 类之间存在关联关系,这意味着在Person 类中需要定义一个Bicycle 类型的成员变量。
关联关系(Association)可分为:单向关联,双向关联,自关联,多重性关联 单向关联
Country
name
CapitalCity
name
HasCapital
Paris:CapitalCity
name="Paris"
HasCapital
France:Country
name="France"
Washington:CapitalCity
name="Washington"
HasCapital
USA:Country
name="USA"
类图
对象图
双向关联
Customer
-products: Product[]
Product
-customer: Customer
purchase
is sold to
多重关联
F o r m
-b u t t o n s
: Button[]Button
1..1
0..*
自关联
Node
-subNode : Node
contains
关联的约束
关联可加上一些约束,以加强关联的含义;
排序:用{ordered}表示类的对象需要排序,不允许重复值
Person
University
-Student *
{ordered}
*
StudyAt
袋子和序列
对于一对对象,二元关联通常至多有一个链接,在关联端标注{bag}{sequence},允许在一对对象上有多重链接。
袋子(bag ):无序,可重复
序列(sequence ):有序,可重复
排序例子
Person
University
-Student *
{ordered}
*
StudyAt
限定符
2.泛化关系(Generalization)
泛化关系也就是继承关系,也称为“is-a ”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML 中,泛化关系用带空心三角形的直线来表示。
在代码实现时,使用面向对象的继承机制来实现泛化关系,如在Java 语言中使用extends 关键字、在C++ 、C#中使用冒号“:”来实现。
泛化关系(Generalization)
+move() : void
+say() : void
#name : string #age : int
Person
+study() : void
-studentNo : string Student
+teach() : void
-teacherNo : string Teacher
3.实现关系(Realization)
接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系,在
这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。在UML 中,类与接口之间的实现关系用带空心三角形的虚线来表示。
+move() : void
<
Vehicle
+move() : void
Ship
+move() : void
Car
4.泛化和继承:泛化:子类向父类抽象 继承:子类对父类属性和行为的继承
+move() : void +say() : void
#name : string #age : int
Person
+study() : void
-studentNo : string Student
+teach() : void
-teacherNo : string Teacher
5UML 已成为用于描绘软件蓝图的标准语言,它可用于对软件密集型系统进行建模,其主要特点包括:工程化、规范化、可视化、系统化、文档化和智能化。
类图使用出现在系统中的不同类来描述系统的静态结构,类图用来描述不同的类和它们的关系。 在UML 中,类之间的关系包括关联关系、依赖关系、泛化关系和实现关系,其中关联关系又包括双向关联、
单向关联、自关联、重数性关联、聚合关系和组合关系。
4.1 高级对象和类的概念
1.类图建立系统模型时可以添加的细节,包含了:
枚举,多重性,作用域,可见性,关联终端,N元关联,聚合,抽象类,多重继承,元数据,具体化,约束,派生数据,包。
枚举(enumeration):由有限取值集合组成的一种数据类型。
如:enum WeekDay {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }
枚举是指同一类中具有共同属性和行为的对象,只是值不同;
泛化则是指具有一些相同属性和行为的对象,但是有一些重要属性或行为不能完全相同。
书第60页图4-2
枚举与泛化的不同(语义和UML表达)
Shape类和三角形、矩形、圆形等,父类不具有子类的特征,而不仅仅是值不同
派生元素是可以从其它元素计算出来的元素
不增加语义信息,但是有了派生元素可以更清楚或者更有利于设计
其表示法是在派生元素的名字前加一条斜线“/”
从多重性导出属性值
状态图
状态图基本组成
状态图主要由起点、终点和状态组成,各状态由转移连接在一起。
状态图适合于描述跨越多个用例的单个对象的行为。
状态图由状态、事件和转换三个主要元素构成。
状态图的要素
常见图符
事件
1.事件可以是内部的事件或外部的事件
外部事件是在系统和参与者之间传送的事件。 内部事件是在系统内部的对象之间传送的事件。
2.事件”指发生在时间和空间某点上的且能够引起某些动作执行的事情
3.事件的描述
事件名称[参数表]
事件名称:字符串,常为接收对象类中的一个操作。 参数表:事件的形式参数,可以省略 4.事件的类型
① 调用事件:是表示对操作的调度。
② 变化事件:因满足某种条件而引起的事件,变化条件用when 表示
事件
③ 时间事件:满足某一时间表达式而引起的事件,时间事件用after,when 表示。
(1)变化事件(change event )是指依赖于指定属性值的布尔表达式得到满足。这是一种一直等待直到特定条件被满足的声明方式。
在UML 中,用关键字When ,后面跟随布尔表达式来对一个变化事件建模。你可以用表达式来标记一个绝对时间(如:When time =10:00),或对表达式作不间断地测试(如when altitude <1000
when(room temperature < heating set point)when(battery power < lower limit)when(stu_num > 40)
变化事件
暂停打印机when( 打印机缺纸 ) / printTest()
打印
(2)时间事件(time event )是指在绝对时间上或在某个时间间隔内发生的事情所引起的事件。时间(段)的UML 表示法是采用关键词when 或者after ,后面跟着用括号括起的包含时间(间隔)的表达式。如: when( date = January 1,2000 ) after( 10 seconds )
时间事件(Time event )是表示一段时间推移的事件。
在UML 中,用关键字after ,后面跟着计算一段时间的表达式来对时间事件建模。表达式计时的基准,默认为进入当前状态的时间为基准。
打印就绪
打印
after (2 seconds)/connectionPrint()
(3)调用事件(Call Event)是指一个对象对操作调用的接收。
接收的类可以选择将操作实现为一个方法或实现为状态机里的一个调用事件触发器。
信号是一个异步事件,而调用事件一般来说是同步的。也就是说,当对象调用另一对象的操作时,控制就从发送者传送到接收者,该事件触发转换,完成操后,接收者转换到一个新的状态,控制返还给发送者。
未验证图书的状态
已验证图书
的状态searchBook(name)
实例1:图书馆中“图书”的状态图
7.1.3 用例图
1.用例图由如下元素组成:
角色(Actor):也称为参与者,它代表系统的用户。
系统边界(System scope):它确定系统的范围。
用例(Use case):它代表系统提供的服务。
关联(Association):它表示角色与用例间的关系。
ML中的用例图描述了一组用例、参与者以及它们之间的关系。参与者用人形图形表示,用例用椭圆形符号
表示,连线表示它们之间的关系。参与者
用例关系
2.用例图包含3方面内容:
⑴用例(Use Case)
⑵参与者(Actor)
⑶关系:关联关系(Association)、泛化关系(Generalization)、包含关系(Include)、扩展关系(Extend)等
3.用例图中可以包含注释、约束以及包。
4.参与者与用例之间:关联关系
用例与用例之间:包含关系(include)、扩展关系(extend)、泛化关系(generalization)
参与者与参与者之间:泛化关系(generalization)
参与者与用例之间:关联关系
描述参与者与使用用例之间的关系。在UML中,关系用实线表示,实线可以有箭头,也可以没有箭头。
例:参与者与用例通过关联相连。
用例间的关系——包含关系
1)包含关系(include)
包含关系指两个用例之间的关系,其中一个用例(即基本用例)的行为包含了另一个用例(即包含用例)的行为。
包含关系中箭头的方向是从基本用例到包含用例。
本例中,用例“Check Credit”检查输入的信用卡号是否有效以及信用卡是否有足够的资金。
预订座位
检查座位信息
安排座位
<
<
用例间的关系——扩展关系
扩展关系(extend)
扩展关系允许一个用例(可选)扩展另一个用例的功能。
扩展只能发生在基本用例的序列中某个特定的点上,这个点叫扩展点。
扩展关系中基本用例本身是完整的。
在扩展关系中,箭头的方向是从扩展用例到基本用例。
用例与用例的扩展关联用来表示一个用例的行为扩展了另一个用例
的行为。在UML图中,使用带虚线箭头表示,并在线上标有构造型
<
包含关联与扩展关联的区别:
存在包含关联的两个用例,用例必须包含被包含用例;存在扩展关联的两个用例则有使用被扩展用例的选择权。
用例间的关系——泛化关系
泛化关系其实是子类与父类的关系。和类之间的泛化关系一样,用例和参与者也可以继承另一个用例和参与者。
泛化的示例:银行存款有两种方式,一种是银行柜台存款,一种是A TM机存款。
父用例子用例
参与者与参与者之间泛化关系
顺序图
1.对象的三种命名方式:
生命线是对象图标向下延伸的虚线, 表示对象生存时间.
2.控制焦点(Focus of Control)又称为激活期(Activation), 用生命线上的小矩形表示, 在这个时间段内, 对象执行相应的操作.
3.建立顺序的步骤
§7.3 活动模型
1.活动图(activity diagram):显示了组成复杂过程的步骤序列,,主要用于描述算法和工作流,在设计算法和工作流的早期阶段最为有用
2.活动图的目标:显示复杂过程内部的各个步骤以及它们之间的顺序约束
注意:1)活动图可以显示控制流,但专注于操作而不是对象
2)活动图中的各项活动要有相同的细节层次
3.示例:处理股票交易定单
1)拉长了的椭圆:活动2)箭头:活动的顺序3)菱形:决策点4)粗线条:并发线程的分流和合并
4.活动图元素:起点和终点、活动、转移、接收信号和发送信号、决策点和汇合点、分叉和汇合、控制流终点、泳道
5.泳道是为组织活动图而对活动进行的分组,用来划分状态图的状态
(1)每个泳道代表整个活动的部分高级职责
(2)整个活动可能最后由一到多个泳道实现
(3)使用泳道可以把活动按照功能或所属对象的不同来进行组织。
(4)属于一个对象的所有活动都放在同一个泳道内,对象的名字放在泳道的顶部。泳道(swimlane)
业务模型中了解哪个组织负责某项活动时使用
把一项活动放在某条泳道中表明它会由组织内的某个人或某些人执行
组件图
下图中的组件图显示了四个组件:Reporting Tool、Billboard Service、ASP .NET和ADO .NET。从Reporting Tool组件指向Billboard Service、ASP .NET API和ADO .NET组件的带箭头的线段,表示Reporting Tool 依赖于那三个组件。
部署图
1.部署图用来描述系统的硬件配置、硬件部署以及软件构件和模块在不同节点上分布的模型图。
描述了系统运行时的硬件节点,以及在这些节点上运行的软件构件的静态视图。
显示了系统中的硬件、安装在硬件上的软件,以及用于连接异构的机器之间的中间件。
2.部署图中通常包含2个元素:节点(Node)、关联关系(Association)
部署图可以显示节点以及它们之间的必要连接,也可以显示这些连接的类型,还可以显示构件和构件之间
的依赖关系,但是每个构件必须存在于某些节点上。