结构化方法与面向对象方法浅析
在目前的软件开发领域,结构化方法和面向对象方法是两种比较流行的方法。在过去两年多时间里,我们也对这两种方法进行了学习和实践,下面谈一谈自己对这两种方法的理解。
结构化方法
结构化方法是一种比较传统的软件系统开发方法,主要思想是分析问题确定软件功能,之后将整体功能划分成不同的功能模块,然后将实现之后的模块拼接结合在一起,是一个先分再和的过程。功能分解可以使软件条理清晰,将复杂的问题拆分成相对简单的小问题也便于实现。
结构化方法注重算法和数据,程序过程可以看作是数据经过各个算法逻辑结构被一步步处理之后最终得到问题解的过程。所以在结构化方法中,数据流是核心。面对一个问题,首先应该分析清楚它的数据是怎样流动变换的,然后将这一过程拆分成一个个节点,每个节点对应不同的功能模块,这样便得到一个逻辑模型。数据流图是一个很好的表示这一过程的工具,可以帮助我们清晰地对数据流进行分析。
综上分析,结构化程序设计方法可以概括为以下几个步骤:
●结构化分析:
1.分析当前的情况,做出反映当前物理模型的数据流图;
2.推导出等价的逻辑模型的DFD;
3.设计新的逻辑系统,生成数据字典和基元描述;
4.建立人机接口,提出可供选择的目标系统物理模型的DFD;
●结构化设计:
1.评审和细化数据流图;
2.确定数据流图的类型;
3.把数据流图映射到软件模块结构,设计出模块结构的上层;
4.基于数据流图逐步分解高层模块,设计中下层模块;
5.对模块结构进行优化,得到更为合理的软件结构;
6.描述模块接口。
这学期的编译程序设计就是一个很好的结构化方法的应用例子。首先将整个编译过程划分为词法分析、语法分析、语义分析、中间代码生成、目标代码生成几个阶段,在语法分析过程中,采用递归子程序法对语法的每一个非终结符都编一个分析程序,当根据文法和当时的输入符号预测到要用某个非终结符去匹配输入串时,就调用该非终结符的分析程序。可以看到各个子模块之间分工明确,通过顺序结构、选择结构或循环结构组成一个整体。我们可以简单分析一下数据的流动,输入源程序经过词法分析、语法分析和语义分析之后被翻译成了中间代码,中间代码再经过一遍翻译便得到了目标代码。简单的数据流图如下:
结构化方法是一种面向问题和问题解决过程的方法,这与我们解决问题时的思考方式一致,所以比较容易开发出程序。采取分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而可以降低问题处理的难度。结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序简明清晰。但是结构化方法也存在不足之处,很重要的一点是结构化方法开发的程序不容易维护,因为结构化方法是围绕实现处理功能的过程来构造系统的。然而,用户需求的变化大部分是针对功能的,因此, 对需求变化的适应能力比较弱,造成用结构化方法设计出的系统结构常常是不稳定的。结构化方法定义了目标系统的边界,且开出发的系统结构依赖于对系统边界的定义,因此,很难把系统扩展到新的边界,系统较难修改和扩充。
面向对象方法
面向对象方法是以面向对象思想为指导进行系统开发的方法。它以对象为中心,以类和继承为构造机制来抽象现实世界,并用抽象出来的模型构建相应的软件系统。总的来说,面向对象方法仍旧采用模块化思想,但是与结构化方法面向功能和过程不同的是,它主要着力于对现实世界的抽象并按类对问题进行划分。
面向对象方法的基本思想体现在以下方面:一、一切皆对象,客观世界中的事物都是对象,对象之间存在关系,简单对象构成复杂对象。二、属性和操作相同的对象属于一个类,对象是类的一个实例。三、类之间可以通过继承产生层次结构。四、类具有封装性,把类内部的属性和一些操作隐藏起来,只有公共的操作对外是可见的,对象只可通过消息来请求其他对象的操作或自己的操作。
可见,面向对象方法符合人们对现实世界的认知,面对一个问题,找出组成问题的各个对象,通过对象之间的交互解决问题。这就跟现实中人与人之间解决问题的情景类似。每个对象根据接收到的信息而做出相应的动作,通过传递信息让别的对象产生改变,最终促成问题的解决。采用面向对象方法时,对类的抽象、类的属性与方法的确定以及类之间的交互设计是十分重要的。
综上分析,面向对象方法可以概括为以下几个步骤:
●面向对象方法的分析过程:
1.确定问题域;
2.区分类和对象;
3.区分整体对象以及组成部分,确定类的关系以及结构;
4.定义属性和服务;
5.确定附加的系统约束;
●更加精细的设计过程:
1.改进和完善系统分析的结果;
2.设计交互过程和用户结构;
3.设计任务管理,以及子系统以及任务之间的协调方式;
4.设计全局资源,确定任务或子系统的资源分配;
5.对象设计。
采用面向对象方法分析问题时,UML是一个比较好的建模工具。UML全称统一建模语言或标准建模语言,它有三种基本的构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象,包括结构事物,分组事物,注释事物。关系用来把事物结合在一起,包括依赖、关联、泛化和实现关系。而UML图有活动图、状态图、类图、序列图等分类,可以灵活选取。
面向对象方法最大的优点就是思想与人类习惯的思维方法一致,开发复杂的程序时,基于对象的分析相对于基于功能逻辑上更加清晰,使得使用者和维护人员都容易理解,在软件维护中可维护性也较高,并且易于测试和调试。在需求发生变化时,对软件的局部进行修改时,也不会引起太大的整体变化。
同时面向对象也存在缺点。首先,有些问题难以抽象出合理的类,可能会使问题更加复杂。此外,面向对象方法对开发者抽象事物和把握最初分析方向的要求很高,常常难以控制抽象对象的层次、粒度,甚至抽象出与问题本质面目全非的对象模型,相对于结构化分析方法更加难以掌握。
总结
结构化方法和面向对象方法各有优劣,需要根据实际的情况加以选择。在进行软件开发的时候,认真分析问题,确定采用哪种方法更加适合。两种方法也并不是相互孤立的,有时候也可将两者的思想结合起来。总之寻找最适合的。