2-面向对象分析与设计
2.1 面向对象技术概述
2.1.1 面向对象的基本概念
基本观点
- 客观世界由对象组成,任何客观实体都是对象,复杂对象可以由简单对象组成;
- 具有相同数据和操作的对象可归纳成类,对象是类的一个实例;
- 类可以派生出子类,子类除了继承父类的全部特性外还可以有自己的特性;
- 对象之间的联系通过消息传递来维系。
核心元素
对象
- 客观世界里的任何实体都可以被称为对象;
- 对象可以是具体的、有形的物,也可以是无形的事物或概念;
- 对象是问题域或实现域中某些事物的一个抽象;
- 对象是一个封装数据属性和操作行为的实体;
- 系统中的对象在软件生命周期的各个阶段可能有不同的表示形式。
封装
- 结合性
- 信息隐蔽性
消息
- 消息是向对象发出的服务请求。
- 一个消息包含消息名、接受对象的标志、服务标志、输入信息、回答信息等。
- 消息传递机制。
类
- 类是一组具有相同数据结构和相同操作的对象的集合。
- 类是对象的抽象。
- 客观世界实际存在的都是对象,而不是类 。
- 类和对象的关系。
继承
- 继承性是面向对象程序设计语言不同于其他语言的最主要特点。
- 继承是指子类可以自动拥有父类的全部属性与操作的机制。
多态性
定义:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
多态性分为两种:
(1) 编译时的多态性;
(2) 运行时的多态性。
- 结构与连接
方式
(1) 一般/特殊结构(员工—经理,普通职员)
(2) 整体/部分结构(宿舍楼—门房、宿舍、配电房)
(3) 实例连接(司机—汽车)
(4) 消息连接(系统消息,自定义消息)
2.1.2 面向对象的开发语言
2.1.3 面向对象的设计与开发工具
面向对象的建模语言
- Booch 1993(Grady Booch)
- OOSE(Jim Rumbaugh)
- OMT-2(Ivar Jacobson)
- UML
面向对象的程序设计语言(此部分内容过时…)
四个基本的分支:
(1) 基于Smalltalk的语言
(2) 基于C的语言
(3) 基于LISP的语言
(4) 基于PASCAL的语言
2.2 面向对象的分析
2.2.1 面向对象分析的层次
- 主题层(系统模块化,降低复杂度)
- 类与对象层(类和对象)
- 结构层(类间继承,“整体—部分”)
- 属性层(属性,类和对象间的实例连接)
- 服务层(方法,类与对象的消息连接)
2.2.2 面向对象分析的基本过程
- 发现对象,从对象中抽象出类的定义;
- 识别对象的内部特征(数据 ,方法);
- 识别对象的外部关系(消息,调用);
- 划分主题,建立主题图(模块);
- 定义用例,建立交互图;
- 建立详细说明(文档);
- 原型开发(迭代,递增)。
2.2.3 面向对象分析的基本原则
- 抽象原则
- 分类原则
- 聚合原则
- 关联原则
- 消息通信原则
2.2.4 类图
类图的主要构成成分
(1) 类
(2) 属性
(3) 方法
(4) 一般/特殊结构
(5) 整体/部分结构
(6) 实例连接
(7) 消息连接
类图分为三个层次
(1) 对象层:实现层,揭示软件的实现;
(2) 特征层:说明层,描述软件的接口;
(3) 关系层:概念层,描述问题域中的概念。
2.3 面向对象的设计
2.3.1 面向对象设计的模型
2.3.2 面向对象的高层设计
- 高层设计的结构模型
高层设计的准则
- 弱耦合
- 强内聚
- 减少通信开销
- 良好的可扩充性
问题域子系统的设计
设计过程
(1) 复用已有的设计
(2) 把与问题论域相关的类关联,建立类的层次结构
(3) 创建一般化类
(4) 改进系统性能
(5) 加入较低层的构件(形式、内容 、服务)
- 人机交互子系统的设计
设计过程
(1) 用户分类
(2) 描述人及其任务的脚本
(3) 设计命令层
(4) 设计与用户的详细交互
(5) 继续进行原型设计
(6) 设计人机交互类
- 任务管理子系统的设计
设计过程
(1) 为任务命名,并简要说明这个任务
(2) 定义各个任务如何协调工作,指出它是事件驱动还是时钟驱动(Agent)
(3) 定义各个任务之间如何通信,任务将从哪里取值,任务执行得到的结果将送往何方
- 数据管理子系统的设计
2.3.3 面向对象的类设计
设计目标
- 把类设计成可复用的“插接相容性”部件(困难)
- 把类设计成健壮的部件
- 把类设计成可集成的部件(调用,测试)
设计准则
- 类公共接口的单独成员应该是类的操作符
- 类A的实例不应该直接发送消息给类B的成员
- 操作符是公共的,当且仅当类实例的用户可用
- 属于类的每个操作符要么访问、要么修改类的某个数据
- 类必须尽可能少地依赖其他类(弱耦合)
- 两个类之间的互相作用应该是显式的
- 继承结构的父类应该是目标概念的抽象模型
2.4 基于UML的面向对象分析、设计过程
设计过程
- 识别系统的用例和角色
- 进行系统分析,并抽象出类
- 设计系统和系统中的类及其行为