在现今的软件设计中,主流的方式便是题目中的两种:结构化方法和面向对象方法,相比较两种方法,我们首先需要确定他们都是什么。
网上的对于两者的定义大都相似,我只在这里谈谈我对于两者的理解:
首先,面向对象方法。
1.面向对象方法的第一奥义便是“对象”。在面向对象方法的世界里,每一个系统都是由无数个对象组成的。对象是将一个复杂系统向下下放到每一个具体实现的有效载体。面向对象方法之中,对象相当于是每一个复杂工程的基本单元,正如一个人的每一个小细胞一样。那么如何将这些对象组织起来呢?在软件工程的课程中,我们所学习的use-case,即用例图就是组织起这些单元的最好方法。
然后,结构化方法。
1.结构化方法,其实也叫面向过程方法,其重点就在于它关注的是整个系统中的“过程”。在每一个过程中,都在描述这个过程所涉及的逻辑和对数据的操作。在结构化方法中,每一个过程才是整个系统的基本单元。那么在结构化方法中又是如何组织起每一个基本单元的呢?相比于用例图,这里所用的就是数据流图。下面就正好给出我们画出的数据流图来举例。
谈完了两者的定义,我们可以看到两者的最本质的区别就是重视对象与重视过程的区别。知道了两者的定义,我们就可以分成几个方面来谈两者的区别联系。
- SDLC
在软件的生命周期中,传统的结果化方法多使用的是传统的软件开发方法,例如瀑布模型等。对于传统软件开发的方法的探讨大家可以参考我的前一篇博客。在这样的方法之中,软件开发整个流程是围绕着整个系统进行的,是一步一步完成的,每次的迭代都要对整个系统走过从计划到维护的整个流程。
在面向对象中,我们可以更好地运用上一次的博客中提到的敏捷开发方法,因为两者无论从方法内容还是思想上都是一致的。这也是很自然的,因为敏捷开发就是在面向对象的编程思想出现之后才开始蓬勃发展的。在结构化方法中,软件开发是自顶向下的,而在面向对象方法中,软件开发是自底向上的。在面向对象方法中,每一个对象都会经历结构化方法中整个程序所走过的流程,而且整个事情过程不断迭代。在我看来,这是软件开发解决大型项目尾大不掉的弊端的一个非常巧妙的方式,并且非常有效。
相比之下,因为在SDLC上的区别,我们可以看到,面向对象方法下,软件可以在设计阶段就开始编程,而在结构化方法之中,软件必须在设计完成之后才能开始实现。随之而来的,我们不得不承认,面向对象方法在设计上需要编程人员与设计人员有良好的合作和很高的水平。
- 可扩展性
在结构化方法中,编程人员在扩展程序时必须全面检查整个程序,涉及大量的编程工作,数据在不同函数之间的流动以及相互影响非常复杂,更改通常是全盘的;面向对象方法中,编程只需要更改有关的对象就可以了。
- 复用性
在复用性上,由于封装、继承、多态思想的存在,只需要不大的更改便可以直接调用类,实现类似的功能。假设我们要实现Component模块,我们可以将这个任务分解为小的组成部分,而窗口、面板等对象都是封装好的,可以直接复用。而对于结构化软件设计来说,很难能够找到直接服务于某个功能的函数,因为功能在编程时并没有被抽象出来.
- 可维护性
在可维护性方面,面向对象的抽象封装使对象信息隐藏在局部。究其原因还是面向对象方法中各个对象的相互独立性。当对象进行修改,或对象自身产生错误的时候,由此带来的影响仅仅局限在对象内部而不会波及其他对象乃至整个系统环境,这极大方便了软件设计、构造和运行过程中的检错、修改。
最后,总结上述的各种区别与联系我们可以得出一些两者显著的优缺点来指导我们在今后的软件开发中对两种方法的选择。
参考文献
[1]软件开发方法——结构化方法与面向对象方法比较 汪寒昊,谢加胜,邢跃 - 《科技信息》, 2011(13):77-78
[2]结构化方法与面向对象方法的比较分析 张莉,裘国永 - 《陕西师范大学学报(自科版)》, 2001, 29(2):29-32