第一章
一.UML图示建模工具
二.UML——统一建模语言,以图形符号为基础,描述软件模型既简洁又清晰。它不是开发方法,是独立于任何开发方法之外的语言。它用于描述软件系统分析、设计和实施中的各种模型。
优点:
1、UML语言使系统建模过程标准化,统一化,规范化;
2、UML在整个软件开发过程中采用相同的概念和表示方法,在不同的开发阶段,不必转换概念和表示方法;
3、UML采用图形化的表现形式,产生的模型易于理解;
4、用UML进行系统建模所得到的建模制品不但包括各种模型框图,还有大量丰富的文档给系统后期的维护工作带来了便捷;
5、UML不是一门程序设计语言,但可以使用生成工具实现UML模型和多种程序设计语言代码之间的转换。
缺点:1、无法从语法上建立状态图与顺序图的关系;
2、无法从语法上建立活动图与顺序图在流程描述中的关系;
3、协作图和顺序图中与消息相伴的参数不能与类图建立关系。
三.OMG4层模型:M0层:运行层;M1层:模型层;M2层:元模型层;M3层:元-元模型层。
M3定义M2,M2定义M1。
四.软件的两种存在形式:运行状态:对象图。静止状态:构件图、类图、部署图。
五. 建模的重要性
① 便于开发人员展现系统。
② 允许开发人员指定系统的结构或行为。
③ 提供指导开发人员构造系统的模板。
④ 记录开发人员的决策。
六. UML定义=语义+表示法。
语义=自然语言+对象约束语言(OCL);
表示法定义了UML的可视化的标准表示符号。
七. 建模四原则
选择建立什么样的模型;
每个模型可以有多种表达方式。;
模型要切合实际;
模型不能孤立。任何好的系统都是由一些几乎独立的模型拼凑出来的。
第二章 用例图
一:把一个大问题分解和抽象为若干个子问题,这些子问题就是我们的用例(Use Case)。用例图 (Use Case Diagram) 主要用于描述系统的行为及各种功能之间的关系,是描述参与者(Actors)与用例以及用例与用例之间关系的图。
二:表达方式:用例图 = 参与者 + 用例 + 关系;
用例:系统的行为、动作。
用分栏的矩形框来表达用例,第一栏标明用例的名称,并且在右上角画一个小椭圆表示当前的UML元素表示的是用例,矩形框的第二栏放置其他与这个用例有关的细节,比如扩展点、被包含用例等。
用例的名字可以书写在椭圆的内部或下方。
三:参与者:系统外部的一个实体。参与用例的执行过程。通过向系统输入或请求系统输入某些事件来触发系统的执行。由参与用例时所担当的角色来表示。每个参与者可以参与一个或多个用例。
四:发现参与者:启动系统行为的参与者是最容易识别的参与者。然后可以根据以下问题来寻找系统的参与者:
谁或什么在使用系统,交互中,他们扮演什么角色;
谁或什么对系统运行产生的结果感兴趣;
谁或什么将会改变系统中的数据;
谁或什么要与系统交互;
谁从系统获取信息,谁提供信息给系统。
五:必须用动名词为用例命名,如Create Order。
UML使用矩形框表达系统的边界,在矩形框的左上方放置系统的名字。
六:可以将一个参与者与一个或多个用例关联(Association),这种关联关系揭示了参与者初始化一个用例,而用例向参与者提供有价值的可见结果。
关联关系用实线来表示。
七:用例之间的关系包括3个:
1.泛化关系(Generalization):两个用例或两个参与者之间的关系。子用例从父用例处继承行为和属性,还可以添加行为。
2.扩展关系(Extend):两个用例之间的关系。把新行为插入到已有的用例的方法。
3.包含关系(Include) :两个用例之间的关系。用例A包含B,称A为基用例,B为被包含用例。包含关系指基用例会用到被包含用例。
三种关系的比较:
包含关系中,执行基本用例时一定会执行包含用例;
扩展关系中,执行基本用例时,扩展用例可执行也可不执行;
泛化关系中,用例之间相互独立。
第3章 对象图
一:对象图基于对象的系统瞬间状态建模(就像在某个时间点上给系统的所有参与对象拍下一张对象状态的快照,照片描述了系统在该时间点上一系列对象的状态值和他们之间的链接)。它关注的是所有参与对象当时的状态,它并不关注对象之间的关系。
二:表达式:对象图 = 对象 + 链(Object Diagram = Objects + Links);
表示方法:对象是真实世界中的一个物理上或概念上具有自己状态和行为的实体。
UML表示对象的方式:在矩形框中放置对象的名字,名字下加上下划线来表示这是一个对象。对象名可以是简单名,可以是路径名。
例:“王平” “王平:学生” “王平:学校::学生”。
三:对象名的表达遵循的语法为:对象名:类名。这种表达方法的每个部分都是可选的:因此有三种表达方式:
- object name
- object name : Class Name
- : Class Name
四:可以用两栏的矩形框来描述一个对象,第一栏放置对象名,第二栏放置该对象的属性。
对象图中属性的表达方式为:属性名 : 类型 = 值
五:对象图用链将这些对象捆绑在一起,UML将其称为Links,即链。UML用实线表示链。
六:对象图建模技术 :
① 识别将要使用的建模机制。
② 对于各种机制,识别参与协作的类、接口和其他元素,同时识别这些事物之间的关系。
③ 考虑贯穿这个机制的脚本,冻结某一时刻的脚本,并且汇报每个参与这个机制的对象。
④ 按照需要显露出每个这样的对象的状态和属性值,以便理解脚本。
⑤ 显露出这些对象之间的链,以描述对象之间关联的实例。
第4章 顺序图
一:顺序图是基于交互的对象的行为顺序建模。
二:交互图描述对象之间的动态合作关系以及合作过程中的行为次序。
交互图常常用来描述一个用例的行为,显示该用例中所涉及的对象以及这些对象之间的消息传递情况。
交互图有顺序图和协作图两种形式。如果想按时间顺序对消息的交互过程建模,则使用顺序图,它展示的是按时间顺序发生的消息传送; 如果想按对象关联对消息的交互过程建模,则使用通信图,通信图强调的是消息交互传递中对象之间的关联。
三:顺序图:顺序图用于捕获系统运行中对象之间有顺序的交互,强调的是消息交互的时间顺序;顺序图描述了对象实现全部或部分系统功能的行为模型。
四:顺序图由生命线和消息组成:顺序图 = 生命线 + 消息。
顺序图的表示方法:
1.生命线:每个参与者及系统运行中的对象都用一条垂直的生命线(Lifelines)表示。生命线展示了一个对象在交互过程中的生命期限,表示一个对象在系统表现一个功能时的存在时间长度。
生命线的描述标签可以使用下面的语法:对象名 [选择器] : 类名 ref decomposition
2.活动条(Activation Bar):也称为执行发生(Execution Occurrence),它用来表示对象的某个行为所处的执行状态。活动条用小矩形条表示。
消息定义:在面向对象的分析和设计中,对象的行为也称为消息(Message)。通常,当一个对象调用另一个对象中的行为时,即完成了一次消息传递,顺序图关注生命线间的通信,这些通信就是对象发送的消息。UML用生命线间带有实心箭头的实线表示消息,每条消息从发送对象指向接收对象。
消息命名:消息都必须命名。在表达消息的箭头上放置表示消息名称的标签,其语法如下:属性 = 信号或消息名(参数: 参数类型) : 返回值。
消息分类:消息分为简单消息、同步消息和异步消息。UML用实体箭头表示同步消息,用开放式箭头表示异步消息。
简单消息 | 表示控制如何从一个对象发给另一个对象,并不包含控制的细节 |
同步消息 | 同步意味着阻塞和等待,如果对象A向对象B发送一个消息,对象A发出消息后必须等待消息返回,只有当对象B处理消息的操作执行完毕后, 对象A才可继续执行自己的操作,这样的消息称为同步消息。 |
异步消息 | 异步意味着非阻塞,如果对象A向对象B发送一个消息,对象A不必等待对象B执行完这个消息,就可以继续执行自己的下一个行为,这样的消息称为异步消息 。 |
4.对象创建消息:创建对象的消息被称为对象创建消息,表示对象在交互过程中被创建,通过构造型<<create>>来表示。
5.对象销毁消息:一个对象可以通过对象销毁消息销毁另一个对象,也可以销毁它本身。UML将构造型<<destroy>>作为消息的标签来表达对象销毁消息,同时在对象生命线的结束部分画一个“×”来表示该对象被销毁。
6.无触发对象和无接收对象消息:
无触发对象消息称为found message,用活动条开始端点上的实心球加箭头来表示。表示消息的发送者没有被详细指明,或者是一个未知的发送者,或者该消息来自于一个随机的消息源。
无接收对象消息称为lost message,用箭头加实心球来表示,它描述消息的接收者没有被详细指明,或者是一个未知的接收者,或者该消息在某一时刻未被收到 。
7. 自我调用消息:自我调用消息表示消息从一个对象发送到它本身,可以通过活动条的嵌套来表示自我调用消息(Call Self Message)。
8. 控制信息:有两种情况可以应用控制信息:
n 条件(Condition):仅当条件为真的时候消息才被发送
n 迭代(Iteration):为了接收多次对象消息被发送多次
语法为:[表达式]消息标签。
条件控制消息的语法为:[表达式]消息标签。
迭代控制消息的语法为:*[表达式]消息标签。
9. 消息的返回值:消息的返回值(Return Value)可以表示为:返回变量 = 消息(参数);或者在活动条的结尾应用一个返回消息线
第5章 通信图
一:基于交互作用的对象行为建模。通信图(Communication Diagram) 与顺序图都是描述对象之间的相互作用的建模工具。通信图描述参与一个交互的对象的链接,强调发送和接收消息的对象之间的链接,强调的是对象之间在交互作用时的关联; 通信图的消息发生顺序用图中的消息编号的方法来表示。
二:合作图中最常用的消息执行顺序的编号方案有两种:
顺序法:用简单编号方案,从1开始,由小到大,顺序排列。
层次法:用小数点制编号方案,此时常常要求表示系统号、子系统号和模块号。
三:通信图的表达方式为:通信图 = 交互的参与者+通信链+消息。
表示方法:
交互的参与者(Participants)用一个对象符号表示,在矩形框中放置交互的参与者,显示交互的参与者的名称和它所属的类。在通信图中表示对象的方法与在对象图中表示对象的方法一致,其语法均为: 参与者名:类名。
链接(Link)是两个对象间的连接路径,它表示两个对象间的导航(Navigation)和可视性(Visibility);UML用直线来表示链接; 一般情况下,一个链接就是一个关联的实例。
消息:1. 自我委派消息 2. 控制消息 3. 嵌套消息和子消息 4. 循环 5. 并发消息。
1.消息可能从一个对象发送到它自身,这样的消息被称为自我委派(self Delegation)消息。
2.控制消息(Control Message)表示当控制条件为真的时候消息才会被发送。
3.当一个消息导致了另一个消息被发送的时候,第二个消息被称为嵌套在第一消息里,这样的消息称为嵌套消息。
4.在通信图中,循环用“*”号来表示,循环子句被放在顺序号的后面,表示循环将按照给定的循环子句重复 。
5.几个消息需要同时被发送,这样的消息称为并发消息。
四:
优点:
1.通信图显示了系统中对象和对象之间的关联,而这种对象间的关联在顺序图中是无法直接表示的。
2.通信图特别适合用来描述少量对象之间的简单交互,易于展示对象之间是如何连接到一起的,但是却使我们很难一眼就看出交互中消息的发生顺序。
缺点:
1.随着对象和消息数量的增多,理解通信图将越来越困难。
2.通信图很难显示补充的说明性信息,例如时间、判定点以及不同种类的消息等,而在顺序图中这些信息可以方便地添加到注释中 。
总之,顺序图和通信图建模中所表达的交互模型是完全一致的,它们只是从不同的角度表达了系统中的交互,二者是可以互相转换的。
第6章 类图
一:类的建模有两个目的
一是建立类与类之间的功能关系的模型,即域模型 (Domain Model),域模型解决的是功能性需求问题;
二是建立类与类之间的松耦合关系的模型,即设计模型 (Design Model),设计模型是在域模型的基础上解决软件的质量问题,即非功能需求问题。
二:类图 (Class Diagram) 是类的模型,是利用图示和文字注释描述类以及类和类之间相互关系的方法;类图用于建立类、类的内部结构 (类的属性和方法) 以及类与类相互之间的各种关系模型;类图是我们编程的最重要的模型依据。
三:表达方式:类图 = 类 + 关系 + 约束。
四:
1.表示方法:在UML中,用矩形框来表示类; 一般将矩形框分为三部分,最上方为类的名字,中间为类的属性。
2.类命名:用英文,首字母大写。斜体字说明类为抽象类。接口 (Interface) 则用构造型的方式来表示。
3.类的属性:属性的命名应该用首字母小写的名词为属性命名,如果属性名中包括多个单词,除了第一个单词外,应该把其余单词的第一个字母大写。
多重性(multiplicity)指明该属性类型有多少个实例被当前属性引用:多重性::=[低…高];
属性缺省值即默认值;
约束(contraints)表示对属性的约束和限制,通常是用“{ }”括起的布尔类型的表达式;
4.类的方法:
方法的可见性也用+,#,~或-表示public,protected,package或private级别的可见性;
类的方法名应该用首字母小写的动词,如果方法名中包括多个单词,除了第一个单词外,应该把其余单词的首字母大写;
指明方法的参数列表,如果该方法没有参数,则参数列表可以省略,但空括号还有保留;参数列表的格式为:
方向 参数名 : 类型[多重性] = 缺省值{特性}
方法的返回值:如果方法没有返回值,那么return-type为空 。
特性(property)用于说明方法具有的其它性质,代表附加在元素上的任何可能值。常用特性包括:
(1)precondition指明一个方法被调用前系统必须处于的状态; (2)postcondition指明一个方法被调用后系统处于的状态; (3)query说明方法将不对类的属性做修改,当前方法仅是一个查询方法; (4)exception指明方法可能引起的异常; (5)bobyCondition对方法的返回值作约束。 |
5. 类的静态属性和静态方法的表述方法
静态的属性和方法被称为静态类成员。在类图中,用下划线标明该属性或方法是静态成员。
类的关系:
关联(Association) | 关联(Association)表示一个对象拥有另一个对象,指两个类之间的“has a”的关系 |
泛化(Generalization) | 类之间存在相似性和差异性,应用泛化,子类共享定义在一个或多个父类(Parent class)里的结构或行为;泛化有时被称作“is a kind of”关系;泛化是指父类与其一个或多个子类之间的关系,每个子类继承(Inherit)其父类的特征。 |
实现(Realization ) | 接口被建模为实现(Realization)关系。实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,由实现关系指定二者之间的一个合同(Contract),一个模型元素定义一个合同,而另一个模型元素保证履行该合同。 |
依赖(Dependency) | 依赖(Dependency)是两个事物间的语义关系,其中一个事物(称为服务的提供者)发生变化,会影响到另一个事物。 |
第7章 状态图
一:状态图是基于状态的对象行为建模。
二:状态图由状态(State)和迁移(Transitions) 组成。
表达方式为:状态图=状态+迁移。
表示方法:UML用圆角矩形来表示状态,其中包含可选的名称。
三:状态的种类:根据状态发生的时间或状态组成的复杂性,对状态进行分类:
简单状态(Simple State) | 特点是它没有子状态,只带有一组转换和可能的入口和出口动作 |
复合状态(Composite State) | 由一组或多组子状态图组成; 如果一组状态有多个子状态图,则用虚线将该状态图分开,在分开区域分别包含子状态图 |
初始状态(Initial State) | 特殊状态,表明状态图状态的起点 |
终止状态(Final State) | 特殊状态,进入此状态表明完成了状态图中状态装换历程的所有活动 |
结合状态(Junction State) | 将两个转换连接成一次就可以完成的转换 |
历史状态(History State) | 保存组成状态中先前被激活的状态 |