对于结构化方法和免息那个对象方法进行程序设计的讨论由来已久,两种方法的利弊,使用场景等等前人的研究已经非常的透彻。这里我们从结构化方法和面向对象方法在进行程序设计时的特点来进行研究和讨论。
结构化方法
结构化方法由结构化分析,结构化设计和结构化程序设计三部分有机组合而成。基本四巷在于把一个复杂问题的求解过程分阶段进行,要点在于自顶向下的分解,通过将一个问题逐步分界成多个功能间相互协调依赖的模块,从而逐步完成对最终问题的求解。
结构化方法在进行设计时遵循着一定的原则:
(1)使每个模块尽量只执行一个功能(坚持功能性内聚);
(2)每个模块用过程语句(或函数方式等)调用其他模块;
(3)模块间传送的参数作数据用;
(4)模块间共用的信息(如参数等)尽量少。
通过这些原则的约束,使得各个模块之间的耦合性尽量的降低,而且也方便后续的测试和维护。
可以看出结构化设计的过程中,充分考虑到了程序整体的架构以及数据走向。使用这种开发方式逻辑清晰明了。但是结构化方法的局限性同样非常的明显。在需求分析的过程中,我们对于问题域的认识和描述并不是以问题域中固有的失误作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域。同时,当系统较复杂时,很难检验分析的正确性。因此,结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难。
面向对象方法
面向对象方法把面向对象的思想应用到软件开发过程中,从内部结构上模拟客观世界,提倡人们用在现实生活中的常用思维方法来对软件开发进行认知。基本思想是对象是对现实世界中的客观实体的描述,客观世界是由各种各样的对象组成的,每种对象的都有各自的北部状态和运动规律,不同对象之间的相互作用和联系就构成了不同的系统。
面向对象的开发过程一般为:
1、系统调查和需求分析:对系统将要面临的具体管理问题以及用户对系统开发的需求进行调查研究,即先弄清要干什么的问题。
2、分析问题的性质和求解问题:在繁杂的问题域中抽象地识别出对象以及其行为、结构、属性、方法等。一般称之为面向对象的分析,即OOA。
3、整理问题:对分析的结果作进一步的抽象、归类、整理,并最终以范式的形式将它们确定下来。一般称之为面向对象的设计,即OOD。
4、程序实现:用面向对象的程序设计语言将上一步整理的范式直接映射(即直接用程序设计语言来取代)为应用软件。一般称之为面向对象的程序, 即OOP。
5、识别客观世界中的对象以及行为,分别独立设计出各个对象的实体;分析对象之间的联系和相互所传递的信息,由此构成信息系统的模型;由信息系统模型转换成软件系统的模型,对各个对象进行归并和整理,并确定它们之间的联系;由软件系统模型转换成目标系统。
通过面向对象方法可以很好的对数据以及操作进行封装,并且由于对象之间的固有关系的特点,可以通过继承的方式来实现代码的重用。但是面向对象的缺点也是显而易见的。由于我们总是要通过对象来进行程序的执行,因此进行封装等操作就必然使得效率上打了折扣。同时,由于对象的封装,使我们并不知道在调用一个对象时实际发生了什么,这并不利于维护和测试。而且现实世界中对象之间的关系往往是复杂微妙的,当系统比较复杂时,很难通过面向对象的方法在程序中设计出相同的对象来,而且对象之间的依赖关系使得代码的模块化变得很差。