2.2.2 面向对象开发方法

2.2.2 面向对象开发方法

面向对象(Object Oriented, OO) 开发方法, 简称面向对象方法, 是一种把数据和过程包装成对象, 以对象为基础对系统进行分析与设计的方法。面向对象开发方法为认识事物提供了一种全新的思路和办法, 是一种综合性的开发方法。

1.面向对象方法的基本思路

客观世界中存在着各种各样的对象, 每种对象都有各自的内部状态和运动规律, 不同对象之间的联系和相互作用构成了各种不同的系统。对象是在原事物基础上抽象的结果。任何复杂的事物都可以由相对简单的对象以某种组合结构构成。

对象通常包含了其属性和方法两个部分。属性用于反映对象的信息特征, 如特点、状态等, 而方法则是用来定义改变属性状态的各种操作。

对象之间的联系主要通过传递消息来实现, 传递的方式则是通过消息和方法所定义的操作来完成。

对象可按其属性进行归类, 类(Class) 有一定的结构, 类往上可以有超类(Superclass), 类往下可以有子类(Subclass)。类之间的层次结构靠继承性来维系。对象作为一个被严格模块化的实体具有封装性, 因此对象能满足软件工程的一切要求, 并可直接被面向对象的程序设计语言所接受。

2.面向对象方法的开发过程

面向对象的开发过程通常可分为获取需求、系统分析、系统设计、程序实现4个过程。

(1) 获取需求

获取需求指的是对系统将要面临的具体业务问题以及用户对系统开发的需求进行调查研究, 即先弄清楚要干什么。

(2) 系统分析

系统分析指的是在繁杂的问题域中抽象地识别对象以及其属性、方法等, 一般称之为面向对象的分析(Object Oriented Analysis, OOA)。

(3) 系统设计

系统设计指的是考虑各种技术条件, 对分析的结果进行进一步的抽象、归类、整理,并最终以模型的形式确定下来, 一般称之为面向对象的设计(Object Oriented Design,OOD)。

(4) 程序实现

程序实现指的是用面向对象的程序设计语言将上一步建立的模型直接映射为应用软件, 一般称之为面向对象的编程(Object Oriented Programming, OOP)。

3.面向对象方法的优缺点

(1) 面向对象方法的优点

面向对象方法具有以下5个优点。

①与人们习惯的思维方式一致。面向对象的设计方法把系统看成是各种对象的集合,这样更为接近人类的自然思维方式, 也解决了结构化方法中客观世界描述工具与系统结构不一致的问题。

②稳定性强。面向对象方法是基于构造问题域的对象模型, 以对象为中心构造系统。它的基本做法是对象模拟问题域中的实体, 以对象间的联系体现实体间的联系。因为面向对象的系统的结构是根据问题域的模型建立起来的, 而不是基于对系统应完成的功能的分解, 所以, 当系统的功能需求变化时并不会引起系统结构的整体变化, 而仅需要做一些局部性的修改。例如, 从已有类派生出一些新的子类以实现功能的扩充或修改, 增加或删除某些对象等。总之, 由于系统需求的变动往往是功能的变化, 而用于实现功能的对象一般不会有大的变化, 因此, 以对象为中心构造的系统结构也是相对稳定的。

③可重用性高。传统的软件重用技术通常使用标准函数库中的函数来构造新的软件系统。但是, 标准函数不能适应不同应用场合的不同需要, 并不是理想的可重用的软件技术。在开发过程中, 通常许多函数都是需要开发人员自己重新进行编写的。

面向对象方法能较好地解决软件重用问题。其对象的封装性和数据隐藏性能够使对象内部实现与外界隔离, 具有较强的独立性。

面向对象开发技术有两种方法可以重复使用: 一是创建该类的实例, 从而直接使用它; 另一种是从它派生出一个满足当前需要的新类。对象的继承性使子类不仅可以重用其父类的属性和方法, 还可以在父类方法的基础上进行方便的修改和扩充, 且这种修改并不会影响对父类的使用。

④可维护性好。采用传统方法和面向过程语言所开发出来的软件很难维护, 而面向对象方法由于其稳定性和易修改性所以良好地解决了软件维护难的问题。

由于类具有良好的独立性, 因此, 修改一个类通常很少会牵涉其他类。如果只需要修改一个类的内部实现部分(私有属性或方法), 而不修改该类的对外接口, 则可以完全不影响软件的其他部分。

面向对象方法中的继承性, 使软件的修改和扩充变得非常容易, 通常只需从已有类中派生出一些新类即可, 而不需要修改软件原有部分。

面向对象中的多态性使当扩充软件功能时对原有代码所需做的修改进一步减少, 需要增加的新代码也比较少。

⑤开发过程简便。由于减少了从系统分析、设计到软件模块结构之间多次转换映射的繁杂过程, 从而大大减少了后续软件开发量, 缩短了开发周期。

(2) 面向对象方法的缺点

在实践过程中也暴露出面向对象方法的一些缺点, 具体如下。

①面向对象开发方法必须依靠一定的软件工具支持。

②总体设计步骤中还是需要以结构化方法的自顶向下的整体性系统的原则和分析作为基础, 否则系统同样会存在结构不合理、关系不协调的问题。

③学习和掌握面向对象方法与掌握结构化方法及原型法相比有一定的难度。