UML面向对象建模与设计——笔记(一)

来源:互联网 发布:知乎 济南血液病医院 编辑:程序博客网 时间:2024/05/16 10:23

UML主要是参考UML面向对象建模与设计(第二版)做的笔记。

这里涉及到UML建模的图,这里就用visio来现学现卖了。中间顺带插入一些用visio对应的操作。


一.OO设计

1. OO设计的方法论(开发的阶段)

1>.系统构思

构思应用,并阐释临时需求。

2>.分析

和请求这一起理解问题,分析系统构思时的具体需求,清楚目标。
分析模型有两部分,领域模型,描述系统每部反应的真实世界的对象;应用模型,描述用户可见的应用系统本身的组成部分。
简单说:就是能够以让请求者明白的系统概念展现系统的模型,或者操作执行过程的模型,来达到保证需求正确的要求。

3>.系统设计

设计高级策略——系统架构。同时制定政策(??),充当后面更加详细设计的内容的默认选项。这个过程中确定一些关键的设计的解决方案。

4>.类的设计

配合系统设计策略,类的设计人员要给分析模型添加细节。类的设计的焦点在事先每个类的数据结构和算法。

5>.实现

2.三种模型(系统的视图)

三种模型是分别独立,但有相互交叉连接的。不同的模型有着有限而清晰的连接;好的设计会隔离系统的不同层面(??),限制它们的耦合。典型的软件合并了三种模型:它使用数据结构(类模型),按时间设定操作顺序(状态模型),并在对象间传递数据和控制(交互模型)。每种模型包含了对其他模型中的实体的引用。

1>.类模型

描述了系统内部对象及其关系的静态结构(属性,操作,关系,标识)。类模型界定了软件开发的上下文——论域。类模型包含类图。
类图的结点是类,弧表示类间的关系。

2>.状态模型

描述了对象随着时间发生变化的方面。状态模型使用状态图确定并实现控制。状态模型使用状态图确定并实现控制。
状态图的节点是状态,弧是由事件引发的状态间的转移。

3>.交互模型

描述了系统中的对象如何协作以完成更为宽泛的任务。交互模型自用例开始,用例随后会有顺序和活动图详细描述。
用例描述系统和外部参与这之间的交互的主要内容;顺序图显示交互对象以及发生的时间顺序;活动图描述重要的处理步骤。


二.类建模

1.类图

类名描述了拥有相同特性(属性),行为(操作),关系种别以及予以的一组对象。

1>.类图和对象图

我们可以通过两种结构模型——类图和对象图,来描述。

类图提供了对类及其关系进行建模的一种图形化的表示法。

类的UML表示方法:一个方框,约定黑体表示类,把名字放在方框正中,大写首字母,单数名词表示。如下图:

对象图显示了单独的对象及其关系。

对象的UML表示方法是:一个方框,方框里是对象名后跟着一个冒号和类名。对象名和类名都有下户线,我们约定使用黑体表示对象名和类名。如下图。

2>.值和属性

值是一段数据;属性是类的一个别名特性,他描述了类的每个对象都拥有的一个值。

属性的表示:UML表示法会在类图方框的第二格里列举属性。每个属性后都可以有(不是必要条件)可选项,如类型和默认值。在类型之前有个冒号。在默认值之前有个等号。约定用常规字体显示属性名,方框中的名称左对齐,首字母用小写。

在对象图的第二个里也可能会会包含属性值,其表示方法就是列出每个属性名,后跟等号和取值。
*注意:有些实现媒体要求对象有唯一一个标识符,不应该显式地把它们列举出来。

3>.操作和方法

操作是一个函数或者过程,可以用于类中的对象或别对象使用。

方法是类操作中的实现。

特性是描述属性或者操作的类属词汇。即包括了属性和操作。

操作的表示:在类图的第三个格里列举,约定用常规字体中列列出操作名称并左对齐,首字母小写。每个操作名后可以跟着一些选项,不如参数列表和结果类型。用参数列表把参数列表括起来,并用逗号分隔参数。返回结果类型前有一个冒号。括号中空的参数列表显示表示没有参数。

2.链接和关联

链接是对象之间物理上或者概念上的连接。

链接表示方法:对象间的一条直线(直线可以由几条线段组成)。

关联描述了有着共同的结构和语义的一组链接。关联连接相关类,并且是双向的。

关联表示方法:类间的一条直线(直线可以由几条线段组成)。约定用斜线显示链接和关联名,将线段限制在直线格中。
注:关联名称是可选的,如果有多重关联是就必须要用关联名或者关联终端名来消除歧义。

引用是在一个对象中引用另一个对象的属性。在编程中通常作为关联的实现方式。

多重性指定了一个类与关联类的单个实例可能相关的实例数目。如图所示:UML图明确的在关联先的两端列出了多重性,并且用区间表示:“1”表示刚好为1,,1..”表示1或更多,“3..5”表示3-5;“ ”表示速记符,表示“多”。

多重假设以及如何定义边界的问题,可能会随着需求改变。开发时,应该先确定雷和关联,再确定多重性。

关联终端名在问题描述中常以名词形式出现。对于一个类的两个对象之间的关联来说是必须的。

通过关联终端名可以统一对同一个类的多重引用。在创建类图是应该正确使用关联端名,不应该为每个引用引入一个独立的类。关联终端名可以区分对象,所以附在一个类上的关联远端的所有名称都必须是唯一的。

排序排序是关联固有部分,可以通过在适当的关联终端旁边标上“{ordered}”来表示一个有序的对象集合。

