《面向对象分析与设计》一1.4面向对象方法的主要优点

简介: 本节书摘来自华章出版社《面向对象分析与设计》一书中的第1章,第1.4节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.4面向对象方法的主要优点

本节从认识论的角度和软件工程方法的角度看一下面向对象方法带来的益处,并把面向对象方法与传统方法进行比较,看面向对象方法有什么优点。

  1. 从认识论的角度面向对象方法改变了开发软件的方式
    面向对象方法从对象出发认识问题域,对象对应着问题域中的事物,其属性与操作分别刻画了事物的性质和行为,对象的类之间的继承、关联和依赖关系能够刻画问题域中事物之间实际存在的各种关系。因此,无论是系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射到问题域。这使得运用面向对象方法有利于正确理解问题域及系统责任。
  2. 面向对象语言使得从客观世界到计算机的语言鸿沟变窄
    图1.4为一个示意图,说明了面向对象语言如何使得从客观世界到计算机的语言鸿沟变窄。

机器语言是由二进制的“0”和“1”构成的,离机器最近,能够直接执行,却没有丝毫的形象意义,离人类的思维最远。汇编语言以易理解的符号表示指令、数据以及寄存器、地址等物理概念,稍稍适合人类的形象思维,但仍然相差很远,因为其抽象层次太低,仍需考虑大量的机器细节。非OO的高级语言隐蔽了机器细节,使用有形象意义的数据命名和表达式,这可以把程序与所描述的具体事物联系起来。特别是结构化编程语言更便于体现客观事物的结构和逻辑含义,与人类的自然语言更接近,但仍有不少差距。面向对象编程语言能比较直接地反映客观世界的本来面目,并使软件开发人员能够运用人类认识事物所采用的一般思维方法来进行软件开发,从而缩短了从客观世界到计算机实现的语言鸿沟。
3面向对象方法使分析与设计之间的鸿沟变窄
本书所讲的传统软件工程方法是指面向对象方法出现之前的各种软件工程方法,此处主要讨论结构化的软件工程方法。图15是结构化的软件工程方法的示意图。

image

在结构化方法中,对问题域的认识与描述并不以问题域中的固有事物作为基本单位,并保持它们的原貌,而是打破了各项事物间的界限,在全局的范围内以功能、数据或数据流为中心来进行分析。所以运用该方法得到的分析结果不能直接地映射到问题域,而是经过了不同程度的转化和重新组合。这样就容易隐藏一些对问题域理解的偏差。此外,由于分析与设计的表示体系不一致,导致了设计文档与分析文档很难对应,在图15中表现为分析与设计的鸿沟。实际上并不存在可靠的从分析到设计的转换规则,这样的转换有一定的人为因素,从而往往因理解上的错误而埋下隐患。正是由于这些隐患,使得编程人员经常需要对分析文档和设计文档进行重新认识,以产生自己的理解再进行工作,而不维护文档,这样使得分析文档、设计文档和程序代码之间不能较好地衔接。由于程序与问题域和前面的各个阶段产生的文档不能较好地对应,对于维护阶段发现的问题的每一步回溯都存在着很多理解上的障碍。

image

面向对象开发过程的各个阶段都使用了一致的概念与表示法,而且这些概念与问题域的事物是一致的,这对整个软件生命周期的各种开发和管理活动都具有重要的意义。首先是分析与设计之间不存在鸿沟,从而可减少人员的理解错误并避免文档衔接得不好的问题。从设计到编程,模型与程序的主要成分是严格对应的,这不仅有利于设计与编程的衔接,而且还可以利用工具自动生成程序的框架和(部分)代码。对于测试而言,面向对象的测试工具不但可以依据类、继承和封装等概念与原则提高程序测试的效率与质量,而且可以测试程序与面向对象分析和设计模型不一致的错误。这种一致性也为软件维护提供了从问题域到模型再到程序的良好对应。

4面向对象方法有助于软件的维护与复用
需求是不断变化的(尽管可阶段性地“冻结”),这是因为业务需求、竞争形式、技术发展和社会的规章制度等因素都不断地在发生变化。这就要求系统对变化要有弹性。
在结构化方法中,所有的软件都按功能(可用过程或函数实现)来划分其主要构造块,最终的系统设计往往如图17所示。

image

从图17中能够看出,数据结构与算法是分别组织的,对一处修改,可能会引起连锁反应。这种建模的缺点是模型脆弱,难以适应不可避免的错误修改以及需求变动,以至于系统维护困难。算法和数据的分离,是造成这种状况的根本原因。算法和数据间的可能的紧密耦合,也使得复用难以实现。
在面向对象方法中,把数据和对数据的处理作为一个整体,即对象。该方法以对象及交互模式为中心,如图18所示。

