摘要:结构化方法与面向对象方法在软件开发过程中的比较,从系统分析、系统设计和编程技术等方面的分析,指出没有绝对一种软件开发方法称得上是“最好”的,开发人员应该根据所要开发的软件的特点,选择最适宜的开发方法。
关键词:软件工程;结构化方法;面向对象方法;软件开发;程序设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c
Comparison of Structurized Methodology and Object-oriented Methodology in Software Development
LUAN Yong-hong
(Information of Engineering Department,Suzhou Institute of Industrial Technology,Suzhou 215104,China)
Abstract:The structure method and the object-oriented method develop comparison in process in the software,from the aspect analysis such as systems analysis, system design and programming technology, pointed out not absolutely one software method of exploitation called on " best", the personnel who develops ought to choose the most proper exploitation method according to what be wanted the development software characteristic.
Key words:Software Engineering;Structured Methods;Object-Oriented Methods;Software Development;Program Design
1 引言
随着信息技术的发展,软件作为一种信息技术的主要载体日益渗透到社会政治、军事、经济、文化乃至生活的各个方面和各个层次。软件无所不在,其需求愈来愈多,复杂度愈来愈高,可用性要求愈来愈强。如何高效地开发和生产可靠、可信的软件,是软件领域一直必须面对的问题。软件技术跟不上硬件技术发展而造成的诸多问题被称作“软件危机”(Software Crisis)。为了解决软件危机,1968年北大西洋公约组织(NATO)的计算机科学家在德国召开的国际学术会议上第一次提出了“软件工程”的概念,希望通过系统化、规范化、数量化等工程原则和方法来实现复杂软件系统的开发和维护。[1]当前主要采用的软件工程方法有结构化方法学和面向对象方法学。
2 结构化方法学与面向对象方法学的含义
结构化方法学(Structurized Methodology)是一种围绕功能来组织软件系统的软件开发方法。它采用自顶向下的设计方法,将问题模型反映为过程结构模型,实际上就是通过建立功能模型,将复杂的过程简单地按功能分层从而达到解决问题的目的。
面向对象方法学(Object-Oriented Methodology)是一种围绕真实世界中的事物来组织软件系统的全新方法。它的出发点和基本原则,是尽可能模拟人类习惯的思维方式,也就是描述问题的问题域与实现解法的求解域在结构上尽可能一致。
3 结构化软件开发方法与面向对象的软件开发方法的比较
软件开发方法(Software Development Method)是指软件开发过程所遵循的办法和步骤。软件开发活动的目的就是得到一个运行的软件系统及其支持的软件文档,并且能满足有关的软件质量要求。目前最常采用的软件开发方法有结构化方法和面向对象方法。
软件开发是按需求规格说明的要求,由抽象到具体,逐步生成软件的过程。因而要求系统设计方法、编程方法及选用的程序设计语言应该尽可能匹配。如采用结构化的分析方法(StructuredAnalysis,简称SA)就应该采用结构化的系统设计(Structured Design,简称SD)和结构化的编程技术(Structured Programming,简称SP),选用支持结构化编程的Pascal语言、C语言等。若采用面向对象的分析方法(Object-Oriented Analysis ,简称OOA)、面向对象的设计方法(Object-Oriented Design, 简称OOD),就应该选用面向对象的编程技术(Object-Oriented Programming,简称OOP)和支持面向对象的编程语言,如Smalltalk,C++、Java等。
3.1 结构化软件开发方法
结构化软件方法是结构化方法和信息建模方法,这两种方法分别从功能和信息(数据)的角度对系统进行分析和设计。结构化软件开发方法的基本思想是:首先确定输入、输出数据结构,使用自顶向下的设计方法,列出需要解决的最主要的子问题,然后通过解决每一个子问题来解决初始的问题。结构化软件开发方法的本质是功能的分解,将系统按功能分解为若干模块,每个模块是实现系统某一功能的程序单元,每一个模块都具有输入、输出和过程等基本特性。输入和输出分别是模块需要的和产生的数据,过程则是对模块具体处理细节的描述和表示。数据则在功能模块间流动。[5] 功能是一种主动的行为,数据是受功能影响的信息载体。因而它的编程模型被理解为作用于数据的代码。
从编程技术和程序设计的角度来说,结构化分析方法在进行程序设计时,描述任何实体的操作序列只需采用“顺序、选择、重复”三种基本控制结构,整个程序划分为若干个模块。每个模块要具有一种以上的特定功能,并且每个模块只能有一个入口和一个出口。这种程序设计采用自顶向下,逐步细分的方法展开,在一定的数据结构之下来设计对应的算法,然后分别实现数据结构设计和算法设计,因此,N.Wirth总结出:程序=算法+数据结构的形式。 [3][4]结构化程序设计中,问题被看作一系列需要完成的任务,函数(function)是用于完成这些任务的。所以说,最终解决问题的焦点集中于函数,而数据则在功能模块间流动。
如图1所示。
图1 结构化方法的应用
3.2 面向对象的建模技术
OMT(Object-Oriented Modeling Technique)是由James Rumbaugh等人提出的。OMT是一种面向对象的软件开发方法,以对象建模为基础,从对象的角度对系统进行分析和设计。 面向对象的软件开发方法基本思想是:采用了自底向上的归纳、自顶向下的分解的方法,第一步是从问题的陈述入手,构造系统模型。系统模型建立后的工作就是按服务(Service)来分解。第二步是将对问题的描述建立成三种模型,这三种模型分别是:对象模型、动态模型和功能模型。对象模型是通过描述系统中的对象、对象间的关系和每个对象类的属性和操作来表示系统的静态数据结构。动态模型描述了系统中与时间和变化有关的内容,它说明何时发生。功能模型描述系统的数据转换。三种模型都是必须的[2][5]。但是,对象模型都是最重要、最基本、最核心的。每个对象类由数据结构(属性)和操作(行为)组成,有关的数据结构(包括输入、输出数据结构)都成了软件开发的依据。
从编程技术和程序设计的角度来说,采用面向对象的分析方法,是将问题分解为一系列实体——这些实体被称为对象(object),然后围绕这些实体建立数据(对象)和针对该对象而定义的接口(interface)来组织描述程序。正是由于这种方法是从对象的角度对系统进行分析和设计。对象就是对现实世界实体的正确抽象,而具有相同或相似性质的对象的抽象就是类。对象包含了数据和操作,实现了数据和操作的结合,使数据和操作封装于对象的统一体中。每个类由属性和操作组成。对象彼此之间仅能通过发送消息互相联系。类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体[2],如图2所示。
图2 对象、类和信息传递
面向对象方法的编程技术重点是说明类,而不是定义函数。利用类(class)来描述对象的特性,每个类都有描述对象属性的数据和操作数据的一组方法。[5]面向对象程序设计主要是类的设计,程序代码主要是类的描述,而构成系统核心的对象在程序运行时才创建。对象之间的相互作用称为一个对象向另一个对象发送消息。
3.3 两种软件开发方法的比较
面向对象的软件开发方法与结构化软件开发方法的最基本的区别:表现在它们对功能和数据的不同处理上。
结构化软件开发方法是围绕实现处理功能的“过程”来构造系统的。它几乎都是将功能和数据分开考虑的。它遵循面向过程的问题求解方法,是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决流程。数据结构和算法是它的核心所在。用户需求的变化大部分是针对功能的,在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要,可能会引起软件成本增长失控、软件质量得不到保证等一系列严重问题。因此,用结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差。
面向对象软件开发方法则是在解空间引入了“对象”的概念,逼真地描述解空间的客观实体,从而使客观描述符合人类的思维习惯。通过识别问题域的对象,分析它们之间的关系,建立对象模型、动态模型和功能模型,利用面向对象观点建立求解域模型的过程。它的核心概念主要是对象、类、继承和消息。面向对象编程技术的特点是数据控制代码的访问,其中类的继承和多态性是处理复杂软件的有效技术。运用这种方法开发出来的系统稳定性、可重用性及可维护性好。
4 结束语
面向对象方法在软件开发方面符合人们习惯的思维方式,系统的稳定性比较好,软件的可维护性与可重用性比较好。但面向对象方法的基本概念都很抽象,可供软件开发人员使用的类种类繁多,结构复杂。如果没有结构化程序设计的编程思想,对于直接学习面向对象程序设计的初学者,在代码编程部分涉及结构化编程思想时,反而困难会很大。事实上,这两种方法在并不是相互排斥的,相反,它们是相互促进相互补充的。不论采用何种技术方法开发软件,都必须完成一系列性质各异的任务,这些必须完成的任务要素是:确定“做什么”,确定“怎样做”,如何“实现和完善”。 因此,没有绝对的一种软件开发方法称得上是“最好”的,软件开发人员应该根据所要开发的软件的特点,选择最适宜的开发方法。
参考文献:
[1]张海藩.软件工程导论[M].3版.清华大学出版社,1998.
[2]施霞萍,王瑾德.2版.Java程序设计教程[M].机械工业出版社,2006.
[3]钱能.C++程序设计教程[M].2版.清华大学出版社,2005.
[4]Jeri R Hanly,Elliot B Koffman.问题求解与程序设计 C语言版.朱剑平,译.4版.北京:清华大学出版社,2007.
[5]文斌,刘长青.田原软件工程与软件文档写作[M].清华大学出版社,北京交通大学出版社,2005.
收稿日期:2008-04-02
作者简介:栾咏红(1971-),女,山东青岛人,讲师,研究方向:计算机软件。