面向过程和面向对象

         

     学习编程这么长时间了,曾记得在刚开始接触VB的时候,就一直才不断的重复着面向对象和面向过程这两个哥们,那么他们到底是何方神圣呢?


     其实如果从哲学上来说的话,这就是我们认识世界的两种方法。


     面向过程认为我们生活的这个世界是由一个一个小的系统组成的。他们之间井然有序,环环相扣,都有着明确的开始和结束。只要我们将这个小的系统的每一步骤和影响这个小的系统运转的相关因素找出来,我们就能够完全模拟这个小的系统。

比如说:我去服装店买衣服。


     那么我们怎样用面向过程来分析这个系统呢?


     可以把这个大的系统拆分为两个子系统—到达商店和买衣服两部分。


     在第一个过程中,我们要考虑一些因素的影响,比如:天气、路途长远、交通状况等。那么我们就可以从这个系统的起点—家,顺藤摸瓜,分析每一个部分,直至到达这个小系统的终点—服装店。然后运用结构化程序的设计方法,利用图形的形式(DFD图)就能描绘这个小的子过程。


    由于面向过程是以数据为中心的,因此数据的是如此的重要,数据的正确性和完备性对于系统的分析成功至关重要。


    例如上述例子的第一个过程,我们需要收集路途的长短、天气状况、公交车收费情况等。因此为了更好地管理这些数据,不至于让系统运行地杂乱无章,人们通过定义了一些主外键等手段来更好地分配他们的关系,就好比一个班里面不同的职务而已(班长、副班长、学习委员、体委等),这样更能够结构化地组织他们,再利用他们之间的关系,利用数据库的三大范式来进一步的保证他们的完备性和一致性。例如,一个班级里面不可能有两个正班长,一个人也最好只有一个职务等。但我们这个世界远没有那么简单,世界的复杂性和变革性导致面向过程变的单薄而无力。


    例如,对于一个大型的商务系统,以前企业老板可能只以产量和利润这两者为中心,而如今顾客满意度、顾客忠诚度、产品的质量、企业的形象等因素随之而来,这样因素的不断累加,并且因素也在不断的变化之中(例如消费者的需求),无法在运用面向过程的分析方法来描述,甚至这个过程是处在变化之中的,消费者的需求发生的变化,导致整个系统结构性的颠覆,因此系统的变动性也导致面向过程的失败。而此时,面向对象的分析方法由此产生。(人类伟大的智慧也在于此,总是在山重水复疑无路的时候,柳暗花明又一村。)


    面向对象方法将世界看成一个一个相互独立的对象,相互之间并没有往来,只是在某种外部的力量推动之下,对象之间才会依据某种规律相互传递信息,而一旦力量消失,对象之间又保持着“静止”过程(就好比在媒婆的牵线搭桥之下,两位从之前的莫不相识,开始了第一次交往。一旦关系破裂,则又回到了最初的从前—陌生人)。


    对象也有对象的独立的一面。正如上述例子中的两个人就可以作为两个对象。比如小伙的高大俊朗就是对象的属性(固有的特质);除了他与姑娘交流之外,很难在了解他不为人知的一方面,这就是对象的封装;进一步的发展,两者结婚生子后,他们的下一代有了两位所有的特质的话就是对象的继承;有时候人也是多面派,见风使陀,根据不同的环境展现自我的一面这就好比对象的接口;如果对象长的相同,但用的地方不同的话这就是多态,螺丝型号相同,但用在不同的汽车上。


    从宏观上说,”井底之蛙“这个词可以用来形容对象,因为它不清楚自己身处的整个系统是怎么回事,只单薄的与自己相互关系亲密的小伙伴有联系,就好比居民楼的人只和相近的邻居有联系。另外他们之间的交往也遵循某种联系和规则,当他们之间按规则联系起来的话,就能达到预期的功能。


    例如一部汽车的生产过程,我们可以把它分解为几个相互独立的对象,包括车盖、地盘、轮胎等、发动机等,对象也可以进一步的抽象,例如发动机可以由汽缸、活塞等零件组成。这样的话,我们来分析流程就简单多了,只要分析对象和其相互关联的对象即可,在按照一定的原则就可以生产出一辆汽车来,减少了信息量。


    面向对象的另一个好处是具有灵活性,比如如果用户的需求变化的话,我们只要更改相应的对象即可,不需要大动干戈,减少了很大一部分的工作量。设想用户需求一辆快速的跑车,我们只需要更换一下合适的发动机等即可,更高层次的对象不需要更改。这就是面向对象的灵活性。


    综上所述,无论是那种方法,只要适合就好,正如那句话所说:不管白猫黑猫,抓住老鼠就是好猫。

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页