软件工程2(面向对象软件工程)复习
00 About This Course
面向对象的需求分析
- 面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型。它包含面向对象风格的图形语言机制以及用于指导需求分析的面向对象方法学。
- UML(统一建模语言,Unified Modeling Language)是面向对象技术发展的一个重要里程碑。
- UML统一了面向对象建模的基本概念、术语和表示方法,不仅为面向对象的软件开发过程提供了能力丰富的表达手段,而且也为软件开发人员提供了互相交流、分享经验的共同语言。
面向对象的概念与思想
- 客观事件中的应用问题都是由实体及其相互关系构成的。
- 可以将客观世界中与应用问题有关的实体及其属性抽象为问题空间中的对象。
- 为应用问题寻求软件解,是借助于计算机语言对其提供的实体施加某些动作,以动作的结果给出问题的解。
- 面向对象(Object-Oriented,简称OO)的需求分析方法通过提供对象、对象间消息传递等语言机制让分析人员在解空间中直接模拟问题空间中的对象及其行为。
OO方法学核心概念
- 面向对象 = 对象 + 类 + 继承 + 聚集 + 消息
(1)对象
- 对象是现实世界中个体或事物的抽象表示,是其属性和相关操作的封装。
- 属性表示对象的性质,属性值规定了对象所有可能的状态。
- 对象的操作是指该对象可以展现的外部服务。
例如,大型客机可视为对象,它具有位置、速 度、颜色、容量等属性,对于该对象可施行 起飞、降落、加速、维修等操作,这些操作将 或多或少地改变飞机的属性值(状态)。
(2)类
- 类表示某些对象在属性和操作方面的共同特征。
例如,直升飞机、大型客机、轰炸机可归为飞 行器类。共同属性有:位置、速度和颜色等。 共同操作有:起飞、降落、加速和维修等。
(3)继承
- 类之间的继承关系是现实世界中遗传关系的模拟,它表示类之间的内在联系以及对属性和操作的共享,即,子类可以沿用父类(被继承类)的某些特性。子类也可以具有自己独有的属性和操作。
例如,飞行器、汽车和轮 船可归于交通工具类,飞行器类可以继承交 通工具类的某些属性和操作。直升飞机、大 型客机、轰炸机可归为飞行器类。
(4)聚集
- 显示世界普遍存在部分-整体关系。
- 部分-整体关系在OO方法学中表示为类之间的聚集关系。在聚集关系下,部分类的对象是整体类对象的一个组成部分。
例如,飞机可由发动机、机身、机械控制系 统、电子控制系统等构成。
(5)消息
- 消息传递是对象与其外部世界相互关联的唯一途径。
- 对象可以向其它对象发送消息以请求服务,也可以响应其它对象传来的消息,完成自身固有的某些操作,从而服务于其它对象。
- 因为对象的操作主要用来响应外来消息并为其它对象提供服务,所以它们也被称作“外部服务”。
例如,直升飞机可以响应轮船的海难急救信号,起飞,加速,飞赴出事地点并实施救援作业。
01 Concepts of OO
UML
什么是UML
- Unified Modeling Language
- 面向对象软件工程使用的统一建模语言
- 一种图形化了的语言,主要用图形方式表示
- 一种开放的标准
UML的特点
- 统一标准
- 面向对象
- 可视化
- 表达能力强
UML的应用
- UML在软件开发中的应用
- 可视化(visualize)
- 说明(specify)
- 建造(construct)
- 建档(document)
- UML是一个通用的标准建模语言
- 静态结构建模
- 动态行为建模
- 体系结构建模
- UML是一种建模语言
- 不是一种方法,它独立于过程
- 可遵循任何类型的建模过程
建模
Why Model?
- Modeling achieves four aims:
- Helps you to visualize a system as you want it to be.
- Permits you to specify the structure or behavior of a system.
- Gives you a template that guides you in constructing a system.
- Documents the decisions you have made.
- You build models of complex systems because you cannot comprehend such a system in its entirety.
- You build models to better understand the system you are developing.
Four Principles of Modeling(建模的四个基本原则)
- The model you create influences how the problem is attacked. 您创建的的模型决定了如何处理问题。
- Every model may be expressed at different levels of precision. 每一个模型都可以用不同的精度来表示。
- The best models are connected to reality. 最好的模型是与现实想联系的。
- No single model is sufficient。单一的模型是不足够的。
OO的基本原则
- Abstraction 抽象
- Encapsulation 封装
- Modularity 模块化
- 例:把复杂的系统拆分成多个小的模块。
- Hierarchy 层次结构
- 层次结构相同级别的元素应该具有相同的抽象级别。
UML的图
| 分类 | 名称 | 描述内容 |
|---|---|---|
| 捕获需求内容(用于需求分析) | 用例图 | 描述系统提供的功能以及和外部元素的关联 |
| 捕获逻辑结构(用于分析,设计) | 类图 | 描述类的定义以及类间的关系 |
| 捕获逻辑结构(用于分析,设计) | 对象图 | 描述某一时刻的对象状态 |
| 捕获行为(用于分析,设计) | 交互图-时序图 | 按时间顺序描述对象间的交互动作 |
| 捕获行为(用于分析,设计) | 交互图-协作图 | 以连接关系描述对象间的交互动作 |
| 捕获行为(用于分析,设计) | 状态图 | 描述一个对象的状态转换 |
| 捕获行为(用于分析,设计) | 活动图 | 描述工作流和事件流以及算法 |
| 捕获现实执行环境(用于设计) | 构件图 | 描述源代码和模块的结构以及文 件间的依赖关系 |
| 捕获现实执行环境(用于设计) | 部署图 | 描述系统运行的执行环境和执行 模块的分配 |
UML可视化建模
用例图
- 从系统的外部用户的观点看系统应具有的功能
- 用例图主要用于对系统,子系统或类的行为进行建模
- 它只说明系统实现什么功能,而不必说明如何实现
用例图的模型元素
用例图实例
类图
对象
- 对象是具有定义良好的边界和封装状态和行为的标识的实体
- 状态是由属性和关系表示
- 行为是由操作,方法和状态机表示
类
- 类是一组共享相同属性、操作、关系和语义的对象的描述
- 一个对象是一个类的一个实体
- 类是一个抽象,它
- 强调相关特征
- 一直其他特征
类和对象的关系
- 类是对象的抽象定义
- 它定义类中每个对象的结构和行为
- 它作为一个模板来创建对象
- 类不是对象的集合
类图
- 描述各个类本身的组成
- 描述系统中类之间的各种静态联系
- 静态结构图
- 描述系统的静态结构,而不是系统的行为
- 描述系统的静态结构,而不是系统的行为
类的表示法
- 类是用带有隔间的矩形表示的。
- 类属性的语法为:
可见性 属性名: 类型=缺省值{约束特性} - 类操作的语法为:
可见性 操作名(参数表): 返回类型{约束特性} - 可见性
- +:public 所有的类都可以访问
- #:protected 自己及其子类可以访问
- -:private 只有自己可以访问
类的表示实例
类图的模型元素
类的关系
- 类之间的语义连接
- 类图可能包含以下关系:
- Association 关联
- Aggregation 聚集
- Composition 组合
- Generalization 泛化
- Dependency 依赖
- Realization 实现
- Association 关联
Association 关联
- Navigability 适航性
- 表示可以使用关联从关联类导航到目标类
- 适用关联表示对象之间具有永久关系
- 可以用箭头表示关联的方向,没有箭头表示双向关联
- 角色和多重性
- 角色名,表示一个类对于对方类来说自己扮演的角色或所处的位置
- 多重性,表示相关联的类之间,对象数目的相应关系
- 多重性指标
Aggregation 聚集
- 关联关系的一种特例
- 当某一个类成为另一个类的一部分时,可使用聚集的关系
- 表示类之间的关系是整体与部分的关系
- 整体和部分可分离,整体的生命周期和部分的生命周期不同
Composition 组合
- 关联关系的一种特例
- 整体和部分关系、整体部分不可分离、比聚集更强,整体的生命周期和部分的生命周期相同
Generalization 泛化
- UML将继承描述为泛化关系
- 子类继承超类的所有特性(属性、操作、关系),并具有独特的个性
Dependency 依赖
- 一个类A使用到了另一个类B,但是这种使用关系是具偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A
Realization 实现
- 类和接口之间的关系
- 一个类可以实现多个接口,实现所有接口的功能;体现了规范和实现分离的原则
多态
- 在一个接口背后隐藏多种不同的实现
接口
- 只具有操作的功能,不具有属性、关联、操作的实现
- 和类一样用四角形来表示实例,使用名为《interface》的构造型
- 用实现关系(带空心白色三角的虚线)符号来连接实现接口的元素(类,构建等)
- 接口的两种类型
- Provided interface 供给接口 - 由实现类供给的接口 (实现关系)
- Required interface 需求接口 - 先设计出使用者以及所需要的接口 (依赖关系)
对象图
- 类图的一种变形
- 在对象名下面要加下划线
- 所使用符号与类图基本相同
包图
包(package)
- 包是基于模型元素的含义或作用将模型元素分组的一种机制
- 目的
通过分组,可提高模型的维持性
端口(Port)与封装体
- 端口是封装类的内容与其环境之间的交互的结构特性
- 端口的行为是由其提供的和被要求的接口所指定的
- 允许内部结构被修改而不影响外部客户端
- 内部对外部客户端有不可见性
- 类可能有许多端口
- 每个端口都有一组提供的和被要求的接口
- 端口可以是public、protected、private
- 端口显示为一个小正方形,名称放在附近
- 端口类型
- 服务端口——仅用于类的内部实现
- 行为端口——端口上的请求由类直接实现
- 中继端口——端口上的请求被传输到内部部件来实现
图的描述
- 每个图都有一个框架,一个在左上角标题区域和一个内容区域
注释
- 添加注释以包含更多关于图表的信息
- 可以添加到任何的UML元素中
- 可以用虚线来锚定元素
02 Best Practice
迭代开发
- 四个阶段:初始阶段,细化阶段,构建阶段,交付阶段。