是允许重复值的元素,序列是允许重复值的有序元素集合。

关联类是一种关联,也是一个类,可以使用属性来描述关联的链接。

关联类的表示:通过虚线连接依附与关联的一个方框(类图)。

多对多的关联为关联类提供了一种强制性的基础,此类关联的属性明确属于链接,不能归于某个类。

限定关联中被称为限定符的属性会消除关联多端的对象的歧义,可以将关联的有效多重性降为一对一。

3.泛化和继承

泛化是指类(父类)与其一个或多个变体(子类)之间的关系。利用类的相似性和差异来组织类,同时描述对象的结构。父类拥有公共属性,操作和关联。子类增加了特定的属性,操作和关联。每个子类继承了父类的特征,并且可以有多层继承。泛化有时被成为”is-a”的关系。

泛化的表示:大的中空箭头表示。箭头指向父类,另一头和子类连起来。最好将父类放在顶部,底部绘制子类。

*花括号表示UML的注释,指出还有子列在图中没有标注出来。

4.类模型导航

导航可以训练模型,揭示隐藏的缺陷和疏忽。可以通过手动导航或者编写导航表达式。

OCL(对象约束语言):UML合并的一门语言。


三.状态模型

状态模型是描述响应外部激励而发生的操作序列。状态模型有多个状态图组成,每个类对应一个状态图。

1.事件

事件是指在某个时刻发生的事情。事件包括错误状态以及普通事件。

几种常见类型的事件:

1>.信号事件

信号是从一个对象到另一个对象的++明确++的++单向++信息流动。
信号事件指发送或接收信号的事件。每次信号传输都是唯一时间,会把它们组织成信号类,并赋予每个信号类一个名字,表示公共的结构和行为。

信号类的表示方法:在方框的顶部加<>,第二格中列举信号的属性、

2>.变更事件

变更事件是指满足布尔表达式而引起的事件。变更事件的意图是要不断测试表达式——无论何时只要表达式由假变真,事件就会发生。

变更事件的表示方式:采用关键词 when ,后跟着用括号括起的表达式。如图:

3>.时间事件

时间事件是指在绝对时间上或者某个时间间隔内发生的事情所引起的事件。

时间事件的表示方法:++绝对时间++使用关键词 when ,后跟着用括号括起的包含时间的表达式。++时间段++的表示法采用关键字after,后面跟括号括起的时间间隔的表达式。

2.状态

状态是对象取值和链接的抽象。根据对象的总体行为,将取值和连接的集合组成一个状态。

状态的表示方法:包括可选状态名的圆角方框,约定使用黑体在圆角方框内列出状态名,首字母大写,同时状态经常对应着带有后缀“ing”。

迁移指从一个状态到另一个状态的瞬时变化。从原状态到目标状态一发生变化,就说是触发了迁移。

警戒条件指为了要让迁移发生而必须为真的布尔表达式。注意:警戒条件仅触发一次,变化时间实际上要连续检查的。

迁移的表示方法:从初始状态到目标状态的一条直线。箭头指向目标状态。直线可以标记迁移,后面分着放在方括号里的可选的警戒条件。约定会把斜线段限制在直线网格内。我们会用斜体表示事件名,普通字体显示状态。

3.状态图

状态图说明了有事件序列引起的状态序列;结点是状态,有向弧是状态间的迁移。

状态图的表示方法:用矩形框围住,并在左上角的小五边形里列出图的名称。

状态模型包含了多个状态图,每个类一个状态图,状态图的建模重要的时序行为。状态图必须匹配他们的接口——事件和警戒条件。

单触发状态图表示有限生存期的对象,有初始状态和终止状态。表示方法:实心圆表示默认初始状态;靶心表示默认终止状态。作为替代方法(??),可以用进入和退出点表明初始和终止状态。

4.状态图行为

1>.活动效应

效应是为对响应是按而执行的行为的引用。活动是由效应触发的实际行为,效应数量不限。活动的执行条件包括:迁移,进去或退出某状态以及受到状态内的其他事件。

活动的表示方法:用 / 和活动名称(或描述),跟在引起活动的时间后面。关键词do来表示正在进行的活动,不能用作时间名称。

2>.do活动

do活动指持续了一段时间的一项活动,只在某状态内出现,不能附到迁移上。

表示:”do /”表示对象处于在某种状态下的全部或者部分持续时间内执行的do活动。do活动会被在执行过程中收到的某时间中断,此时间可能会,也可能不会引起迁移,离开包括do的活动状态。

3>.进入和退出活动

进入活动的标识方法:在状态框内显示关键词entry和字符 “/” 。
无论何时只要有到达迁移进入某状态,进入活动就会执行。进入活动等同于吧活动链接到每个到达的迁移上,如果到达迁移已经有一项活动,就会优先执行此活动。

退出活动的表示方法:在状态框内显示关键词exit和字符 “/”。
无论何时只要输出迁移引起状态退出,就会先执行退出活动。

4>.完成迁移

当活动完成时,会触发到另一状态的迁移。如果箭头上不带时间名,表示自动迁移,当于源状态相关的活动完成时就会触发,这样未标记的迁移成为完成迁移

注:不要在完成迁移上使用警戒条件来对待取值变化的事件进行建模。

5>.发送信号

对象可以给另一个对象发送信号。对象系统通过交换信号进行交互。如果一个对象从多个对象收到信号,并发的信号接收顺序也会影响最终的状态,称为竞争状态条件。


四.交互模型

1.用例模型

2.顺序模型

3.活动模型