4 面向对象泛型
4.1 面向对象泛型介绍
面向对象系统的基础概念和术语包括
- 对象:在面向对象环境中,对象是真实的元素,在物理(比如一个客户、一辆车)或概念(比如一个项目、一个进程)上是存在的
- 每个对象都有
- 身份:与系统中其他对象区分
- 状态:决定一个对象的特点属性,已经持有的属性的值
- 行为:表示一个对象执行的外部可见的行为,和对象的状态变化相关
- 对象可以根据应用的需求被模型化
- 类:类表示拥有相同的特点属性(表现相同的行为)的一组对象
- 创建一个类的一个对象作为成员称作实例化。因此,对象是类的一个实例
- 一个类包括
- 一组属性:对象从类实例化得到的属性
- 一般来说,一个类的不同对象在这些属性上有一些不同
- 属性常表示成类的数据
- 一组操作:描绘该类的对象的行为
- 操作常表示成类的函数或方法
- 封装:封装是在类中将属性和方法绑定在一起的过程
- 通过封装,类可以向外部隐藏内部的细节
- 类只允许外部通过接口访问类内的元素
- 多态:多态暗示操作的方式不同,取决于操作针对的实例
- 多态使得内部结构不同的对象可以向外部提供统一的接口
- 多态主要通过继承实现
- 关系:系统包括动态(行为)指标和静态(逻辑)指标
- 动态指标描述对象之间的关系(比如消息传递)
- 静态指标描述类之间的关系(比如聚合、关联、继承)
- 消息传递:系统内的对象彼此使用消息传递通信
- 一个对象如果想要另一个对象执行一个方法,必须给该对象发送一个消息
- 复合或聚合:复合或聚合表示类间的关系,指一个类可以通过其他类对象的组合生成
- 聚合指的是 part-of 或 has-a 关系
- 一个聚合类由一个或多个其他的对象组成
- 关联:关联是拥有共同的结构和行为的一组链接(link)。关联描述了一个或多个类的对象之间的关系
- 一个链接(link)可以定义成一个关联的一个实体
- 关联的度表示参与到一个连接的类的数目。度可以是单元、二元或三元的
- 一个单元关系连接同一个类内的对象
- 一个二元关系连接两个类的对象
- 一个三元关系连接三个或多个类的对象
- 继承:继承机制允许基于已有的类创建类,创建的类可以扩展或重定义能力
- 已有的类称作基类/父类/超类(super-class),新类成为衍生类/子类/亚类(subclass)
- 亚类可以继承或衍生超类提供的属性和方法
- 亚类也可以添加自己的属性和方法,且方法可能会改变超类的方法
- 继承定义了 is-a 的关系
4.2 面向对象分析
- OO(object-oriented,面向对象)分析的目的是理解系统的应用领域和特定的需求
- OO 分析的输出是系统的需求规格文档、逻辑结构的初始分析和可行性
- OO 分析常用的分析技术包括
- 对象建模:开发软件系统对象的静态结构。对象建模的步骤
- 标识对象,组合成类
- 标识对象间的关系
- 创建一个用户对象模型图
- 定义一个用户对象的属性
- 定义类上应该执行的操作
- 动态建模:动态建模的目的是检验系统的时间和外部变化
- 动态建模可以定义为“描述一个单独的对象如何响应事件的一种方式,事件可以是其他对象触发的内部事件,或者外部世界触发的外部事件”
- 动态建模的步骤
- 标识每个对象的状态
- 标识事件,分析行为的适用性
- 构建动态模型图,包括状态转换图
- 表示对象属性的每个状态
- 验证画的状态转换图
- 功能建模:功能模型展示了对象内部执行的流程,以及对象在方法之间移动时数据如何变化
- 功能建模详细说明了对象建模操作和动态建模行为的意义
- 功能建模和传统的结构化分析的数据流图对应
- 功能建模的步骤
- 标识所有的输入和输出
- 构建数据流图,展示功能依赖性
- 说明每个函数的目的
- 标识约束
- 具体说明优化标准
4.3 面向对象设计
- 面向对象设计(OOD, object-oriented design)阶段,面向对象分析中的技术独立性概念被映射到实现类,约束被标识,接口被设计,生成解决方案域的模型
- OOD 的主要目的是开发系统的结构化架构
- OOD 的步骤
- 定义系统的上下文
- 设计系统架构
- 标识系统的对象
- 构造设计模型
- 规范对象接口
- OOD 总结为两个步骤
- 概要设计:也叫高层设计,定义系统所需所有类,详细描述每个类的功能
- 使用类图描述类间的关系
- 交互图展示事件流
- 详细设计:也叫低层设计,基于交互图给每个类赋予属性和操作
- 状态图描述设计进一步的细节
- 需要遵循下面的设计原则
- 解耦原理:低耦合,可以通过引入新的类或继承消除耦合
- 确保内聚:高内聚,一个内聚的类执行一组紧密相关的功能
- 开放封闭原则:系统应该可以扩展满足新的需求
- 系统已有的实现和代码不应该被修改以扩展系统
- 下面是指导方针
- 对于每一个具体类,应该维护独立的接口和实现
- 在多线程环境,保持属性是私有的
- 最小化全局变量和类变量