人对于世界的认识是不断的在深化的,人对于世界的改造方式也是在不断的改变的,在程序的世界里,并没有一种绝对的对,或者错,也没有绝对的好或者是坏,只要能解决一个问题,那这个方法就是可行的,就是好的,所谓结构化方法,又或者是面向对象的方法,都是人们在对世界的客观理解变化之后,所采取的一些反应,都是对这个社会的不同角度的理解,又或者说是对于解决问题从不同的角度提出来的一些解决办法,并没有根本上的对错之分,也不会说某种方法从此不会再有用武之地,退出历史舞台。
通过从概念上,本质上我们来对比面向对象方法和结构化方法,我们可以更好的理解这两种方法,也可以在以后的工作中更好的运用这两种方法。
结构化方法,是一种直观的用分析的观点来解释世界的方法,当我们遇到一个问题的时候,如果用结构化的方法尝试去解决这个问题,核心思想就是分层次,通过将一个问题不断的分层,用结构化的方法去解析,逐步降低难度直到达到最后解决问题的目的。在分解的过程当中,每个阶段都在人们的控制处理之下。
面向对象方法的解答问题的思路和结构化方法的不一样,总的来说更加关注于宏观和泛型一些,产生的主要原因是人们想要通过解答一个问题达到能同时解决其他同类问题的目的,能做到触类旁通,做到少些无聊代码的目的,让程序员的精力主要集中在调试有效代码上,这样就能提高程序员的工作效率。面向对象通过对于问题所产生的环境的理解,通过建立对象。将问题的参与者对象化,将问题的描述转化为对象的交互之中,这样是和人们认识世界的方式是一致的,譬如我们想象某件事情的时候,如烧菜,我们先想象到的是食材,锅,炉子等等之类的材料,然后才想到的是整个炒菜的过程,我们更加倾向于每个对象的属性,而整个过程则是通过对象之间的交互来理解完成的,相较而言,面向过程的思考方式则是:先准备食材,炒菜等等,一些过程,如果说我们完成了一个炒饭的程序,用结构化的方法来写,那如果再需要再写一个炒菜的程序,改动可能会非常的多,但是如果我们用面向对象的方法来写,那样修改起来会很简单,我们只需要修改饭这个对象的属性,将它改成对应的菜的属性,就基本完成了整个程序改造的工作量,因为两个过程其实差不多,差的只是对象的不一样。通过面向对象的思维方法,的确可以较好的做到通过程序描述这个世界的目的,让编程的难度降低了许多。
就我个人的理解而言,面向对象的方法更加倾向于规范化、统一化,更好的维护管理、移植,而结构化的思想更加的灵活,更加的难以预料,但是解决问题更加精细,也更加具有针对性,很多情况下可能会更加迅速一些。结构化方法产生的时间比较早,而且面向对象方法大有后来者超越前者的势头,然而这并不意味着结构化方法的没落,结构化方法依然有很大的用武之地,譬如算法分析的领域,很多时候我们只需要过程化的描述算法,测试一个算法的效率,如果说用面向对象的那一套很多时候就会显得很是拖沓、繁重,用过程化的方法来写就会显得很精简,很实用。而在工业应用领域,我们更多的是适用面向对象的方法,为了便于管理,为了解决更加复杂的问题,在注重效率的同时更加注重鲁棒性。
面向对象方法是以面向对象思想为指导进行系统开发的一类方法的总称。这类方法以对象为中心,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。面向对象方法也有一定的缺陷型,就是不同的人用面向对象的方法设计出来的软件可能会有天然之别,无论从结构方面来看还是从效率方面,都有很大的差距,原因就是不同的人对于一个问题往往有不同的理解方式,设计出来的对象往往是不同的,优秀的设计人员往往设计出来的架构非常优美,而差劲的设计人员往往也能拿出一款方案,但是结果往往是不尽人意的,而结构化方法设计出来软件可能效率要好一些,虽然不同的人写出来的东西层次也有很大区别。
从掌握难度来说, 面向对象方法比结构化对象方法复杂,难于理解。面象对象方法的内容广, 概念多, 而且很多都是难于理解, 做到精通更加不易。应用面向对象方法, 常常需要一种支持的分析, 设计方法, 如RUP 方法, 敏捷方法等。这些知识抽象枯燥,难于掌握。面象对象方法要经过长期的开发实践才能很好的理解, 掌握。相比之下, 结构化方法知识内容少, 容易上手;
结构化的方法设计出来的产品往往精细度方面有一定的保证,但是结构化方法往往缺少一种对于全局性的把握以及对于未来变更的一些把握,适应性会比较弱。结构化方法主要包括三个方面:结构化分析、结构化设计、结构化程序设计三部分。结构化分析主要包括:对当前的数据进行分析,做出数据流图DFD,然后利用DFD对数据处理等过程进行分析。结构化设计主要包括:将数据流图所示的信息转换成程序结构的设计描述。在这一阶段,首先是通过需求分析的结果,构造出一个具体的系统设计方案,然后在总的设计基础上,确定每个模块的内部结构和算法,生成每个模块的程序流程图。结构化设计的基本原则主要包括:抽象原则、分解原则、模块化原则。
结构化方法是强调过程抽象化和模块化,以过程为中心构造或处理客观世界问题的,它是一种面向过程的开发方法;面向对象方法强调把问题域的要领直接影射到对象及对象之间的接口上,是用符合人们通常的思维方式来处理客观世界的问题。结构化方法把客观世界的问题抽象成计算机可以处理的过程,处理问题的基本单位是能清晰表达过程的模块,用模块的层次结构概括模块或模块间的关系和功能;面向对象方法是用计算机逻辑来模拟客观世界中的物理存在,以对象的集合类作为处理问题的基本单位,尽可能使计算机世界向客观世界靠拢,以使问题的处理更直截了当,面向对象方法是用类的层次结构来体现类之间的继承和发展。
综上所述,软件开发的目标是以最小的代价开发出满足用户需求的软件。为此,根据系统的实际需求,分别针对具体情况选择采用不同的设计方法,可以充分发挥面向对象与结构化方法各自的优势。目前在大多数软件系统的分析设计过程中,这两种方法都兼而有之。笔者以为,开发者在开发实践中, 从实际出发, 考虑执行效率、开发者的技术水平、系统规模、是否为易需求变化的系统等因素, 尽量利用它们各自的优点, 避免他们的缺点。如对于开发一些小型嵌入式实时监控系统或同等稳定小系统, 可用结构化方法;对于开发入门者, 使用结构化方法和面向对象方法相结合;对于大型系统或者需求易变系统,使用面向对象方法。总之,根据实际出发, 选取合适的软件开发方法, 达到最佳的开发效。