基本概念
- 对象:对象是基本的运行实体,包括数据和方法
- 封装:对象体现了封装的概念,将其数据与方法封装在其内
- 消息:对象之间进行通信的载体
- 类:可看做对象的模版,包括实体类,接口类,控制类
- 抽象:是对类的以更高层次的提炼
- 继承:继承是父类和子类之间共享数据和方法的机制
- 多态:对于同样的方法,不同类/对象有着完全不同的动作
- 动态绑定:绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。绑定发生在编译,叫作静态绑定。动态绑定则是在运行时进行的
面向对象分析
- 5个层次:主题层,对象类层,结构层,属性层,服务层
- 5个活动:标识对象类,标识结构,定义主题,定义属性,定义服务
- 基本步骤:确定对象和类,确定结构,确定主题,确定属性,确定方法
- 基本原则:抽象,封装,继承,分类,聚合,关联,消息通信,粒度控制,行为分析
在需求分析阶段可使用面向对象分析方法,使用用例图建立功能模型,使用类图和对象图建立对象模型,使用序列图建立动态模型。
面向对象的分析:确定问题域,理解问题。包括如下活动:
- 认定对象
- 组织对象
- 描述对象间的相互作用
- 确定对象的操作
- 定义对象的内部信息
- 确定附加的系统约束
面向对象需求建模:用例模型(用例图),分析模型如下:
- 顶层架构图
- 用例与用例图
- 领域概念模型
面向对象设计
数据结构和在数据结构上定义的操作算法封装在一个对象中,类封装了信息和行为,是具有相同属性、方法、关系的对象集合的总称。面向对象的设计要识别出现实生活中的对象与设计类进行映射,设计类可分成实体类,控制类,边界类。
- 实体类可直接与数据表对应,如用户类。
- 控制类用于控制用例工作的类,如校验类等。
- 边界类位于系统与外界的交互处,用于封装流动的信息和数据,如窗体、打印机、二维码等。
面向对象的设计原则有:单一职责原则,开发-封闭原则,李式替换原则,依赖倒置原则,接口隔离原则,组合重用原则,迪米特原则。
- 单一职责原则是指设计类的功能应单一。
- 开放-关闭原则是指对设计类应该对其扩展开放,修改关闭。
- 李式替换原则是指子类可以替换父类。
- 依赖倒置原则是指应该针对接口编程,而不要针对实现编程,要依赖抽象,不依赖具体。
- 接口隔离原则是指使用多个专门的接口要比使用单一的接口要好。
- 组合重用原则是指要尽量使用组合,而不使用继承关系来达到目的。
- 迪米特原则是指一个对象应当对其他对象尽可能少的了解。
设计步骤:
- 应用面向对象分析,对用其他方法得到的系统分析的结果进行改进和完善
- 设计交互过程和用户接口
- 设计任务管理(包括确定开发性、以何种方式驱动任务、优先级等)
- 设计全局资源、确定边界条件等
- 对象设计
面向对象设计:设计模型如下:
- 包图表示的软件体系结构图
- 交互图表示的用例实现图
- 完整精确的类图
- 针对复杂对象的状态图
- 用以描述流程化处理过程的活动图
面向对象编程
以对象中中心,该方法认为程序是由一些列对象组成。基本特点是:封装,继承,多态。
面向对象测试
- 算法层:类中方法
- 类层:类中方法与属性的作用
- 模板层:一组类间的相互作用
- 系统层:各个子系统组装后的测试
UML
概念
- 结构事物:模型的静态部分。类,接口,用例、构件
- 行为事物:模型的动态部分。交互,活动,状态机
- 分组事物:模型的组织部分。包
- 注释事物:模型的解释部分。
类图
静态图,展现了一组对象、接口、协作和它们之间的关系
元素有:类(属性,操作),接口,关系,数量
关系有:聚合,组合,关联,依赖,泛华,实现
访问控制:
- + 表示public
- - 表示private
- 空表示protected
类间关系:
- 泛化/继承 Generalization
- 实现 Implementation
类实现了接口
- 组合 Composition
是整体与部分的关系,但部分不能离开整体而单独存在
组合关系是关联关系的一种,是比聚合关系还要强的关系
- 聚合 Aggregation
是整体与部分的关系,且部分可以离开整体而单独存在
- 关联 Association
是一种拥有的关系,它使一个类知道另一个类的属性和方法
单向关联
双向关联
- 依赖 Dependency
是一种使用的关系,即一个类的实现需要另一个类的协助
B类是A类中成员方法的临时变量,称A依赖B
局部变量、方法的参数或者对静态方法的调用
各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
实例:
小汽车、自行车实现车接口(或者抽象类)
SUV继承小汽车类,SUV类泛化小汽车类
轮胎、发动机组合小汽车类,此处举例有问题,轮胎、发送机可以离开汽车独自存在
学生聚合班级类。此处举例有问题,离开了班级的学生还是学生吗?
学生双向关联身份证
对象图
静态图,展现了某一时刻一组对象以及它们之间的关系,类图某一时刻快照
元素:对象(对象名:类名),链(类之间的关联关系的实例)
用例图
静态图,是用户与系统交互的最简表示形式,展现了用户和与他相关用例之间的关系
元素有:参与者,用例,关系,系统边界
参与者:参与者是指系统以外的,需要使用系统或与系统交互的事物,包括:人或组织、设备、外部系统等
用例:
- 基础用例(Real Use Cases):是实实在在在与用户需求有对应关系的用例,是从用户需求获取的渠道得到的
- 抽象用例(Essential Use Cases):是从基础用例中抽取的公共部分,是为了避免重复工作,优化结构而提出的用例
关系有:关联,包含,泛华,扩展
- 包含:执行某一操作时必须先执行另一操作,有点像“依赖”,1指向(include)2
- 扩展:执行某一操作时另一操作可能会做,2指向(extend)1
- 泛化:父子关系
序列图/时序图/顺序图
动态图,对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互,描述了以时间顺序组织的对象之间的交互活动,强调的是信息时间顺序的交互图
生命线
- 带有Actor的表示特定用例
- 带有Entity的表示系统数据
- 带有Boundary的表示系统边界
- 带有Control的表示控制实体
激活线
- 生命线上的一个矩形,表示处于活跃状态
消息箭头
- 同步消息(需要等待回应) 实线实心箭头
- 异步消息 实线空心箭头
- 返回消息 虚线实心箭头
- 销毁消息 箭头前有×
- 反身消息 指向自己
组合框
- alt 条件
- opt 选项
- loop 循环
- par 并行
- critical 关键
- strict 强顺序
- seq 弱顺序
- break 中断
通信图/协作图
动态图,描述对象之间的协助关系,强调收发信息的对象的结构组织,强调参加交互的对象的组织
通信图与序列图的区别
- 序列图强调消息的时间顺序,协作图强调参与交互的对象之间的组织关系
- 通信图有顺序号
- 序列图有生命线
交互概览图
动态图,交互概览图是 UML2.0 新增的交互图之一,它是活动图的变体
业务过程中的控制流概览,软件过程中的详细逻辑概览,以及多个图进行拼接,抽象掉了信息和生命线
用活动图来表示多个交互之间的控制关系的图
计时图
另一种新增的、特别适合实时嵌入式系统建模的交互图称为计时图
关注沿着线性时间轴、生命线内部和生命线之间的条件改变
他描述对象状态随着时间改变的情况,很像示波器
状态图
动态图,状态图主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件,以及因状态转移而伴随的动作。
元素:状态、事件、监护条件,转换、动作
初始状态:实心圆
结束状态:圆圈内嵌实心圆,可以有多个
选择状态:菱形,分支上标注 监护条件
一般状态:圆角矩形,事件/动作表达式
- entry/入口行为:进入该状态后的动作
- do/执行的行为:内部转换动作
- event/事件行为:内部转换事件
- exit/退出行为:退出该状态后的动作
一般转换:Trigger[Guard]/Effect 触发事件[监护条件]/结果
自身转换:事件或动作
复合状态:嵌套矩形
活动图
动态图,活动图可以用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形式,活动图中一个活动结束后将立即进入下一个活动
元素:开始,结束,状态,条件,转移,,动作,合并分叉,监护表达式,泳道
活动图与状态图的区别
- 状态图侧重于描述行为的结果,活动图侧重描述行为的动作
- 活动图可描述并发行为,而状态图不能
泳道活动图
泳道活动图,是将一个活动图中放入活动状态进行分组,每一组表示一个特定的类或者对象,它们负责完成组内的活动。每个活动都明确属于一个泳道,不可以跨越泳道,而转移则可以跨越泳道。
构件图/组件图
静态图,展现了一组构件之间的组织和依赖,专注于系统静态实现视图
一种特殊的UML图来描述系统的静态实现视图
组合结构图
用于描述一个分类器(如类、构件等)的内部结构,分类器与系统中其他组成部分之间的交互端口,展示一组相互协作的实例如何完成特定的任务,描述设计、架构模式或策略
表示类或者构建内部结构的图
部署图
静态图,是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置
一般对系统的静态部署视图进行建模,与构件图相关
定义系统中软硬件的物理体系结构
包图
用于把模型本身组织成层次结构的通用机制,不能执行,展现由模型本身分解而成的组织单元以及之间的依赖关系
对构成系统的模型元素进行分组整理的图
视图 4+1视图
- 逻辑视图:设计视图,描述了建模系统的组成部分及之间的交互方式,包括类图、对象图、状态图和协作图,架构图
- 进程视图:过程视图,以可执行线程和进度作为活动类的建模,是逻辑视图的一次执行实例,描述并发与同步特征,时序图。
- 实现视图:开发视图,对组成系统的物理代码的文件和构件进行建模,也就是开发环境中软件的静态组织结构,该视图通常包含包图、组件图
- 部署视图:物理视图,是从系统工程师解读系统,关注软件的部署图,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。
- 用例视图:最初称为场景视图,关注最终用户需求,为整个技术架构的上线文环境.通常用用例图和活动图描述。
物理视图和处理视图的关系:处理视图特别关注目标程序的动态执行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构视图。
展示功能组织的静态视角,判断质量特性
展示并发行为的动态视角,判断行为特性
选择特定的视角或视图也就是逻辑视图、进程视图、实现视图、配置视图
使用逻辑视图来记录设计元素的功能和概念接口,设计元素的功能定义了他本身在系统中的角色,这些角色包括功能、性能。
设计模式
(未完待续)