面向对象方法
概念
- 从程序设计方法的角度看,面向对象是一种新的程序设计范型(paradigm),其基本思想是使用对象、类、继承、封装、聚合、关联、消息、多态性等基本概念来进行程序设计。
- 从方法学的角度看,面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
优势
- 改变了开发软件的方式。
- 是客观世界到计算机的语言鸿沟变窄。
- 分析与设计之间的鸿沟变窄。
- 有助于软件的维护与复用。
- 有助于提高软件的质量和生产率。
主要概念
对象
- 对象是要研究的任何事物。
- 对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。
- 从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。
- 在对内的操作通常称为方法。一个对象请求另一对象为其服务的方式是通过发送消息。
类
- 类是对象的模板。
- 即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同行为和属性。
- 类是在对象之上的抽象,对象则是类的具体化,是类的实例。
- 类可有其子类,也可有其它类,形成类层次结构。
消息
- 消息是对象之间进行通信的一种规格说明。
- 一般它由三部分组成:接收消息的对象、消息名及实际变元。
抽象
- 是指从事物中舍弃个别的、非本质的特征,而抽取共同的、本质的特征的思维方式。
- 对象是指对现实世界中事物的抽象,类是对对象的抽象。
封装
- 把对象的属性和操作结合为一个独立的整体,对外形成该事物的一个界限
- 信息隐藏,并尽可能隐藏对象的内部实现细节。
多态
- 一般类和特殊类可以有相同格式的属性或操作,但是这些属性或操作有不同的含义,即不同的数据类型或表现不同的行为。
- 父类的变量可以指向子类对象。(允许将子类类型的指针赋值给父类类型的指针)。
关联
- 指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。
- 关联可以有方向,可以是单向关联,也可以是双向关联。
聚合
- 指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。
- 从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。
面向对象的分析
概念
- 运用面向对象方法进行系统分析。
- 目标是建立一个符合问题域、满足用户需求的OOA模型。
提倡
充分运用OO方法基本概念自然而有效地解决分析与设计中遇到的各种问题
面向对象方法为什么有利于解决分析面临的挑战?
- 分析面临的挑战主要是问题域与系统责任。
- OOA强调从问题域的实际事物以及与系统责任有关的概念出发来构造系统模型。使得系统中对象之间的关系能良好地与问题域中的事物相对应。
问题域
被开发系统的应用领域。
系统责任
被开发系统应该具备的职能。
OOA模型
OOA过程
建立需求模型-用况图
什么是用况?
- 一个用况是描述系统的一项功能的一组动作序列,这样的动作序列表示参与与系统间的交互,系统执行该动作序列要未参与者产生结果。
参与者有哪些种类
- 人员
- 外部系统
- 设备
面向对象的设计(OOD)
什么是OOD
- 是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。
- 在设计阶段,考虑实现系统的各种有关因素,基于OOA进一步运用OO方法进行设计,构建OOD模型。
OOA和OOD的关系
- OOD要在OOA模型的基础上运用OO方法,主要解决与实现有关问题,目标是产生符合条件的OOD模型。
- 采用一致的概念、原则和表示法,二者能够紧密详解,降低了从OOA过渡到OOD的难度与出错率。
- OOA以OOD模型基础,只需要做必要的修改和调整,或补充某些细节,并增加几个与实现有关的相对独立部分。
OOA和OOD的不同分工
- OOA模型是问题域和系统自然的完整表达,而不考虑与现实有关的因素。
- OOD才考虑与现实有关的问题,建立一个针对具体实现要求的OOD模型。
OOD的目标
- 是反映的问题域本质的总体框架和组织结构长期稳定,而细节可变。
- 把稳定的问题域部分与可变的实现有关的部分分开,使得系统能从容地适应变化。
- 有利于同一个分析模型用于不同的设计实现,形成一个系统族。
- 有利于相似系统的分析、设计或编程结果复用。
MDA的观点看OOA和OOD的关系
- 不涉及具体实条件的OOA模型是一个与平台无关模型,它独立于任何实现平台。
- 在OOA模型的基础上,针对确定的实现条件而设计的OOD模型是一个平台相关模型。
OOD模型
OOD过程
- 问题域部分的设计
- 人机交互部分的设计
- 控制流管理部分的设计
- 数据管理部分的设计
- 构件部署设计
问题域部分的设计
与OOA模型有什么关系?
- OOD的问题域部分设计以OOA的结果作为输入,按四项条件对其进行补充与调整。
- 进行问题域部分的设计要继续运用OOA方法,要根据实现条件进行OOD设计,由于需求变化或发现新错误,也要对OOA进行修改,以保持一致性。
设计准备
- 复制OOA文档,作为OOD的输入
- 根据需求的变化和发现的错误进行修改
设计内容与策略
- 针对编程语言支持能力的调整
- 增加一般类以建立共同协议
- 实现复用
- 提高性能
- 为实现对象永久存储所做的修改
- 完善对象的细节
- 定义对象实例
- 对辅助模型、模型规约的修改和补充
人机交互部分的设计
什么是人机交互部分
- 简而言之,人机交互部分是人和计算机之间交互信息的媒介。
- 是OOD模型的组成部分之一,突出人如何命令系统以及系统如何向用户提交信息。
把人机交互部分作为系统中一个独立的部分有什么好处
- 有利于隔离界面支持系统的变化对问题域部分的影响
人机交互部分的需求分析
- 对使用系统的人进行分析——以便设计出适合其特点的交互方式和界面表现形式;
- 对人和机器的交互过程进行分析——核心问题是人如何命令系统,以及系统如何向人提交信息。
人机交互的细化
-
输入的细化
- 输入设备的选择
- 输入信息表现形式的选择(命令,数据):输入界面
- 输入步骤的细化
-
输出的细化
- 输出设备的选择
- 输出信息表现形式与内容的选择
- 输出步骤的细化
人机交互的命令的组织
不受欢迎的命令组织方式:
- 一条命令含有大量的参数和任选项
- 系统有大量命令,不加任何组织和引导
基本命令:
使用一项独立的系统功能的命令。(提取后的用况)
命令步:
在执行一条基本命令的交互过程中所包含的具体输入步骤。
高层命令:
如果一条命令是在另一条命令的引导下被选用的,后者称作前者的高层命令。
命令的组织措施——分解与组合
- 分解:将一条含有许多参数和选项的命令分解为若干命令步
- 组合:将基本命令组织成高层命令,从高层命令引向基本命令
用OO概念表达所有的界面成分
- 选择界面支持系统
- (窗口系统、图形用户界面、可视化编程环境)
- 设计报表及报告.
对要生成的报表和报告格式等进行设计。- 每一种报表或报告应对应于一个类。
- 设计诸如安全/登录、设置和业务功能之类的窗口。
- 每一种窗口对应于一个类。
4 .在窗口中,按照命令的逻辑层次,部署所需要的元素,如菜单、工作区和对话框等。 - 窗口中的部件元素对应窗口类的部分类,部分类与窗口类形成聚合关系。
- 每一种窗口对应于一个类。
- 发现窗口类间的共性以及部件类间的共性,定义较一般的窗口类和部件类
- 形成窗口类间以及部件类间的泛化关系。
- 用类的属性表示窗口或部件的静态特征
- 如尺寸、位置、颜色和选项等。
- 用操作表示窗口或部件的动态特征,如
- 选中、移动和滚屏等。
- 发现界面类之间的联系,在其间建立关联。
- 必要时,进一步地绘制用户与系统会话的顺序图。
建立界面类与问题域类之间的联系
- 人机界面只负责输入与输出和窗口更新
- 问题域部分的对象不主动发起与界面部分对象之间的通讯,只对界面部分对象进行响应
- 尽量减少界面部分与问题域部分的耦合
可视化编程环境下的设计策略
- 易学、易用、操作方便
- 尽量保持一致性
- 及时提供有意义的反馈
- 使用户的注意力集中在当前的任务上而不是界面上
- 尽量减少用户的记忆
- 7加减2原则
- 具有语境敏感的帮助功能
- 减少重复的输入和操作
- 身份证信息、出生年月日
- 防止灾难性的错误
- 防止用户误操作导致的数据丢失等灾难性错误
- 其它:如艺术性、趣味性、风格、视感等
控制驱动部分的设计
什么是控制驱动部分
是OOD模型的一个组成部分,这部分由系统中全部的主动类构成。
控制流
- 是一个在处理机上顺序执行的动作序列。
- 是进程或线程的统称。
相关技术问题
- 由系统总体方案决定的实现条件
- 软件体系结构——特别是分布式系统的软件体系结构
- 系统的并发性——进程与线程
如何设计控制驱动部分
- 选择软件体系结构风格
- 确定系统分布方案
识别控制流
从各种角度考虑问题,以决定系统中应该设计哪些控制流,这控制驱动部分设计的关键问题。
数据管理部分的设计
什么是数据管理部分
负责在特定的数据管理系统中存储和检索对象的组成部分。
目的
- 存储问题域的持久对象、封装这些对象的查找和存储机制
- 隔离数据管理方案的影响
数据管理系统
文件系统
- 缺点
- 操作低级、数据操纵功能贫乏
- 缺少数据完整性的支持
- 缺少多用户及应用共享
- 优点
- 几乎可以存储任何类型的数据
- 对完整性、故障恢复、事物处理功能要求不高
RDBMS(关系数据库系统)
OODBMS(面向对象数据库系统)
数据管理系统的选择
- 文件系统
- 廉价\对被存储的数据没有特别的类型限制
- 缺少数据完整性和数据共享的支持\自行开发工作量大
- 关系数据库管理系统
- 技术成熟
- 需要较多的计算资源, 处理速度较慢,不适合非结构化的数据存储/具有数据模型的鸿沟
- 对象数据库管理系统
- 没有鸿沟/原则上适用于任何数据
- 技术不成熟,没有标准
针对文件系统的设计
- 如何看待用文件系统存储对象
- 从应用系统的对象到文件记录的不同映射方式
- 一一对应的映射方式
- 非一一对应的映射方式
- 对象在文件中的存放策略
- 设计数据接口部分的对象类
- 提高效率的措施
- 问题域部分的修改
针对RDBMS的设计
- 对象及其对关系数据库的使用
- 从应用系统的对象到数据库表元组的不同映射方式
- 一一对应的映射方式
- 非一一对应的映射方式
- 使用RDBMS和使用文件系统的不同
- 对象在数据库中的存放策略
- 类与表的对应
- 基本策略
- 规范化——修改类图还是影射到表再规范化?
- 确定关键字
- 从类图到数据库的映射
- 一般-特殊结构、关联、整体-部分结构的处理
- 设计数据接口部分的对象类
- 两种策略
- 修改问题域部分的对象类
针对OODBMS的设计
- 主要考虑:
- 如何用OODBMS提供的数据定义语言、数据操纵语言和其它编程语言来实现OOD模型
- 一一实现类和对象的定义和对数据库的访问
- 必要时要根据语言的功能限制对类图做适当的修改