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

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

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

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

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

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

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

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

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

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

  1. UML 面向对象分析与设计

    面向对象方法以其超越传统方法的技术先进性越来越得到更多的重视,但技术的先进性不能完全代表一种新生事物的最后成功,还要看它是否能得到有效的推广.统一建模语言(UML)的产生为这种推广规定了一致的表示,诸 ...

  2. UML2面向对象分析与设计 -- 面向对象思维(概念、面向对象技术的发展历史、对象和类、面向对象技术的相关原则:抽象 封装 分解 泛化 多态 分层 复用)

    文章目录 1. UML2面向对象分析与设计 学习目标 2. 面向对象思维 2.1 学习目标 2.2 什么是面向对象 2.3 面向对象技术的发展历史 2.4 面向对象技术的优势 2.4.1 便于沟通:在 ...

  3. 软考——软件工程——面向对象分析与设计方法

    目录 1,面向对象的基本概念 2,面向对象分析与设计 2.1,面向对象分析OOA 2.2,面向对象设计OOD 2.3,面向对象编程OOP 面向对象(Object-Oriented)OO. 面向对象的基 ...

  4. 面向对象分析和设计的几个关键步骤_(豁然开朗)《面向对象分析与设计》读书笔记 (4)- 分类...

    目录 分类 正确分类的重要性 分类的困难 分类的增量和迭代本质 确定类和对象 经典方法 && 现代方法 (种) 面向对象分析 (主要识别对象) 关键抽象和机制 确定关键抽象 识别机制 ...

  5. UML和模式应用学习笔记-1(面向对象分析和设计)

    大学时曾经开过<UML和模式应用>的课程,当时没有引起足够的重视,只为了应付考试并没有真正掌握书中的内容:现在工作中经常要用到UML及设计模式,决定每周花点时间重新对书中的内容进行学习:本 ...

  6. 面向对象分析与设计小结

    最近接触了下面向对象分析与设计的概念,虽说书上也许是讲的比较浅显,这里暂且做做学习笔记 当面对一个项目的时候,首先依然是需求分析,得到需求分析报告,接下来在面向对象分析过程中建立用例图,这一步是项目负 ...

  7. OOAD 面向对象分析与设计

    OOAD 面向对象分析与设计2007年06月16日 星期六 下午 04:38OOAD(Object Orient Analysis & Design,面向对象的分析和设计,面向对象分析与设计) ...

  8. 深入浅出面向对象分析与设计

    深入浅出面向对象分析与设计书籍 下载位置:http://pan.baidu.com/s/1o7gmmuu 转载于:https://www.cnblogs.com/wlming/p/5160140.ht ...

  9. 面向对象分析与设计--遛狗玩

    这篇文章焦点并不在于继承以及多态性或者各种炫酷的设计模式上面,也不在与对未来的预测,而在于分析最基本的封装,提取类,组合 人遛狗的最简形式 public class People {public st ...

最新文章

  1. StringBuilder/StringBuffer类
  2. Cadence allegro PCB 设计中,出零件位置图时,如何将丝印自动放在器件中心
  3. 17、HTML单选按钮
  4. PostgreSQL触发器的使用
  5. 2020.5.27 线性规划测试(Lingo实现)
  6. 漫步者蓝牙驱动_2020年知乎最受欢迎的高性价比真无线蓝牙耳机推荐,轻松选择蓝牙耳机(9月最新)!...
  7. C,LINUX,数据结构部分
  8. 第11章 拾遗3:虚拟局域网(VLAN)
  9. 关于ESP8266和ESP8285的对比
  10. GPS导航仪的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. power bi报表html,数据可视化系列:Power BI基于Web数据的报表制作(经典级示例)
  12. 正海转债,寿22转债,东材转债上市价格预测
  13. IDEA 报错 Cannot connect to the Maven process. If the problem persists, check the jdk.
  14. [计算机视觉] AprilTag: A robust and flexible visual fiducial system(2011)论文理解
  15. 惯导运算中的常值国际单位制惯导中常用单位
  16. MapReduce稍微高级编程之PageRank算法的实现
  17. Pyqt5设置背景图片
  18. 【赠书】阿里云天池大赛赛题解析,深度学习篇!
  19. C语言课设图书信息管理系统(大作业)
  20. Vue+i18n多语言动态设置(保姆级案例教程)

热门文章

  1. Cisco协议学习笔记(VTP)
  2. 操作系统双语阅读 - Schedulers调度器2
  3. sql server中数据约束相关的查询
  4. js判断浏览器,包括Edge浏览器
  5. 大公司病?记改一个文字颜色的过程
  6. VC调用Delphi对象接口
  7. 【转】Tomcat总体结构(Tomcat源代码阅读系列之二)
  8. 云计算只是云存储的一个子问题
  9. 什么是Kubernetes?科普文
  10. c# winform窗体边框风格的设计