子夜将至,窗外零星灯火,偶得一书,不忍释卷。时而皱眉,时而喃喃,时而怔怔,时而抿唇。或言之“得惊世之奇书乎?”余乃示书名,但见一考试指导之书也,庸庸之属何奇哉。乃其珍也在于发人之思,通一窍而醒其身尔。于是伏案疾书,既恨无潘江陆海之才,又恐见笑于大方之家。
actually,上面文绉绉的瞎扯不过是深夜无人解闷时的自我娱乐,看文之诸君(倘若有的话),尽可付之一笑。
今天很难得在同一本书上同时看到“结构化开发方法”和“面向对象的开发方法”这两个词语。顺着作者的行文思路仔细想了几遍,突然有种豁然开朗的感觉。
结构化的开发方法,始创于上个世纪七十年代,迅速克服了软件开发不成体系,没有既定的标准的缺点,成为了商业社会主流的开发方法。随着商业环境愈发复杂,用户对于软件的要求也在不断的提高,并且总是存在着不可控的变化,面向对象的分析方法应运而生,相对于之前的各种方法,面向对象的方法首倡把对象的概念从现实生活中抽象出来,将整个系统看成一个互相影响的对象集。
几乎所有中国式的教科书,在讨论两个方法的优劣、异同的时候都喜欢列清单,
比如:
相同点 and 不同点
优势1、2、3(通常针对某个方面或者某个层面) and 劣势4、5、6
最后用马克思辩证的方法来说,各有优劣嘛,结合起来合理应用嘛,具体情况具体分析嘛。
我在上面这样说出来,并不代表我要批判这种通式,又或者我要在下文中使用什么新的好方法来阐述这个问题,事实上,我也打算这样“通式”一下。
Structure
说到结构化开发方法,那么就不得不说一下冯诺依曼计算机。可以说冯诺依曼先生对推动人类社会发展做出了卓著的贡献。现代计算机绝大多数都是源自冯诺依曼型计算机的模式,在处理事务的时候,将事务不断细化,直至不可分割的最小单位,交由CPU按一定方法排序然后顺序执行。
同样,结构化地开发方法则是将复杂的问题比如业务功能,信息流动等等逐步有序分解到可解决的程度。概括起来就是自顶向下、逐层分解。它必须具备一些假定,问题域是可以被直接从需求中定义的,问题域是有限的,问题通过逐层分解是可以被解决的。这显然有些过于理想化了。
举例来说,如果面对一个十分庞大而且复杂的系统,分析是一个十分浩大的工程,分解层次越多,得到的结论以及需要处理的信息越多,又有更多需要进一步细分的模块,如果被这些枝枝蔓蔓所迷惑,则有可能一叶障目,从而导致项目失败。
而且,往往客户也不知道自己到底需要什么,我现在的系统有什么问题?怎样的新系统能使我满意?而如果在实现没有很好的理解客户真正的需求,一旦开始整个项目,重新定位的成本将是可怕的。
结构化的开发方法对于人与机的界限是分明的,系统是一个过程集,人有人做事的流程与功能,机器有机器接受传递的数据和执行调用的方法。
OO
作为当前炙手可热的方法论明星“面向对象”似乎有着各种优点,比如类的封装与继承可以更好的实现抽象、模块化、内部信息隐藏等等,不同对象之间联系依靠接口来实现。面对问题域,面向对象的方法首先从问题域中抽象出可以理解的一种描述或解释--“类”,然后进行观测,看这个解释所对应的(或者说实例化的)对象是否符合在现实世界的对应事物。显然,比起结构化的方法,面向对象的方法对于开发者抽象事物,把握本质的能力要求要更高一些。
由于采用封装的方式,采用面向对象的方法可以将错误控制可追溯的小范围内。但若是在定义阶段,对于问题理解有误,或者抽象的方式并不正确,之后的类继承程度过高,修改的代价也是巨大的。
题外话
写到这里突然想到一个题外的问题,结构化开发方法有各种开发平台,各种优秀的面向过程的编程语言,面向对象的开发方法也有各种平台与语言,然而目前的计算机并没有脱离冯诺依曼模式,也就是说即使是用面向对象的程序设计语言,在面向对象的开发方法的思路下,最终的执行依旧是顺序执行,然而面向对象的语言又多了各种继承各种接口以及对Runtime的搭建,执行速度显然会比面向过程的语言更慢一些。面向对象未来的发展会怎样呢?
另外一个问题就是,并不是开发项目的每一个类都可以完全从现实世界里抽象出来的,所以有时候有的例子就有些不是依照现实生活经验抽象出来的,而是依照面向对象方法的习惯性思维抽象出来。
总之
两个开发方法并不是对立的,也不是绝对有优有劣的。放在不同的环节中,或者不同的情况下,可以做出不同的选择。比如即使你使用面向对象的开发方法,在分析数据处理信息流向的时候也可以使用结构化的分析方法,因为此二者更具有问题的确定性,按一定步骤层层分解可以更好的把握整体结构以及减少出错机会。总之在合适的时候选择合适的方法,一切方法都只是你完成自己工作,企业实现自己既定的组织目标的工具。
分享到:
相关推荐
3. **结构与表现分离(Structure & Skin Separation)**:结构类(Structure)关注元素的布局和位置,如网格系统;表现类(Skin)关注元素的颜色、字体等视觉效果。两者分离可以使样式更易调整,同时减少样式的耦合...
在这个示例中,`it_structure`是我们之前定义的内表结构,`dy_table`是一个指向动态内表的引用。 #### 三、动态内表的赋值 对动态内表进行赋值涉及到以下几个步骤: 1. 获取指定的字段。 2. 给指定的字段赋值。 ...
tested, this textbook takes an innovative approach to software testing: it defines testing as the process of applying a few well-defined, general-purpose test criteria to a structure or model of the ...
EF creates a data model that matches the structure of your OO code so you can query and write to your database using standard LINQ commands. It will even automatically generate the model from your ...
EF creates a data model that matches the structure of your OO code so you can query and write to your database using standard LINQ commands. It will even automatically generate the model from your ...
*"REFERENCE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL *"---------------------------------------------------------------------- IF CALLCONTROL-STEP <> 'SELONE' AND CALLCONTROL-STEP <> 'SELECT...
《HeadFirst设计模式》是2007年中国电力出版社出版图书。本书作者Eric Freeman;ElElisabeth Freeman是作家、讲师和技术...书中的例子程序都是用Java编写,本书所介绍的内容对于任何OO语言的用户都适用,包括c++和c#。
《HeadFirst设计模式》是2007年中国电力出版社出版图书。本书作者Eric Freeman;ElElisabeth Freeman是作家、讲师和技术...书中的例子程序都是用Java编写,本书所介绍的内容对于任何OO语言的用户都适用,包括c++和c#。
《HeadFirst设计模式》是2007年中国电力出版社出版图书。本书作者Eric Freeman;ElElisabeth Freeman是作家、讲师和技术...书中的例子程序都是用Java编写,本书所介绍的内容对于任何OO语言的用户都适用,包括c++和c#。
最近一直在研究多个GUI之间进行数据传递的问题,经过昨天一天的潜心研究(OO),大概已经掌握了要点, 在此谢过那些帮助我的朋友! 今天练习了一下,一开始,总感觉思路是正确的,但是,结果总说是应用了不...
本书大量采用uML的class Diagram(Static Structure Diagram)。书中的例子程序虽然都是用JaVa编写,但是本书所介绍的内容对于任何00语言的用户都适用,包括c++和c+。每一章都有数目不等的测验题。每章最后有一页要点...
当字典中存在的 oo 码字数量很大时,这将是一个稀疏列表。 这个函数再调用一个functino(insert_image.m) 来在结构中的适当位置插入图像。 最后要注意的是,要使用此功能,必须安装来自 INRIA 组...
ECBA 企业聊天机器人应用 ...The idea is to use protypes for OO to save memory as talked about here: https://veerasundar.com/blog/2014/02/javascript-prototype-methods-vs-object-methods/ No tabs in
本书大量采用uML的class Diagram(Static Structure Diagram)。书中的例子程序都是用JaVa编写,本书所介绍的内容对于任何00语言的用户都适用,包括c++和c孝。 概览 目录 引子 1设计模式入门欢迎来到设计模式世界 ...
《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个...本书大量采用UML的class Diagram(Static Structure Diagram)。书中的例子程序都是用Java编写,本书所介绍的内容对于任何OO语言的用户都适用,包括c++和c#。
2. 选项A、B、C中的"oo"在"food", "cool", "school"中发音相同,而"D"选项"flood"中的"oo"发音不同。 3. 选项A、B、C中的"ow"在"town", "how", "down"中发音相同,而"D"选项"snow"中的"ow"发音不同。 4. 这部分题目...