从不同视角对系统建模
- 外部视角,上下文模型,对系统上下文或环境建模
 - 交互视角,交互模型(功能模型),对系统与参与者或系统内构件之间的交互建模
 - 结构视角,结构模型(静态模型),对系统的组成或系统处理的数据结构建模
 - 行为视图,行为模型(动态模型),对系统的动态行为以及系统如何响应事件进行建模
 
UML同一建模语言

UML动态图
- 协作图
 - 顺序图
 - 状态图
 - 活动图
 
UML静态图
- 用例图
 - 类图
 - 对象图
 - 构建图
 - 部署图
 
UML可以用于建立系统开发中的多种模型
| 功能模型 | 用例图 | 
|---|---|
| 对象模型 | 类图,对象图 | 
| 动态模型 | 交互图(顺序图),状态图,活动图,协作图 | 
| 其他 | 构件图,部署图 | 

交互模型(重点)
- 用例建模,系统与外部主体(人或其他系统)之间的交互,抽象层次高
 - 顺序图,系统构件之间的交互,也可以包括外部主体,抽象层次低
 
用例建模

 对于上图写出用例详述
 
用例图

参与者
- 与系统交互的外部实体(人,其他系统)
 - 定义系统边界
 
标识参与者
- 在标识参与者的初始阶段,很难将参与者与对象区别开 来,例如一个数据库可能是参与者,也可能是系统中对 象,可以通过确定系统边界的方式来确定参与者
 - 标识参与者的时候需要考虑 
- 本系统与哪些参与者交互(人,其他系统)
 - 哪些参与者完成系统主要功能
 - 哪些参与者完成系统次要功能(维护,管理)
 
 
标识用例
- 场景是用例的实例
 - 用例可以说明这一功能下的所有场景
 - 用例大多由参与者启动
 - 用例贯穿系统事件的完整流程
 
用例详述的写法
-  
用动词短语命名,清晰
- 用户登录,打印信息,搜索网页
 
 -  
用名词短语对参与者进行命名
- 用户,系统管理员,应用服务器
 
 -  
系统边界应该是清晰的
- XX客户端,需要对其功能范围非常清楚
 
 -  
事件流中使用主动语态,指明谁完成这一步骤
- 用户通过网银结算,将货款付到第三方支付机构
 
 -  
事件流前后因果关系清晰
- 用户打开播放器
 - 搜索本地视频文件
 
 -  
应该描述一个完整的用户事务流程
 -  
异常情况应该分别描述
 -  
无需描述系统接口
- 不需描述用户提交Web表单到服务器
 
 -  
简洁,明了
 
示例

标识参与者与用例之间的关系
- 启动,参与者启动了该用例
 - 参与,参与者参与了该用例
 
用例与用例之间的关系(牢记)
- 扩展,一个用例被定义为 基础用例的扩展
 - 包含,包含其他用例的行 为,减少用例之间的冗余
 - 继承,一个用例被泛化成 多个用例
 
顺序图
- 顺序图主要用于对参与者与系统对象之间、系统对象自身之间的交互进行建模。
 - 顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互
 - 顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或引起状态转换的触发事件
 
示例
注意长方形里,每写一个要加冒号
 
顺序图四要素(重点)

- 示例或类元角色
 - 消息流
 - 对象生命线
 - 注释
 
结构模型
结构模型描述系统构件以及它们之间的关系
类图
- 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模手段
 - 类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象
 
类之间的四种关系(重点)
- 关联、依赖、继承、实现
 - 而其中关联又有两种特例:聚合和组合
 
关联关系
聚合

组合

关联和依赖的区别
- 从类之间关系的强弱程度来分,关联表示类之间的很强的关系;依赖表示类之间的较弱的关系;
 - 从类之间关系的时间角度来分,关联表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。比如学生管理系统中的Student类和Class(班级)类,一个Student对象属于哪个Class是一个重要的业务关系,如果这种关系不保存,系统就无法管理。另外,**依赖表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的,**比如Student类和StuEditScreen(学生登录界面)类之间就是一种依赖关系,StuEditScreen类依赖Student类,依赖Student对象的信息来显示编辑学生信息。
 - 依赖是类与类之间的连接,依赖总是单向的。依赖关系代表一个类依赖于另一个类的定义。依赖在代码中一般表示为方法的参数。
 - 关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类关联,可以从一个类的对象导航到另一个类的对象。关联可以有方向,即导航。一般不作说明的时候
 - 导航是双向的,不需要在线上标出箭头。大部分情况下导航是单向的,可以加一个箭头表示。关联在代码中一般表示为属性(成员变量)。
 - 设计类之间的关系是遵循的原则:首先判断类之间是否是一种“关联”关系,若不是再判断是否是“依赖关系”,一般情况下若不是关联,就是依赖关系。
 
聚合与组合
- 聚合关系也称“has-a”关系,组合关系也称“contains-a”关系。
 - 聚合关系表示事物的整体/部分关系的较弱情况,部分的生命周期可以超越整体。
 - 组合关系表示事物的整体/部分关系的较强的情况,部分的生命周期不能超越整体,或者说不能脱离整体而存在。组合关系的“部分”,是不能在整体之间进行共享的。
 - 在聚合关系中,代表部分事物的可以属于多个聚合对象,可以为多个聚合对象共享,而且可以随时改变它。所从属的聚合对象.代表部分事物的对象与代表聚合事物对象的生存期无关,一旦删除了它的一个聚合对象不一定也就随即删除代表部分事物的对象。
 - 在组合关系中,代表整体事物的对象负责创建和删除代表部分事物的对象,代表部分事物只属于一个组合对象.一旦删除了组合对象,也就随即删除了相应的代表部分事物的对象。
 
关联关系的强度:关联<聚合<组合。
泛化关系
在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间
 
实现关系
对应于类和接口之间的关系
 