从结构化到面向对象程序设计的模型转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从结构化到面向对象程序设计的模型转换∗
袁胜忠
山东大学威海分校现代教育技术部 威海264209
摘 要:随着软件系统内在复杂性的不断提高,面向对象技术已经取代结构化设计技术成为产业化软件开发的主流技术。本文剖析对象模型与结构化设计瀑布模型队程序设计风格的影响,探讨导致面向对象软件工程失败的主要原因,论证了成功实施面向对象软件工程的关键技术,帮助软件工程师完成从结构化设计实践向面向对象分析和设计实践的进化。关键词:对象模型 瀑布模型 迭代和增量式开发 面向对象软件工程
Model Changing From Structured Design Style to
Object-Oriented Programming
YUAN Shengzhong
Department of Modern Education Technology of Shandong University at Weihai, Weihai,
264209
Abstract: In the past several years, with enhance of inherent complex of various systems, the object-oriented technology have actually become the main stream of industrial software development. Compared with traditional structured design style and the waterfall model, in this paper, we strength the correct understand to object model and discuss the main reasons for the failure of object-oriented development in order to promote the software engineers evolution from structured design to object-oriented analysis and design.
Keywords: object model; waterfall model; iterative and incremental development; object-oriented software engineering
1 引 言
面向对象的技术可以分为:面向对象的程序设计语言,面向对象的数据库技术,面向对象的分析和设计方法。
对应用软件开发组而言,面向对象的分析和设计方法是一种新的方法,它比面向对象的程序设计语言和面向对象的数据库技术更加难以掌握。因为它与开发组熟悉的结构化设计方法是两种完全不同的设计风格,在建立系统时,结构化设计方法利用算法作为基本构件,而面向对象方法利用类和对象作为基本构件。二者要求开发组用不同的思考方法对待问题的分解,而且面向对象设计方法创造出来的软件体系结构大大超出了
∗作者简介:袁胜忠:男,1965年出生,软件工程师,主要研究方向为应用软件开发,网络管理与优化。
结构化设计文化的领域。
在应用软件开发中,面向对象方法至今没有得到应有的使用。正如Rentsch曾经准确地预料到的[1],“我猜想面向对象的编程将出现在20世纪的80年代,就像结构化编程出现在20世纪的70年代一样。每一个人都会喜欢上它。每个制造商都会改进自己的产品以支持它。每个管理者都会在口头上承诺它。每个编程人员都会(以不同方式)实践它。但是没有一个人会知道它是什么”。遗憾的是,在我们的开发过程中,Rentsch的预测至今仍然是正确的。
现在多数程序员都仅在结构化设计原则方面受过正规或非正规的训练,并利用这些结构化设计技术开发和实施了无数有用的软件系统。他们即使认识到只使用算法分解可以应对的复杂性是有限的,必须转向面向对象的分解;他们即使想早日使用面向对象的技术,反复学习了C++或JA V A,但是,他们发现面向对象技术很难应用,面对问题领域的时候,设计一开始就不自觉地转换到结构化程序设计上了。这一切都是因为他们还没有真正掌握面向对象的分析与设计方法,没有深刻认识面向对象的分析和设计方法与结构化设计方法的根本区别。没有正确的方法指导,只学习面向对象的程序设计语言是远不足以成功实施面向对象应用软件开发的。如果把C++和JA V A这样的语言作为传统的面向算法的语言来使用,就不仅不能利用它们所赋予的功能,而且结果比使用更早的语言如C或PASCAL 还差。如果给一个根本不懂电的木匠一把电钻,他有可能把电钻当成锤子来用并在砸弯无数个钉子后认为电钻不如锤子好用。
本文在第二部分分析如何全面理解面向对象分析的模型,在分析的开始阶段,模型提供了一种组织大量信息的机制,这些信息起初使分析者无从下手。此外,模型的规范化和系统化会暴露出系统种的不一致性和缺陷,从而指导后续的开发工作,所以,模型对于正确掌握面向对象的方法是很重要的。在第三部分,作者结合自己的实践经验总结了导致面向对象开发失败的主要原因,用反证法论述了成功实施面向对象软件开发的关键概念和技术,希望帮助那些熟悉结构化设计方法的同行避开这些陷阱,顺利进化到面向对象的分析与设计开发。第四部分是结论,阐述了什么情况下应该采用面向对象技术。
论述中经常用到的概念有[2]:
(1) 面向对象分析(object-oriented analysis,有时称作OOA)。OOA是一种分析方法,它以可在问题域的词汇表中找到的类和对象的观点来审视需求,强调利用面向对象的观点建立真实世界的模型。
(2) 面向对象设计(object-oriented design,有时称作OOD)。OOD是一种设计方法,它包含面向对象分解的过程,以及一种表示方法,用来描写设计中的系统的逻辑模型与物理模型和静态模型与动态模型。正是对面向对象分解的支持使得OOD与结构化设计大不一样:OOD使用类和对象抽象在逻辑上构建系统,而结构化设计使用的却是算法抽象。
上述两个概念的关系是:OOA的结果可以作为OOD开始的模型,接着利用面向对象编程实现。OOD的结果可以作为完整实现一个系统的蓝图。
(3) 面向对象的开发(object-oriented development)。面向对象的开发是一个迭代和增量式的开发过程。其宏观过程为[2]:
·建立核心需求(概念化)
·开发要求的行为的模式(分析)
·创立体系结构(设计)
·演化实现(演化)
·管理后续的演化(维护)
微观过程为[2]:
·识别一个给定的抽象层次上的类和对象