UML面向对象建模与设计

面向对象 OO

面向对象的术语指:把软件组织成一系列离散的、合并了数据结构与行为的对象。
包含4个方面:

  • 标识(identity): 数据被量化成对象
  • 分类(classification):有着同样数据结构和行为的对象被分组为一个类
  • 继承(inheritance):多个类基于一种分层关系,共享类间属性和方法
  • 多态(polymorphism):对于不同的类,相同的操作有着不同的动作

三种模型

对系统的完整描述需要三种视角的模型:

  • 类模型:描述系统内部对象及关系的静态结构。含 类图:节点是类,弧表示类间关系。
  • 状态模型:描述了对象随着时间发生的变化的方面。含 状态图:由事件引发的状态间的转移。
  • 交互模型:描述了系统中的对象如何协作,以完成更宽泛的任务。含 用例图,顺序图,活动图。

  • 用例图:描述系统与外部参与者之间的交互
  • 顺序图:显示交互的对象以及发生交互的时间顺序
  • 活动图:描述计算的处理步骤之间的控制流

对象

对象是指具有标识的一个概念、一种抽象或事物。通常有对应的实体(如人),也可以只是一种概念(如二叉树)。
对象是类的一个实例

类图的UML表示法

方框,黑体,首字母大写,单数名词 如 Person

对象的UML表示法

方框,黑体,下划线,首字母大写,对象名加冒号跟类名,如 JoeSmith:Person

类表示法

方框表示类,至多有三格:

  • 类名
  • 属性列表
  • 操作列表

attributeName: dataType = defaultVaule
operationName (argumentList): returnType

其中argument表示法:
direction argumentName: type =defaultValue
direction包含输入(in),输出(out),可修改的输入参数(inout)


链接和关联

**链接(link)**是对象之间物理上或概念上的连接。 Joe Works For Simplex,Works For就是一个链接。(对象与对象之间的叫链接)
关联(association)描述了有着共同的结构和语义的一组链接。(类与类之间的叫关联)

多重性

1:正好为1
1…*:1或更多
3…5:3到5
*:(0或多)

关联终端名

Person – employee WorksFor employer – Company

排序

{ ordered }

包(bag)

允许重复值的元素

序列(sequence)

允许重复值的有序元素集合

关联类

将依赖于两个类的属性提出来,既是关联,也是一个类
关联类与普通类,关联类只能出现一次。

限定关联

在源类加一个限定符,可将关联的有效多重性从一对多降为一对一。


泛化(is-a)

定义:泛化(generalization)是指类(父类)与起一个或多个变体之类(子类)的关系。

父类

公共属性、操作和关联

子类

继承父类的属性、操作、关联,增加特定的属性、操作、关联

泛化的目的

  1. 支持多态:可以调用父级的一项操作
  2. 结构化描述对象:根据对象的相似性和区别来组织对象。
  3. 支持代码复用:更有效率。

属性

属性的多重性

name: string[1]
address: string [1…*]

可见性

“+” public
“-” private
“#” protected
“~” package

聚合 aggregation

是一种强类型的关联
有传递性:(a是b的一部分,b是c的一部分,那么a是c的一部分)
反对称性:(a是b的一部分, b不是a的一部分)

一种“部分-整体”的关系 如(车与轮胎、引擎)
UML语言:箭头为空心菱形

组合 composition

相比聚合,有更多限制
部件与装配件的生命周期一致,如(公司与它的部门)
UML语言:箭头为实心菱形


抽象类 abstract class

指没有直接实例的类,但其子孙有直接的实例
UML语言:类名用斜体或{abstract}
抽象类的方法,子类必须有自己的实现。

意义:避免具体父类。父类设为抽象类。


一组相关的类


状态建模

状态模型由多个状态图组成

事件 event

某个时刻发生的事情,常与动词过去式对应。
最常见的事件:

  • 信号事件
  • 变更事件
  • 时间事件

信号事件

信号是指一个对象到另一个对象的单向信息流动。
信号事件是指发送或接收信号的事件。
信号类:每一次信号传输都是唯一事件。

变更事件 change event

满足布尔表达式而引起的事件。
UML语言:when关键字,括号里含表达式

when (room temperature < heating set point)

时间事件 time event

在绝对时间上或在某个时间间隔内发生的事情的事件。
UML语言:when关键字,括号里含有时间的表达式。

when (date=January 1, 2000)

时间段表示:after

after (10 seconds)

状态 state

是对象取值和链接的抽象。常对应ing后缀。
UML表示:可选状态名的圆角方框,首字母大写。

  • 状态确定对象对输入事件的响应

迁移和状态

迁移transition是指从一个状态到另一个状态的瞬时变化。
警戒条件:为了让迁移发生而为真的布尔表达式

state1 -- timeout[cars in E/W left lanes] --> state2

timeout为事件名,斜体。方括号为警戒条件。从一状态到另一状态的直线,为迁移。

状态图

节点是状态,有向弧为迁移。

状态模型

包含了多个状态图,每个类一个状态图。

活动与效应

效应effect指对响应事件而执行的行为的引用。
活动activity 由效应出发的实际行为,用“/”表示。

mouse down / display pop-up menu
  • do活动,表示持续一段时间的动作
do / flash waring light

交互建模

用例模型

参与者 actor

系统的直接外部用户 如(用户user,管理员admin)

用例 use case

系统通过与参与者的交互可以提供的一段连贯的功能。
每个用例会涉及一个或多个参与者以及系统本身。

错误条件也是用例的一部分。
用例分割系统的功能。

用例:
  购买一瓶饮料。
小结:
  在客户选择并支付以后,自动售货机弹出饮料。
参与者:
  客户
前置条件:
  机器正在等待投入货币。
描述:
  机器启动,处在等待状态。显示消息“投入硬币”。客户把硬币投入机器中。机器显示投入的总金额。并亮起用这些钱可以购买的物品所对应的的按钮。克换下其中一个按钮。机器弹出对应的物品,如果物品价格低于投入的金额,会找回零钱。
异常:
  取消:如果客户在做出选择之前按下了取消按钮,客户的钱会退回,机器会复位到等待状态。
  脱销:如果客户按下了一个脱销的产品,会显示消息“此物品已脱销”。机器继续接受硬币或等待选择。
后置条件: 机器等待投入硬币

用例图

包括一组用例和一组参与者。


顺序模型

详细描述用例的主题

场景

系统在某个特定的执行期内所发生的一系列事件。
场景为一列文本语句,包含对象之间的消息以及对象所执行的活动。

John 登录。
系统建立安全的通信。
系统显示投资组合信息。
...

顺序图 Sequence Diagram

显示了交互的参与者以及参与者之间的消息顺序。

  • 至少为每个用例编写一种场景
  • 把场景抽象成顺序图
  • 为每种错误条件绘制一张顺序图

活动模型 activity diagram

组成了复杂过程的步骤序列。显示控制流,专注于操作而不是对象。

你可能感兴趣的:(前端进修之路)