面向对象的分析与设计
面向对象的分析与设计
1.面向对象
- 是一种思维方式
- UML 统一建模语言,是一种建模工具,表达设计思想的工具
2.软件功能是如何完成的
-
类
- 定义了对象群体的逻辑结构,包括属性和操作
- 系统运行时,类作为产生对象的模板,在物理层面是不存在的
-
对象
- 系统运行时必须为每一个需要的对象分配内存、保存数据
- 对象存在于物理层面,每个对象都有自己的数据空间(内存)
- 所有的对象共享同一块代码空间
-
消息
- 对象之间的一种交流手段
- 就像我们日常工作中的各种交流手段
- 对象之间的一种交流手段
3.模型的定义
-
建模 modeling
- 重要的研发成果常常产自类比(analogy)
- 把不太理解的东西和一些已经较为理解、且十分类似的东西做比较,可以对这些不太理解的东西产生更深刻的理解,叫做建模
-
模型
- 建模产生的结果就是模型模型是对现实的简化、对事物的一种抽象
- 模型可以帮助人们更好地了解事物的本质,抓住问题的要害
- 在模型中,人们总是剔除那些与问题无关的、非本质的东西,从而使模型与真实的实体相比更加简单、易于把握
3.1 建模的四个目的
- 帮助我们按照需要对系统进行可视化
-
允许我们详细说明系统的结构和行为
-
给出了一个指导我们构造系统的模板
-
对我们所做出的决策进行文档化
3.2 UML概念模型
1.事物
-
结构事物
- 类 Class
- 接口Interface
- 协作Collaboration
- 用例Use case
- 主动类Active class
- 节点node
- 构件Component
- 制品Artifact
-
行为事物
- 交互 Interaction
- 状态机 State machine
- 活动 Activity
-
分组事物
- 包 Package
-
注释事物
- 注释 Anotational thing
2.关系
- 依赖
- 关联
- 泛华
- 实现
3.图
-
类图Class D.
-
对象图 Object D.
-
顺序图 Sequence D
-
通信图Communication D
-
构件图 Component D.
-
时序图 timing D.
-
交互概览图interaction overview D.
-
用例图 use case D.
-
状态图 state D.
-
活动图activity D.
-
部署图 deployment D.
-
制品图 artifact D.
-
包图package
-
UML 的语法和语义规则
- 命名 :为事物、关系和图起的名字
- 范围 :使名字具有特定含义的语境
- 可见性 :这些名字如何让其他成分看见和使用
- 完整性 :事物如何正确 、一致地相互联系
- 执行 :运行或模拟动态模型的含义是什么
-
图符:每个建模元素都有自己特定的图形符号
-
UML中的公共机制
- 标准建模元素之上或者之外的细化、扩展
4.用例图
4.1参与者(执行者)
-
代表位于系统之外并和系统进行交互的一类事物(人、物、其他软件子系统等)
-
通过它,可以对软件系统与外界发生的交互进行分析和描述
-
通过它,可以了解客户希望软件系统提供哪些功能
-
Actor的图形表示
-
参与者是人,用“小人图”
-
参与者是某个系统时用方框图,构造型 《actor》
-
4.2用例
- 系统为响应参与者引发的一个事件而执行的一系列的处理/动作,而这些处理应该为参与者产生一种有价值的结果
- 这些动作
- 不但应包含正常情况的各种动作序列
- 而且应包含对非正常情况时软件系统的动作序列的描述,Exception / Alternate
4.3 用例图
- 边界
- 参与者
- 用例
- 关系
4.4 用例图中的关系
- 参考文献:
https://blog.csdn.net/weixin_42369687/article/details/90106419
1.参与者与用例之间
- 关联关系: 用实线表示
2.参与者/参与者之间的关系
- 泛化关系:实线+空心箭头
3.用例之间的关系
-
泛化关系 例如、发出订单 - 网上发出订单
- 含关系《include》
- 扩展关系《extend》
4.5 用例描述
4.6 用例模型
-
用例模型包括
- 系统边界
- 参与者
- 用例
- 用例图
- 用例描述
-
用例模型是系统分析的结果、是系统设计的输入
4.7 案例
-
用例模型
- 是软件开发人员分析客户业务流程的结果
- 是面向对象分析的结果
- 不一定完全是面向对象分析的结果
- 是面向对象设计的输入
- 是开发部门与顾客之间的合同
- 是软件设计部门与软件工程师之间的合同
- 是开发部门领导、非直接开发人员,了解系统的主要信息来源
-
一旦用例模型有错误,代价是很大的!
5.活动图
5.1 介绍
-
活动图描述了在一个过程中,顺序的/并行的活动及其之间的关系
- 应用于商业过程、工作流(业务过程)、复杂算法的建模
-
活动图是顶点和弧的集合
-
活动节点
-
动作
-
对象值
-
注解和约束等
-
5.2 活动图基本建模元素
-
活动图的开始、结束、对象
-
活动节点
-
一个活动是一个过程中进行的非原子的执行单元
-
活动的执行最终延伸为一些独立动作(Action)的执行
-
-
分支
- 一个分支可以有一个进入流和多个离去流
- 在每个离去流上必须设置一个监护条件
- 条件放在方括号里
- 条件不能重叠,以免二义性
- 可以有 [else] 分支
- 两个控制路径可以重新合并,无需监护条件
-
分岔和汇合
- 分岔表示把一个单独的控制流分成两个或多个并发的控制流
- 汇合表示两个或多个并发控制流的同步发生,一个汇合可以有两个或多个进入转移和一个输出转移
- 在中,用同步棒来说明并行控制流的分岔和汇合
- 同步棒是一条水平或垂直的粗线条
-
泳道
- 将一个活动图中的活动分组,每一组表示一个特定的类别、人或部门,他们负责完成组内的活动
- 每个组被称为一个泳道
- 用一条垂直的实线把它们分开
- 每个活动严格地属于一个泳道(即泳道不可以画在活动上)
- 转移可以跨越泳道
- 同步棒可以跨越泳道
5.3活动图总结
-
描述一项任务执行过程中所完成的工作(动作)
-
描述对象内部的工作
-
显示如何执行一组相关的动作,以及这些动作如何影响它们周围的对象
-
显示用例的实例如何执行动作以及如何改变对象状态
-
说明一次业务流程中的人(参与者)和对象是如何工作的
活动图与用例模型互为补充,主要用于需求分析阶段
- 活动图中的基本要素包括
- 活动(动作)、转移、分支、分叉和汇合、泳道、对象流等
6.类图
-
注意:类图可以有
Pycharm
或者idea
进行生成,也可以选择手画。 -
一种静态视图
6.1 定义
1.类class的定义
-
具有相同属性、操作、方法、关系或者行为的一组对象的描述符
-
类是真实世界事物的抽象
-
问题领域的类:在对系统建模时,将会涉及到如何识别业务系统中的事物,这些事物构成了整个业务系统。在
UML
中,把所有的这些事物都建模为类 (class)
2.对象object的定义
-
当这些事物存在于真实世界中时,它们是类的实例,并被称为对象
-
同一个类的各对象具有
- 相同的属性,但属性的取值可以不同
- 提供相同的操作、有相同的语义
把类相关的元素画在一起,即为类图
6.2 类之间的关系
类之间的关系
-
依赖关系
-
关联关系(association)
- 关联的修饰
- 名称
- 角色
- 多重性
- 聚合/组合
- 关联类
- 连接(link)
- 关联的修饰
-
继承| 泛化关系
- 一般与具体
-
实现关系
- 类与接口
实例化
6.3 类的表示
类的图形表示
- 用四部分来表示,它是分为三个分隔区(compartment)的长方形
- **名称 ** naming
- 属性 attribute
- 操作 operation
- **责职 **responsibility
- 在显示时,只有名称部分是必须的,其余部分可以隐藏 (模型里面还是存在的!)
6.4 类图中的名命
-
类名中的每个词的第一个字母通常要大写
- 例如,Student、Teacher、Book、Store etc.
-
操作的命名
- 操作名 除第一个词之外的每个词的第一个字母要大写
- 例如,selectCourse();
-
属性的命名
- 属性名 除第一个单词之外的每个单词的第一个字母要大写。例如,myAddress、employeeID、stdNumber
6.5 关联符修饰
1.关联修饰符表
修饰符 | 含义 |
---|---|
0..1 | Zero or 1 |
1 | Exactly 1 |
1..* | 1 or more |
0..* | Zero or more |
1..6 | 1 to 6 |
1..3, 7..10 | 1 to 3 or 7 to 10 |
***** | Zero or more |
-
示例
2.聚合/组合:表示部分与整体的关联关系
-
聚合:
整体
有管‘部分
的特有的职责;它用端点带有空菱形的线段表示,空菱形与整体
类相连接 -
组合:
整体
拥有部分
的生命;它用端点带有实菱形的线段表示,实菱形与整体
类相连接每个表示部分的类与表示整体的类之间有单独的关联,但是为了方便起见,连线结合在一起
6.6 关联类
关联类是一个关联,也是一个类,并且由类、关联和虚线组成。
- 关联类具有属性、操作和关系
- 当只有一个唯一链接时,可以使用关联类在任何时间点的任何对象对之间
- 如果一对对象在中的给定点上可能有许多相互链接时间,然后你用一个普通的类替换它来具体化关系
6.7 总结
-
类
- 是面向对象分析设计的核心概念,也是难点
- 如何用
UML
工具来表示类及其相关概念,很重要
-
但是,更重要的是
- 如何用面向对象的思维方式去思考,去发现类、定义类、定义类之间的关系、定义每个类应该承担的职责
6.8 补充Pycharm生成类图
7.顺序图
- 顺序图是交互图的一种。
是一种动态视图
-
交互
- 对象之间为实现某一功能而必须实施的协作过程、动态行为,称为交互
-
消息
- 对象间的协作与交流表现为一个对象以某种方式启动另一个对象的活动,这种交流在UML里被定义为消息
-
顺序图的建模元素
- 对象或角色(role)
- 参与者
- 消息
-
交互图
- 交互的过程表现出来,就是交互图
- 顺序图、通信图,都是交互图
-
顺序图,基于类图与类图相互校验,
-
顺序图中的结构化控制,又称:Frame, Fragment
-
类型
- 可选执行(标签: opt)
- 条件执行(标签:alt)
- 并行执行(标签:par)
- 循环(迭代)执行(标签:loop)
-
强调一下:关于操作(Operations)
- 一个类的行为/服务,是通过操作来表示的
- 在交互图里面可以看到对象在执行这些操作
- 先在类中定义操作,然后在顺序图中为对象选择操作!
-
代码和顺序图的映射
-
顺序图小节
- 顺序图可以动态验证类模型的可行性
- 顺序验证的某一功能,属于某个用例描述的功能中的一部分
- 又被称为用例实现 “usecase realization”
- 顺序图从上到下,反映了个对象相互协作的时间顺序!
8.通信图
-
.与顺序图本质上是一样的,可以互换
-
建模的角度不同
- 顺序图 强调随着时间的推移,各对象是如何交互的
- 通信图 强调对象之间的结构关系
-
对象间的协作与交流表现为
- 一个对象以某种方式启动另一个对象的活动,这种交流被定义为消息
-
通信图是交互图的另一种表现形式
- 它在语义上和顺序图是等价的
-
通信图强调的是参加一个交互的各对象的组织结构
-
通信图的构成
- 对象
- 链接
- 在此链接上传递的消息
-
顺序图和通信图的区别
- 顺序图和通信图
- 都来自UML的元模型中相同的信息,二者在语义上是等价的,可以相互转化
- 通信图显示对象之间是如何被连接的结构关系
- 对象之间的交流,通过在链接上附着带顺序号的消息
- 顺序图没有
- 顺序图显示消息的返回、有对象生命线、控制焦点
- 通信图没有
- 顺序图和通信图
9.状态图
9.1 问题引出
-
顺序图是对对象的动态行为进行建模,有多个对象的参与、协作
-
问题:
- 当需要考察单个实体的动态行为时, 用
UML
如何来建模呢? - 什么是单个实体:一个软件系统?一个子系统?一个模块、一个构件?
- 当需要考察单个实体的动态行为时, 用
-
选择单个对象
- 软件系统中核心的、需要进行详细分析的单个实体
- 从不同的视点
(ViewPoint)
可有不同的选择- 类的对象、构件、整个系统
- 原则:从选定的角度,把要考察的实体看作一个整体
-
UM
L提供了建模机制- 状态图, 单个对象的动态行为
9.2 状态图的概念
-
状态(state):
- 是对象的生命期中的一个条件或状况
- 在此期间,对象可以响应事件、执行某活动等
- 例如,灯,有几个状态? 例如类,color,
-
状态机(state machine) :
- 是一种行为,
- 说明对象在它的生命期中, 响应事件所经历的状态序列 以及它们对每个事件的响应
-
状态图(state diagram, State Chart ):
- 状态机可以用状态图来可视化。
- 状态图显示了一个状态机,它强调从状态到状态的控制流
9.3 状态图组成
- 状态有以下几个部分组成:
- 1)名称(name)
- 每个单词首字母大写
- 1)名称(name)
- 2)进入/退出动作(entry/exit action)
- 3)内部迁移(internal transition)
- Transitions that are handled without causing a change in state
- 4)子状态 (substate)
- 5)延迟事件 (deferred event)
9.4 状态图的概念
9.4 状态图的建模元素
-
状态
- 一般状态:圆角矩形
- 初始状态:实心圆
- 结束状态:“牛眼” (bull’s eye)
-
事件
- 触发事件名[触发条件]/迁移动作
- 这三个部分都是可以省略的,但至少有一部分
- 事件依附于表示迁移的箭线
- 触发事件名[触发条件]/迁移动作
-
迁移
- 叉形箭头实线
- 从初始状态指向目标状态
- 叉形箭头实线
9.5 状态图建模
-
建模步骤
-
1、选择对象及视点
- 简单类的实例
- 构件
- 整个系统 或子系统
- 用例
-
2、定义 对象在生命期内可能存在的状态
- 状态要有意义
- 状态持续一定的时间
-
3、在每种状态下可以接受的事件及将要转去的新的状态
- 状态图建模注意事项:
- 不允许孤立的状态存在
- 不允许只进不出的状态迁移 (“黑洞”)
- 不允许只出不进的状态迁移 (“奇迹”)
- 不允许没有事件发生的迁移
- 或者“迁移” 没有指明具体的事件
- 状态图建模注意事项:
10、组件图
-
参考文献:
https://blog.csdn.net/afjaklsdflka/article/details/54428601
-
用来建模系统的各个组件,包括源代码文件,二进制文件,脚本文件,可执行文件之间的关系,他们是通过功能或者文件组织在一起的,使用组件图可以帮助读者了解某个功能位于软件包的那一位置,以及各个版本的软件包含哪些功能。
10.1 构成
-
组件
描述了一个可执行程序,一个库,一个web程序等
-
接口
接口是组件所提供的的服务,可以理解为一个方法,接口可以有多个,但至少有一个,在
UML
中表示为一个圆形。 -
实现
实现就是组件与接口元之间的连线,代表了谁实现了这个接口
-
依赖
就是指组件使用了另一个组件的接口,依赖于另一个接口的存在
11.部署图
- 部署图用来显示系统中软件和硬件的物理架构,从部署图中,你可以了解到软件和硬件之间的物理关系,以及处理节点的组件分布情况,使用部署图可以显示运行系统的结构同时还可传达构成应用程序的硬件和软件元素的配置和部署方案。
元素:
-
节点
- 代表一个运行时计算机系统中的硬件资源
- 节点通常拥有一些内存,并具有处理能力。
-
节点的分类:
1、处理器:处理器是能都执行软件,具有计算能力的节点
2、设备:是没有计算能力的节点
连接:
- 部署图用连接表示各节点之间通讯路径,连接用一条实线表示,对于企业的计算机系统硬件设备间的关系,我们通常关心的是节点之间是如何连接的,因此描述节点之间的关系一般不使用名称,而是使用构造性描述。
12.UML图形的分类
-
UML从整体上分类
- UML九种图,具体的可以分为五类。
-
UML
从静态和动态的角度分类- 从静态和动态的角度,主要可以分为静态模型和动态模型
-
继续努力,终成大器!
整理不易,转载摘抄请指明出处。