image

通过与结构化方法的比较,能够看出,面向对象方法还具有如下的主要优点:
1)把易变的数据结构和部分算法封装在对象内并加以隐藏,仅供对象自己使用,这保证了对它们的修改并不会影响其他的对象。这样对需求的变化有较强的适应性,有利于维护。对象的接口(供其他对象访问的那些操作)的变化会影响其他的对象,若在设计模型时遵循了一定的原则,这种影响可局限在一定的范围之内。此外,由于将操作与实现的细节进行了分离,这样若接口中的操作仅在实现上发生了变化,也不会影响其他对象。对象本身来自于客观事物,是较少发生变化的。
2)封装性和继承性有利于复用对象。把对象的属性和操作捆绑在一起,提高了对象(作为模块)的内聚性,减少了与其他对象的耦合,这为复用对象提供了可能性和方便性。在继承结构中,特殊类对一般类的继承,本身就是对一般类的属性和操作的复用。
5面向对象方法有助于提高软件的质量和生产率
按照现今的质量观点,不仅仅要在编程后通过测试排除错误,而是要着眼于软件开发过程的每个环节开展质量保证活动,包括分析和设计阶段。系统的高质量不是仅指系统没有错误,而是系统要达到好用、易用、可移植和易维护等,让用户由衷地感到满意。采用OO方法进行软件开发,相对而言更容易做到这些。
有很多数据表明,使用OO技术从分析到编程阶段能大幅度地提高开发效率,在维护阶段提高得就更多。这主要体现在如下几方面:
 OO方法使系统更易于建模与理解。
 需求变化引起的全局性修改较少。
 分析文档、设计文档、源代码对应良好。
 有利于复用。

相关文章
|
6月前
|
设计模式 API 数据安全/隐私保护
探索设计模式的魅力:外观模式简化术-隐藏复杂性,提供简洁接口的设计秘密
外观模式是一种关键的设计模式,旨在通过提供一个简洁的接口来简化复杂子系统的访问。其核心价值在于将复杂的内部实现细节封装起来,仅通过一个统一的外观对象与客户端交互,从而降低了系统的使用难度和耦合度。在软件开发中,外观模式的重要性不言而喻。它不仅能够提高代码的可读性、可维护性和可扩展性,还能促进团队间的协作和沟通。此外,随着业务需求和技术的发展,外观模式能够适应变化,通过修改外观对象来灵活调整客户端与子系统之间的交互方式。总之,外观模式在软件设计中扮演着举足轻重的角色,是构建高效、稳定且易于维护的软件系统的关键
162 1
探索设计模式的魅力:外观模式简化术-隐藏复杂性,提供简洁接口的设计秘密
|
6月前
|
存储 测试技术 BI
软件体系结构 - 系统分析与设计(2.面向对象方法)
【4月更文挑战第6天】软件体系结构 - 系统分析与设计(2)
93 0
《面向对象分析与设计》一3.1 系统边界
本节书摘来自华章出版社《面向对象分析与设计》一书中的第3章,第3.1节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3670 0
|
6月前
|
设计模式 算法
23种设计模式分类
23种设计模式分类
90 0
|
领域建模 uml
面向对象分析与设计
一、面向对象分析与设计 面向对象分析与设计(Object-oriented Analysis and Design,简称OOAD)是一种软件开发方法论,旨在通过将现实世界的问题抽象为对象的集合来进行系统分析和设计。 面向对象分析(Object-oriented Analysis,简称OOA)是指通过识别和描述系统中的对象及其相互关系来分析问题。在面向对象分析中,重点关注的是问题域中的实体、属性、行为以及它们之间的关系。通过对问题域的深入理解,可以识别出系统中的关键对象,并确定它们的属性和行为。 面向对象设计(Object-oriented Design,简称OOD)是指根据面向对象分析的结果,
148 0
|
存储 算法 程序员
25【软件基础】面向对象分析与设计思想总结
`面向对象的本质`:通过对象之间的协作完成功能。
637 0
|
测试技术
浅谈面向对象方法学
浅谈面向对象方法学
413 0
浅谈面向对象方法学
|
XML 数据格式
改善代码设计 —— 处理概括关系(Dealing with Generalization)
  系列博客       1. 改善代码设计 —— 优化函数的构成(Composing Methods)       2. 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)       3.
975 0
设计模式分类与介绍
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
728 0