第十章 面向对象方法学引论
10.1.1 传统方法学
1,僵化的瀑布模型
2,传统结构化技术的缺点
10.1 传统方法学与面向对象方法比较
1,僵化的瀑布模型
( 1) 有些类型的系统需求是模糊的
( 2) 项目参与者之间存在通信鸿沟
( 3)预先定义的需求可能是过时的
2,传统结构化技术的缺点
结构分析与结构设计技术的本质是功能分解,
是围绕实现处理功能的过程来构造系统的 。 结构化方法强调过程抽象和模块化,是以过程
( 或操作 ) 为中心来构造系统和设计程序的 。
然而用户需求的变化大部分是针对加工的,因此这种变化对基于过程的设计来说是灾难 。
10.1.1 传统方法学
2.传统结构化技术的缺点
结构分析与结构设计技术清楚地定义了目标系统的接口 。 当系统对外界的接口发生变动时,也就是说,这样的系统较难修改和扩充 。
结构化方法把数据和操作作为分离的事实,
以至在实现阶段,一些具有潜在可重用价值的软件部件 ( 也称为软构件 ) 已和具体应用环境密不可分 。
上述种种原因都使得用结构分析与结构设计技术开发出的软件可重用性较差 。
10.1.2 面向对象方法学
1.为什么需要面向对象
2.面向对象方法学的优点
10.1 传统方法学与面向对象方法比较
从 80 年代后期开始,进 行 了 面 向 对 象 分 析
( OOA),面向对象设计 ( OOD) 和面向对象程序设计 ( OOP) 等新的系统开发方式模型的研究,在有些文献中统称为 OO范型 。
软件包括以下几方面的能力:
( 1)计算的能力;
( 2)推理的能力;
( 3)人机交互的能力。
能同时支持这 3种能力开发的技术是面向对象。
面向对象的需求分析方法通过提供对象、对象间消息传递等语言机制,从而削弱了语义断层。
1.为什么需要面向对象面向对象方法学核心概念属性值规定了对象所有可能的状态。对象的操作是指该对象可以展现的外部服务。例如,大型客机可视为对象,它具有位置、速度、颜色、容量等属性,对于该对象可施行起飞、降落、加速、维修等 操作,这些操作将或多或少地改变飞机的属性值
(状态 )。
( 1)对象在面向对象的系统中,对象是基本的运行时的实体,
它包括数据属性,也包括作用于数据的操作(行为)。
所以一个对象把属性和行为密封成一个整体。
面向对象方法学核心概念
(2)类 。 类是某些对象的共同特征 (属性和操作 )的表示,
对象是类的实例 。
例如,飞行器类包含位置、速度、颜色等属性,
以及起飞、降落、加速等操作。
是否建立了一个丰富的类库是衡量一个面向对象程序设计语言成熟与否的重要标志。
( 2)类面向对象方法学核心概念继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)所没有的。
类之间的继承关系是现实世界中遗传关系的直接模拟,
它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类 ( 被继承类 ) 的某些特征 。 当然,子类也可以具有自己独立的属性和操作 。
( 3)继承例如,飞行器、汽车和轮船可归于交通工具类,
飞行器类可以继承交通工具类某些属性和操作。
除遗传关系外,现实世界中还普遍存在着部分 — 整体关系。例如,飞机可由发动机、
机身、机械控制系统、电子控制系统等构成。聚集关系。
面向对象方法学核心概念消息传递是对象与其外部世界相互关联的唯一途径 。 对象可以向其他对象发出消息以请求服务,也可以响应其他对象传来的消息,完成自身固有的某些操作,从而服务于其他对象 。
因为对象的操作主要用来响应外来消息并为其他对象提供服务,所以它们也被称作,外来服务,。
(4)消息例如,直升飞机可以响应轮船的海难急救信号,
起飞,加速,飞赴出事地点并实施救助作业。
面向对象方法学核心概念简而言之:
面向对象 =对象 +类 +继承 +消息
2.面向对象方法学的优点
( 1) 符合人们通常的思维方式
面向对象方法强调把问题域的概念直接映射到对象以及对象之间的接口,符合人们通常的思维方式,减少了结构化方法从问题域到分析阶段的映射误差 。
( 2) 高度连续性
面向对象方法从分析到设计再到编码采用一致的模型表示,后一阶段可以直接利用前一阶段的工作成果,弥合了结构化方法从数据流图到模块结构图转换的鸿沟,减少了工作量和映射误差 。
2.面向对象方法学的优点
( 3) 重用性好
由于可以像使用集成电路 ( IC) 构造计算机硬件那样,比较方便地重用对象类来构造软件系统,因此,有人把类称为,软件 IC”。
( 4) 可维护性好
在客观世界以及作为它的映射的软件系统中,实体的结构是相对稳定的 。 面向对象方法通过把属性和服务封装在,对象,中,当外部功能发生变化时,保持了对象结构的相对稳定,
使改动局限于一个对象的内部,减少了改动所引起的系统波动效应 。
10.2 面向对象的基本任务
10.2.1 抽象
1.什么是抽象
2.如何用面向对象的方法实现抽象
10.2.2 封装
10.2.1 抽象
1.什么是抽象客观世界的对象和操作输出数据程序设计语言对象和操作客观世界的对象计算机算法解空间数据程序员对问题的表达客观世界算法问题空间
OOD方法提供了抽象数据类型机制,遵循软件设计的三条重要原则,即抽象、信息隐藏和模块化;
OOD的不再仅仅局限于过程处理部分,而是通过将及封装在一起,共同完成和的双重模块化。面向对象的软件设计 (00D)方法提供了对象、方法和消息等一整套概念,对数据的操作对于其他模块来说应该是隐蔽的。
(00D)方法提供了对象、
方法和消息一整套概念,问题空间解空间(变换)直观、合理
10.2 面向对象的基本任务
10.2.2 封装 将信息隐蔽的过程称为封装。
OOD方法提供了抽象数据类型机制,遵循软件设计的三条重要原则,即抽象、信息隐藏和模块化;
双重模块化数据对数据的操作信息 处理+
封装
10.2 面向对象的基本任务
2.如何用面向对象的方法实现抽象
10.3,面向对象基础概念
10.3.1 对象
1.对象的认定及特征
2.目标系统对象认定及筛选
3.筛选对象
10.3.2 其它概念
1.类( class)
2.属性( Attribute)
3.方法( Method)
4.消息( Message)
5.继承( Inheritance)
6.服务
10.3 面向对象基础概念
00分析方法的核心思想是利用 00
的概念和方法为软件需求建造模型,
以使用户需求逐步精确化、一致化、
完全化。
因此,00分析方法的大致步骤不外乎识别对象、属性及外部服务,
识别类及其结构,定义对象之间的消息传递等。
1,提取外部服务
2、标识消息传递
3、外部服务表示
10.3 面向对象基础概念对象类属性
1.对象的认定及特征
2.目标系统对象认定及筛选
3.筛选对象继承消息服务
10.3 面向对象基础概念
1.对象的认定及特征
认定对象起步于对用户需求的正文描述进行
语法分析。找出所有的名词或名词短语并合
并同义词。除去有动作含义的名词,它们将
被描述为对象的操作而非对象本身 。
对象在用户需求的正文描述中可能呈以下形式:
(1)与目标系统交换信息的外部实体。例如,物理设备,操作人员或用户,其他有关的子系。
(2)现实问题信息域中的概念实体。例如信号、报表、显示信息。
10.3.1 对象
10.3 面向对象基础概念
2.目标系统对象认定及筛选
(3)目标系统运行过程中可能出现并需要系统记忆的事件 。 例如核电站运转时的意外事故 。
(4)与目标系统发生交互作用的人员所扮演的各种角色 。 例如管理人员,工程师,销售人员 。
(5)作为系统环境或问题上下文的场所,位置 。 例如卫星地面接收站的安装位置 (经度,纬度,海拔高度 )。
(6)有关的组织机构 。 例如,单位,小组 。
(7)表示一组成分对象的聚集对象 。 例如物理设备 。
10.3.1 对象
10.3 面向对象基础概念
3.筛选对象
以下是识别有用对象的鉴别或筛选规则:
(1)对象应具有记忆其自身状态的能力 。 并且,
对象的属性应是目标系统所关心的,或者是目标系统正常运转所必须的 。
( 2)对象应进行有意义的操作,以某种方式修改其状态(属性值)。
(3)对象应具有多种有意义的属性。仅有一种属性的对象最好表示为其他对象的属性。
10.3.1 对象
10.3 面向对象基础概念
3.筛选对象
(4)为对象定义的有关属性应适合于对象的所有实例 。 如果对象的一个实例不具备某种属性,那往往意味着问题域中存在尚未发现的类继承关系 。 因此,应该利用继承关系将原有对象和该特殊实例区分为两类对象 。 例如,如果应用问题要求考虑所有的机动车辆,那么不能设置具有,柴油发动机,属性的,机车,对象,而应分别定义,柴油机车和,汽油机车,对象,它们均为,机车,类的子类的实例 。 ·
(5)为对象定义的有关操作应适合于对象的所有实例 。
(6)对象应是软件需求模型的必要成分,与设计和实现方法无关。
10.3.1 对象
10.3 面向对象基础概念
3.筛选对象以下是有关对象命名的重要原则:
(1)使用单个名词或名词短语,
(2)对象名称必须简洁,精确,易于理解,
(3)尽量使用用户熟悉的标准词汇 。
对象在软件需求模型中的表示形式如图所示 (说明:带虚线 ),框的圆角四边形表示类及其对象,不带虚线框的圆角四边形仅表示类对象名称 对象的图示
10.3.1 对象
10.3 面向对象基础概念
1.类在面向对象分析方法中,类是具有相同属性和服务的对象的集合 。 类作为模板,为属于该类的所有对象提供了相同的结构,相同的操作
( 集 ),对其他对象具有相同的关系和相同的语义 。 对象是类的实例 。
10.3.2 其它概念
10.3 面向对象基础概念
1.类在程序设计语言中,一个数据类型被定义为:
( 1) 一个抽象数据类型 ( ADT) 的实现 。 在类定义时特别指明类的其他使用者能够使用的操作 。
这组操作叫做类的界面 。
( 2) 类的界面由一组操作构成,可以用它们来操纵类的实例 。
类加进了操作,给通常的记录赋予了语义,可提供各种级别的可访问性 。
10.3.2 其它概念
10.3 面向对象基础概念
1.类在程序设计语言中,一个数据类型被定义为:
( 1) 一个抽象数据类型 ( ADT) 的实现 。 在类定义时特别指明类的其他使用者能够使用的操作 。
这组操作叫做类的界面 。
( 2) 类的界面由一组操作构成,可以用它们来操纵类的实例 。
类加进了操作,给通常的记录赋予了语义,可提供各种级别的可访问性 。
10.3.2 其它概念
10.3 面向对象基础概念
属性是对问题域中对象性质
的刻画,属性的取值决定了对象所有可能状态。
在识别属性的过程中,应注意以下问题,以免找出冗余的或不正确的属性:
(1)对于问题域中的某个实体,如果不仅其取值有意义,而且它本身独立存在也有相当重要性,则应该将该实体作为一个对象,而不宜作为另一对象的属性 。 例如,在,家庭保安统,
中,将电话作为传感器的属性是不妥的,因为一部电话可能同时与多个传感器连接 。
2,属性
10.3.2 其它概念
10.3 面向对象基础概念
(2)为了保持需求模型的简洁性,对象的导出属性往往可以略去 。 例如,,年龄,可通过,出生日期,
和系统当前时间导出,因此,不应将,年龄,作为人的基本属性 。 要切记;基本属性完整地刻画了对象的性质,并决定了对象的状态,导出属性可由对象的外部服务通过对基本属性的计算来提供 。 ’
(3)在需求分析阶段,如果某属性描述对象的外部不可见状态,则应从需求模型中将其删除 。
2.属性
10.3.2 其它概念
10.3 面向对象基础概念标识对象的属性传感器类别编号位置状态警报值采样频率
2.属性
10.3.2 其它概念
10.3 面向对象基础概念
前面曾经提到,00需求分析的各个阶段往往是迭代完成的 。 如果在标识属性的过程中发生以下情况,
则应考虑调整对象识别阶段的结果:
(1)如果属性只适应于对象的某些实例而不适应于另外的实例,往往意味着存在另一类对象 。 并且,
这两类对象之间可能存在继承关系 。
(2)仅有一种相关属性的对象可以表示为其他对象的属性 。
(3)对于对象的某种属性,如果该对象的特定实例会有多重属性值,则应将该对象分裂为两个对象 。
2.属性
10.3.2 其它概念
10.3 面向对象基础概念方法是指为了完成某一任务,一个对象提供的、
并体现其责任的操作。属于同一类的所有对象共享相同的服务。
3.方法
10.3.2 其它概念
10.3 面向对象基础概念一个对象为实现其责任需要与其他对象进行通信 。 在面向对象方法中,对象之间只能通过消息进行通信 。
消息就是要求某个对象执行在定义它的那个类中所规定的某个操作的规格说明 。 通常,一个消息由下面三部分组成:
l 接收消息的对象;
l 消息选择符;
l 零个或多个变元 。
4.消息
10.3.2 其它概念
10.3 面向对象基础概念继承是指能够直接获得已有的性质和特征,
而不必重复定义它们 。
在面向对象的软件技术中,继承是表达类之间相似性的一种机制,即在已有的类的基础之上增量构造新的类。前者称为父类(或超类),后者称为子类。子类除自动拥有父类的全部属性和服务外,还可以进一步定义新的属性和服务。
5.继承
10.3.2 其它概念
10.3 面向对象基础概念如果子类只从一个父类继承,则称为单继承;如果子类从一个以上父类继承,则称为多继承。图表示了单继承( a)和多继承( b)时父类和子类之间的关系,箭头从子类指向父类。
10.3 面向对象基础概念
“继承,结构 举例:一家公司的对象模型
10.3 面向对象基础概念在面向对象分析中,服务是指某个对象所具有的特定的行为,定义服务的中心问题是定义所要求的行为 。 一般有三种最常用的行为分类方法:
( 1) 基于直接的因果关系 。
( 2) 基于相似的进化历史 。
( 3) 基于相似的功能 。
6,服务
10.3.2 其它概念
10.3 面向对象基础概念这些原则被应用于本节所提出的策略之中,特别要指出的是:
( 1),对象状态,建立在,进化,原则的基础之上 。
( 2),所要求的服务,建立在,相似的功能,和
,因果关系,之上 。
定义服务时的第二个问题是定义对象之间的必要通信,就像人事系统交互时通过命令和请求一样,
在面向对象分析模型的各部分之间也使用完全相同的交互模式 。
6,服务
10.3.2 其它概念
10.4 本章小结对传统的生命周期方法学应该“一分为二”,既要看到这种方法学在历史上曾经起过的作用,而且至今仍然适用于开发某些类型的软件系统;又要看到对另一些类型的应用系统统来说,这种方法学并不适用,人们很难甚至根本不可能预先定义这类系统的需求。
此外,用传统的 SA— SD— SP技术开发出的软件的稳定性、可重用性和可维护性都比较差。
(2)对象之间的消息传递构成静态结构视点。
近年来,面向对象方法学日益受到人们的重视。使用这种方法学能够开发出稳定性好、可重用性好和可维护性好的软件。
面向对象方法学比较自然地模拟了人类认识客观世界的思维方式,它所追求的目领和遵循的基本原则,就是使描述问题的问题空间和在计算机中解决问题的解空间,
在结构上尽可能一致。