第 10章 面向对象方法学引论
10.1 传统方法学与面向对象方法比较
10.2 面向对象的基本任务
10.3,面向对象基础概念
10.4 本章小结
10.1 传统方法学与面向对象方法比较
10.1.1 传统方法学
10.1.2 面向对象方法学
10.1.1 传统方法学
1.僵化的瀑布模型这种模型的核心是将软件生命周期划分为软件计划、需求分析、软件设计、
编码、测试和运行维护等阶段,根据不同阶段工作的特点,运用不同的手段完成任务。
2.传统结构化技术的缺点用这种技术开发出的软件,其稳定性、可修改性和重用性都比较差。
10.1.2 面向对象方法学
1.为什么需要面向对象面向对象 =对象 +类 +继承 +消息 。
2.面向对象方法学的优点
( 1)符合人们通常的思维方式
( 2)高度连续性
( 3)重用性好
( 4)可维护性好
10.2 面向对象的基本任务
10.2.1 抽象
10.2.2 封装
10.2.1 抽象
1.什么是抽象
在抽象的最高层,使用问题环境的语言,以概括的方式叙述问题的解法;
在抽象的较低层,采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;
在抽象的最低层,可以用直接实现的方式来叙述问题的解法 ;
解空间计算机算法程序员对问题的表达(抽象)
客观世界的算法客观世界的对象和操作数据 结果客观世界的对象程序设计的对象和操作输出数据问题空间图 10-1 面向对象的软件分析过程数据抽象最本质的一点就是把数据类型的使用与它的实现加以分离,它使得程序设计人员能够:
( 1) 把大的系统分解成多个小的部分,每个部分有一个按所处理的数据而设计的接口;
( 2) 这些接口是这个部分的说明,是外部可见的,
而这个部分的具体实现则是隐蔽的,外部不可见的;
( 3) 所需的保护措施放在每个接口之中 。
2.如何用面向对象的方法实现抽象抽象数据类型说明实现语法语义属性方法图 10-2 抽象数据类型
10.2.2 封装将信息隐蔽的过程称为 封装 。
有两方面的原因促使我们控制对成员的访问 。
1)防止程序员接触他们不该接触的东西 —— 通常是内部数据类型的设计思想 。 若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息 。
2)允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。
10.3 面向对象基础概念
10.3.1 对象
10.3.2 其它概念
10.3.1 对象
1.对象的认定及特征对象( object)应是实际问题域中有意义的个体或概念实体。
此外,对象应该具有记忆自身状态的能力。
同时对象应该以某种方式与系统发生关联,既对象应该与系统中其他有意义的对象进行消息传递,并提供外部服务。
我们现就对象的经验说明对象的认定,
( 1)所有东西都是对象。
( 2)程序是对象的组合;通过消息传递,各对象知道自己该做些什么。
( 3)每个对象都有自己的存储空间,可容纳其他对象。
( 4)每个对象都有一种类型。
( 5)同一类所有对象都能接收相同的消息。
OOP中的对象有三个主要的特性:
( 1) 对象的行为 ( behavior) —— 这个对象能做什么,
或者说可以对这个对象施加什么方法 。
( 2) 对象的状态 ( state) —— 当对象施加方法时,
对象如何反应 。
( 3) 对象的标识符 ( identity) —— 对象是如何与可能具有相同行为和状态的其他对象相区别的 。
2.目标系统对象认定及筛选词法分析法,建议分析人员从目标系统的一个平凡描述开始,找出其中的名词,为侯选的对象 。
另一方面,找出其中的动词,来认定方法 ( 即服务 ) 。 然后产生一个由对象 ( 名词 ) 和方法
( 动词 ) 构成的表,作为分析的结果 。
对象在用户需求的正文描述中可能呈现以下形式:
与目标系统交换信息的外部实体。
现实问题信息域中的概念实体。
目标系统运行中可能出现并需要系统记忆的事件。
与目标系统发生交互作用的人员所扮演的各种角色。
系统环境或问题上下文的场所、位置。
有关的组织机构。
表示一组成分对象的聚集。
3.筛选对象筛选的基本原则如下:
( 1) 对象应具有记忆其自身状态的能力 。 并且对象的属性应是目标系统所关心的,或者是目标系统正常运转所必须的 。
( 2) 对象应能进行有意义的操作,以某种方式修改其状态 ( 属性值 ) 。 并且对象应该利用其操作为目标系统中的其他对象提供外部服务 。
( 3)对象应具有多种意义的属性。
10.3.2 其它概念
1,类 ( class)
人类习惯于把有相似特征的事物归为一类,
分类是人类认识客观世界的基本方法。
在程序设计语言中,一个数据类型被定义为:
( 1)一个抽象数据类型( ADT)的实现。
( 2)类的界面由一组操作构成,可以用它们来操纵类的实例。
2.属性( Attribute)
属性是用来描述对象状态的数据,类的每个对象中均有确定的值。
属性为类、对象提供了更多的描述细节,
明确了一个类的名字究竟在问题域和系统责任中意味着什么。
3.方法( Method)
方法是指为了完成某一任务,一个对象提供的,并体现其责任的操作 。 属于同一类的所有对象共享相同的服务 。
4.消息( Message)
一个对象为实现其责任需要与其他对象进行通信。在面向对象方法中,对象之间只能通过消息进行通信。
接收消息的对象;
消息选择符;
零个或多个变元。
5.继承( Inheritance)
继承是指能够直接获得已有的性质和特征,
而不必重复定义它们。
A
B C D
E F
A
B C D
E F
( a ) ( b )
A
B C D
E F
A
B C D
E F
( a ) ( b )
( a) 单重继承 ( b) 多重继承,E继承 B和 D,F继承 C和 D
图 10.3 继承的层次关系子类从父类继承有两个主要的方面:
( 1)结构方面。
( 2)行为方面。
6.服务在面向对象分析中,服务是指某个对象所具有的特定的行为,定义服务的中心问题是定义所要求的行为 。
一般有三种最常用的行为分类方法:
( 1) 基于直接的因果关系 。
( 2) 基于相似的进化历史 。
( 3) 基于相似的功能 。
10.4 本章小结
面向对象是一种新的非常有效的程序设计范型,对软件的生产率,可靠性,可重用性等都有帮助,面向对象的软件技术以对象 ( Object) 为核心,用这种技术开发出的软件系统由对象组成 。 对象是对现实世界的正确抽象,它是由描述内部状态表示静态属性的数据,
以及可以对这些数据施加的操作 ( 表示对象的动态行为 ),封装在一起所构成的统一体 。 对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系 。
面向对象方法的主要优点是:符合人们通常的思维方式;从分析到设计再到编码采用一致的模型表示具有高度连续性;软件重用性好 。