论文关键词:软件工程 结构化方法 面向对象方法
论文摘要:本文阐述结构化方法和面向对象方法的基本概念与特点和这两种软件开发方法具体的分析设计过程,讨论了各自在不同软件开发中的应用及局限性,提出了在选用面向对象方法开发大型软件系统的同时可结合结构化方法。
一 引言
结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(sa)、结构化设计(sd)和结构化程序设计(sp)等方法。面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称oo方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
二 结构化方法
结构化方法包括基本的结构化方法、复杂的结构化方法idef体系、jackson方法。结构化方法的特点:①把一个复杂过程用多个单个小过程来实现;②用数据流图,可以完成整个分解过程;③结果的唯一性,同一个问题,不同的人分解出来的结果基本是一样的。也即,用结构化方法,基本上是有标准答案的;④较适合初学者学习,一个连续的处理过程。
什么是软件体系结构?一个程序和计算机系统软件体系结构是指系统的一个或多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。体系结构并非可运行软件,它是一种表达,使软件工程师能够:①分析设计在满足规定需求方面的有效性;②在设计变更相对容易的阶段,考虑体系结构可能的选择方案;③降低与软件构造相关的风险。软件体系结构之所以重要的三个关键原因:①软件体系结构的表示有助于对计算机系统开发感兴趣的各方(共利益者)开展交流;②体系结构突出了早期设计决策,这些决策对随后的所有软件工程工作有深远的影响,同时对系统作为一个可运行实体的最后成功有重要作用;③体系结构“构建了一个相对小的,易于理解的模型,该模型描述了系统如何构成以及其构件如何一起工作”。系统的体系结构是一个关于系统形式和结构的综合框架,包括系统构件和构件的整合。软件体系结构必须对系统结构以及数据和程序构件间的相互协作方式进行建模。
三 面向对象方法
面向对象方法包括基本的面向对象方法、rup。
⑴面向对象的概念
属性——说明一个类的数据集合;类——封装数据和过程的抽象,这些是说明某些真实世界中的实体的内容和行为所必需的。换种方式说,类是一组相似对象的概括说明(如:模板、模式、蓝图);对象——某个特定类的实例。对象继承类的属性和操作;操作——也称作方法和服务,表现类的某个行为;子类——超类的特化,子类可以从超类继承属性和操作;超类——也称作基类,是一组相关类的泛化。
⑵面向对象的特点
①基于映射:把现实世界的工作过程或系统,用代码系统中的相对应的元素模拟出来,就完成了软件的设计和开发;②事物→对象;事物的特征→对象的属性;事物的行为→对象的方法;事物之间的信息交换与协同→类方法调用;③由于现实事物的复杂性,为了要更好地完成上面的模拟/映射,需要从多个角度描述系统或过程;④静态关系:多态、继承、聚合、状态转换;⑤动态关系:用例、活动、序列、协作。⑥结果的唯一性,同一个问题,有经验的人和没有经验的人,进行面向对象设计时,结果可能会判别很大;⑦适用范围:设计复杂系统、设计高质量系统、设计与现实世界对应程度比较大的系统。
四 结构化方法、面向对象方法的由来与发展
最初,只有完全一项计算任务的程度,并无所谓编程方法,更无软件工程方法。随着软件复杂度的提高,出现了复杂问题分解为简单问题的一种思路:函数、模块。在20世纪70年代初,软件危机问题出现之后, 随着软件工程思想的确立,从模块化思想逐渐发展出了一个软件开发规范体系:结构化方法。包括结构化的模型图:程序流程图、功能分解图等;结构化的开发建议:高内聚、低耦合;结构化的过程指引:基于瀑布模型的软件生命周期以及相关的工具、语言,这也成为了第一个软件工程方法。结构化方法继续发展,出现了其它新的结构化方法的分支。pad方法:强调程序结构的分解;jackson方法:强调数据结构与软件结构的一致;信息建模分析方法:数据流图、实体关系图。新的设计理念:数据驱动;idef体系:从信息建模分析方法发展出来;模型图;工具;设计规范。而另外一个重要的软件工程方法——面向对象方法,则是沿着另外一条路发展的。60年代为程序仿真而开发的simula语言,为了更好的模拟现实世界以进行仿真,引入了类概念和继承机。70年代末,另一个专用的面向对象语言smalltalk开始进行设计,并在80年提出一个完善版本。但这时只在实验室和科研活动中使用。随着软件复杂程度的进一步提高,低耦合、高内聚的要求进一步提高,促进了面向对象开发思想的发展,低耦合、高内聚是获得较好软件质量的要求,但数据耦合是结构化方法无法解决的问题,要么有大量的全局变量;要么是每个函数都有大量的参数,因此,把数据和代码集成封闭在一起,成了一个合理的要求,由此,出现了面向对象的思想。
结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。结构化语言就是将自然语言加上程序设计语言的控制结构就成了结构化语言,专门用来描述加工逻辑。所以,它既有自然语言灵活性强、表达丰富的特点,又有结构化程序的清晰易读和逻辑严密的特点。 结构化语言的显著特征是代码和数据的分离。这种语言能够把执行某个特殊任务的指令和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一个方法是调用使用局部变量的子程序。通过使用局部变量,我们能够写出对程序其它部分没有副作用的子程序。这使得编写共享代码段的程序变得十分简单。如果开发了一些分离很好的函数,在引用时我们仅需要知道函数做什么,不必知道它如何做。切记:过度使用全局变量会由于意外的副作用而在程序中引入错误。结构化语言比非结构化语言更易于程序设计,用结构化语言编写的程序的清晰性使得它们更易于维护。这已是人们普遍接受的观点了。比如作为结构化语言的c语言主要结构成分是函数c的独立子程序。在c语言中,函数是一种构件(程序块),是完成程序功能的基本构件。函数允许一个程序的诸任务被分别定义和编码,使程序模块化。可以确信,一个好的函数不仅能正确工作且不会对程序的其它部分产生副作用。pascal是世界上第一个结构化语言,曾被认为是计算机专业理想的教学语言,在数据结构等课程中一般用pascal语言举例。access数据库是一种关系型数据库,所有的关系型数据库都是基于结构化查询语言sql的。visual foxpro不但仍然支持标准的xbase结构化程序设计,而且在语言上还有进行了扩展,提供了面向对象程序设计的强大功能和更大灵活性。
随着计算机及其用户越来越复杂,程序员的任务也越来越繁重,所以,与其相关的编写代码的时间也就越来越长了。接下来发生了有趣的事情,程序达到一定大小以后,为其编写代码所需的时间比预期的要长的多。事实是当程序达到一定大小时,人脑就不能跟踪所有的复杂性了。复杂性完全是产生事故的原因,战胜复杂性的方法就是编写一些小的“无错”程序,并把它们连在一起,形成一个大的“无错”程序,这就是面向对象编程的起源。
面向对象的程序设计oop是delphi延生的基础。oop立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进windows编辑所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清析、编写容易。说它是一场革命,不是对象本身而言,而是对它们处理工作的能力而言。对象并不与传统程序设计和编程方法兼容。只是部分面向对象反而会使情形更糟。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多。而delphi是完全面向对象的,这就是使得delphi成为一种触手可及的促进软件重要的开发工具,从而具有强大的吸引力。
面向对象的程序设计方法与编程技术不同于标准的结构化程序设计。程序设计人员在进行面向对象的程序设计时,不再是单纯地从代码的第一行一直编到最后一行,而是考虑如何创建、利用对象来简化程序设计,提高代码的可重用性。对象可是应用程序的一个自包含组件,一方面具有私有的功能,供自己使用;另一方面又提供公用的功能,供其他用户使用。随着面向对象技术成为研究的热点出现了几十种支持软件开发的面向对象方法。其中,booch, coad/yourdon, omt, 和jacobson的方法在面向对象软件开发界得到了广泛的认可。特别值得一提的是统一的建模语言uml,该方法结合了booch, omt, 和jacobson方法的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验的概念和技术。
结束语
面向对象仍将是主流,但结构化方法并不会,相反在某些领域还会有进一步应用。面向对象方法在八十年代已经得到了很大的发展,并且已在计算机科学、信息科学、系统科学和产业界得到了有效的应用,显示出其强大的生命力。可以展望在九十年代内,面向对象方法将会大更深、更广、更高的方向上取得进展。
参考文献
[1]软件工程:实践者的研究方法(原书第6版)/(美)普雷斯曼(pressman,r.s)著;郑人杰等译,—北京:机械工业出版社,2007.1
[2]《delphi 3.0/4.0实用编程技术》方可燕等编著,北京:中国水利水电出版社