面向过程理解以及引申

来源:互联网 发布:淘宝我的小蜜是客服么 编辑:程序博客网 时间:2024/04/30 09:59

面向过程数据处理和数据分离

面向过程的程序设计是一种自上而下的设计方法,设计者用一个main函数概括出整个应用程序需要做的事,而main函数由对一系列子函数的调用组成。对于main中的每一个子函数,都又可以再被精炼成更小的函数。重复这个过程,就可以完成一个过程式的设计。其特征是以函数为中心,用函数来作为划分程序的基本单位,数据在过程式设计中往往处于从属的位置。 
  面向过程式设计的优点是易于理解和掌握,这种逐步细化问题的设计方法和大多数人的思维方式比较接近。
  然而,过程式设计对于比较复杂的问题,或是在开发中需求变化比较多的时候,往往显得力不从心。这是因为过程式的设计是自上而下的,这要求设计者在一开始就要对需要解决的问题有一定的了解。在问题比较复杂的时候,要做到这一点会比较困难,而当开发中需求变化的时候,以前对问题的理解也许会变得不再适用。事实上,开发一个系统的过程往往也是一个对系统不断了解和学习的过程,而过程式的设计方法忽略了这一点。
  在面向过程式设计的语言中,一般都既有定义数据的元素,如C语言中的结构,也有定义操作的元素,如C语言中的函数。这样做的结果是数据和操作被分离开,容易导致对一种数据的操作分布在整个程序的各个角落,而一个操作也可能会用到很多种数据,在这种情况下,对数据和操作的任何一部分进行修改都会变得很困难。 
  在面向过程式设计中,main()函数处于一个非常重要的地位。设计者正是在main()函数中,对整个系统进行一个概括的描述,再以此为起点,逐步细化出整个应用程序。然而,这样做的一个后果,是容易将一些较外延和易变化的逻辑(比如用户交互)同程序的核心逻辑混淆在一起。假设我们编写一个图形界面的计算器程序和一个命令行界面的计算器程序,可以想象这两个版本的main()函数会有很大的差异,由此衍生出来的程序很有可能也会迥然不同,而这两个版本的程序本应该有很大部分可以共用才对。
  面向过程式设计还有一个问题就是其程序架构的依赖关系问题。
   main()函数依赖于其子函数,这些子函数又依赖于更小的子函数,而在程序中,越小的函数处理的往往是细节实现,这些具体的实现,又常常变化。这样的结果,就是程序的核心逻辑依赖于外延的细节,程序中本来应该是比较稳定的核心逻辑,也因为依赖于易变化的部分,而变得不稳定起来,一个细节上的小小改动,也有可能在依赖关系上引发一系列变动。可以说这种依赖关系也是过程式设计不能很好处理变化的原因之一,而一个合理的依赖关系,应该是倒过来,由细节实现依赖于核心逻辑才对。

面向对象(数据处理和数据一起)

面向对象是一种自下而上的程序设计方法。不像过程式设计那样一开始就要用main概括出整个程序,面向对象设计往往从问题的一部分着手,一点一点地构建出整个程序。面向对象设计以数据为中心,类作为表现数据的工具,是划分程序的基本单位。而函数在面向对象设计中成为了类的接口。
  面向对象设计自下而上的特性,允许开发者从问题的局部开始,在开发过程中逐步加深对系统的理解。这些新的理解以及开发中遇到的需求变化,都会再作用到系统开发本身,形成一种螺旋式的开发方式。(在这种开发方式中,对于已有的代码,常需要运用Refactoring技术来做代码重构以体现系统的变化。) 
  和函数相比,数据应该是程序中更稳定的部分,比如,一个网上购物程序,无论怎么变化,大概都会处理货物、客户这些数据对象。不过在这里,只有从抽象的角度来看,数据才是稳定的,如果考虑这些数据对象的具体实现,它们甚至比函数还要不稳定,因为在一个数据对象中增减字段在程序开发中是常事。因此,在以数据为中心构建程序的同时,我们需要一种手段来抽象地描述数据,这种手段就是使用函数。在面向对象设计中,类封装了数据,而类的成员函数作为其对外的接口,抽象地描述了类。用类将数据和操作这些数据的函数放在一起,这可以说就是面向对象设计方法的本质。

封装:

  封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部实现,正是由于封装机制,程序在使用某一对象时不需要关心该对象的数据结构细节及实现操作的方法。使用封装能隐藏对象实现细节,使代码更易维护,同时因为不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。

继承:

  继承来源于现实世界,一个最简单的例子就是孩子会具有父母的一些特征,即每个孩子都会继承父亲或者母亲的某些特征,当然这只是最基本的继承关系,现实世界中还存在着更复杂的继承,面向对象之所以使用继承机制主要是用于实现代码的复用多个类所公用的代码部分可以只在一个类中提供,而其他类只需要继承即可。

多态:

  多态与继承纤细紧密,是面向对象编程中另一个突出的特征,所谓的多态是指在继承体系中,所有派生类都从基类继承接口,但由于每个派生类都是独立的实体,因此在接收同一消息的时候,可能会生成不同的响应。多态的作用作为隐藏代码实现细节,使得代码能够模块化;扩展代码模块,实现接口重用。简单来说:一种行为产生多种效果。

 

 

引申

http://www.zhixing123.cn/jiaocheng/23649_3.html

何谓对象?适合当老公或老婆人是对象,非老公老婆就不是对象?面向对象的思想认为:万物皆对象,人、动物植物、静物等都是对象。

对象有名称、有属性、有功能和方法,对象的功能方法还可以实现某个通用的接口,对象太多了,自然要划分归类一下,弄到某个class里,就像生物学把万千的生物:界、门、纲、目、科、属、种,一层套一层,分门别类。

java是面向对象的语言,java的API(应用程序接口)是所有对象实现的接口的集合,面向对象的java也是面向接口的java,面向接口开发,很多底层的工作就不需要自己做了,调用它API中方法实现自己要的功能就可以了。

何谓接口、属性、方法?用插线板为例,插线板是一个对象,它有接通电源的方法和功能,它的属性有电流、电压、外形、线长、价格等。插线板的接口有三孔、两孔,三孔有欧洲标准和本地标准。接上插线板的接口就能调用它接通电源的方法。用插线板接通电源,比原始的用电线直接连接电源方便、安全、省事。方便、安全、省事就是面向对象的价值,代价就是你要掏钱买这个插线板,还要会使用它的API。

 

                           面向对象还有三个特点:封装、继承与多态。

 

封装就是对象实现了这个功能,告诉你调用的接口,你直接用就行了,至于里面具体实现这些功能的细节,对象已经做了封装,你不必要关心。比如洗衣机,接通电源和水源,把要洗的衣服放进去,加点洗衣粉,拨弄按纽,就连洗衣、清衣服、弄干衣服都实现了,洗完了弄出来晒。至于里面怎么洗、怎么清、怎么甩干衣服,知道个原理就行了,具体实现的细节都用个不锈钢外壳给封装了,除非是做专业修理需要知道,使用的人就没有必要了解那么多了。

 

编程的历史,就是一部不断封装的历史,从早期电脑能识别的二进制0101的打孔机编程,到现在的面向对象的高级语言,都是从机器语言到人类语言一层一层的封装:从与电脑打交道的汇编语言到后来的C、java到更加面向对象的ruby、python、scala等,后人在前人的基础上不断的封装,让编程更加简单容易。

 

继承,就是儿子继承老子的属性和方法,全自动洗衣机继承了半自动洗衣机的特性和功能方法。一代更比一代强么,windowsXP继承了windows98和2000的特性和功能方法。

多态,就是同一类对象有多种形态,比如都是全自动洗衣机,有滚筒式的、有波轮式的,有能洗7.5公斤的,有能洗3.5公斤的,形状不同,功能的强弱不同,实现方式不同,就是多态。老虎和猫都属于猫科,但它们的形态、生活环境差异很大,鲸鱼和狗、猪都是哺乳动物,看起来相差十万八千里,但它们是都有哺乳动物的共性。

面向对象的基础是社会分工和专业化,面向对象与市场经济的逻辑一样。社会分工很细,人需要的很多东西直接卖直接用就行了,不用自己亲手做了。专业公司、人都为你封装好了,你需要选择他们,了解他们的长处短处,买过来用或者付费委托外包他们干就可以了。

美国人把IT工业的硬件、软件都做成完全面向对象的体系,世界各国在美国的基础上,做的往往只有做应用。硬件的CPU、主板、内存、硬盘、显示器、外设等的标准和接口,老美都设计实现好了,其他各国只能生产和应用了,软件的操作系统Windows、unix、在unix基础上分支出的linux…… 数据库:Oracle、DB2、SQLsever、mysql…… 编程语言:早期的basic、现在的C、java、PHP、net、html、javascript、XML……

后来者,只能在老美的屁股后面亦步亦趋,用它们的东西做应用:比如QQ、ERP、CRM、OA、GIS、网站,或者做点完善的工作,比如做点中间件什么的。

老外连通讯的标准都占领了:比如CDMA标准由贪婪的高通公司发明并霸占,不断的挥舞什么知识产权的权杖,一面授权收费一面打假,弄的很多运营商和手机生产商都为高通打工。面向对象的思想是不断的分工、委托、外包、协作,不断地推出标准(就是接口)、产品、服务。因此业界有:一流的公司卖标准、二流的公司卖产品、三流的公司卖服务之说。


面向过程是事无巨细都靠自己或自己内部搞定,不外包和委托他人做。从基础的、底层的东西搞起,自到顶层的应用完全自己搞定。自己做,也调用对象,不过对象都是比较原始的低级的对象,经过自己的加工运做,满足自己所需。

 

面向过程重在过程,特点是步骤、方法、控制。第一步到结束做什么?怎么做?如何防止变故,如何控制风险,做成自己想要的结果。

 

面向过程者自给自足,尽管每天很忙很累,但很安全很充实。

 

比如吃:没想过程种地的从播种育苗、插秧、灌溉施肥、除虫除草、收割、晒谷、粮食加工……到成做成米饭、面食和菜,这一系列环节和流程都是自己搞定,品质和卫生自己掌控,吃得放心安心,不用担心在饭馆吃到地沟油、化工佐料、死鱼死虾……

 

本人就生在农村,育种育苗、施肥、插秧、喷药、除虫、除草、挖沟灌溉、割谷、晒谷、收谷我都会。农民的生产线很长,环节很多,辛辛苦苦弄出来的粮食,在销售环节被国家卡死了,农民最忙最辛苦,回报又低了,农村里的年轻人越来越不愿意种地,完全可以理解。

 

市场经济是个产业链经济,原料、研发、生产、销售、服务、回收一个系列流程,像农民一样,做生产的往往把原料采购、技术研发、生产、流通、服务都做,因此做实业的尽管相对稳定,但往往很累。相反做销售环节的商场、连锁店,做资金流通的金融业要轻松很多,而且利润率也高。不管你的产品质量如何好,品牌如何牛,索尼、三星、海尔、长虹等这些生产家电电子产品的公司购牛吧?他们的利润肯定比农民要高,但他们还得仰国美苏宁等销售巨头的鼻息。不过世界在变,互联网和电子商务在改变世界,降低流通领域的垄断。

 

面向过程者强调独立自主,强调安全。在老美做好可全系列的硬件、软件、互联网、移动通信的标准后,中国人只有做应用和加工的分。想独立自主,只能力挺开源软件了,比如Linux、Android…… 象微软的windows、office,苹果IPONE、IPAD和高通CDMA封闭的系统,就只能用用而已。

 

人类历史是一个从面向过程走向面向对象的历史。面向过程太累了,社会一分工,人就渐渐解脱出来了,现代人的吃、穿、住、用、行都已经面向对象了,吃不会从种地做起,直接买粮食和蔬菜回家做,进一步的连做饭这一过程都省了,直接面向对象----到饭馆里解决。穿也是一样,住,城里人不会自己盖房子了,贪婪的开发商已经为你盖好,你就需要付出大量的钞票就可以了,行的交通工具越来越高级了,步行跑步越来越少。

 

其实没有完全的面向过程,只有相对的面向过程,种地用的工具,比如犁、牛、现代的翻土机,它们是对象农民利用的对象,这些往往不是农民自己做的,也是买的,买就是一个面向对象的行为。所以面向过程与面向对象不是完全对立的,只是相对的,有个层级,种地工具相对农民是对象,城里人购买农民的农产品,农产品是对象,政府收城里人的税,纳税人是政府的对象,反过来可以相互为对象,互相利用,对象就是为了被别人利用的,不被别人利用,说明这个对象的功能很弱,方法很差,没有利用价值,人不也一样吗?员工是老板的对象,老板也是员工的对象。

面向对象与面向过程是一体的两面,是对立统一之“道”。

动物是面向过程的,原始人是面向过程的,落后未开发地区的人是面向过程的,表面看很落后,但众多的过程里苦中有乐,因为整天在忙,生活过的很充实,身体比较健康。

面向对象的把编程OOP,到面向方面编程的AOP,还有什么面向服务的架构SOA,都是一种面向对象的思想,只是不断的封装,再封装而已。但封装有个度,过度封装,人没有参与感,体验不到里面的细节,人就变成废物了。

 

市场经济和科学技术有个共同的特点,就是社会分工和科目细分,都倾向于“分”,面向对象的基础逻辑就是细分。推行市场经济和科学技术西方文化也倾向于“分”。而面向过程则相反,强调合,全部自己搞定。东方文化倾向“合”。自己就是宇宙,自己就是太极,西医强调“分”,病人的健康让药和医生做主,中医强调“合”,自己的健康自己做主。

 

学科学和学国学就能看出“分”与“合”的不同,科学分成一门门的学科,国学就比较没有分成那么多的学科,只要精通了易经和阴阳之道,往往原理上一通百通:建筑风水、中医、武术、琴棋书画…… 科学培养的是专才,而国学培养的是通才。

 

专才往往隔行如隔山,通才也不是洋洋精通,其实都彼此彼此,没有谁好谁不好。很多人认为文理艺都通的通才太难了,其实人人都通文理艺,只是通的程度不同,不是演员,但也看得懂戏,也能演简单的角色,理工也不是什么高深莫测,往往是自己的分科思维、所谓的专业思维限制了自己学习和发展的潜能。每个人可以在专业基础上做相关的拓展,很通的人要想有所成就,还得专下来。通才与专才相对而已。

 

有人喜欢科学的具体细致,不喜欢国学笼统模糊,而有人认为太具体太细致,没有必要,留点想象空间和余地才有意思。

 

净空大师说:追求科技要有个度,什么都依赖工具和外在对象了,自己的本能和能力就弱化了,变成纨绔子弟或者千金小姐,环境一变就倒霉了。最面向对象的人是皇帝,吃喝拉撒的生活问题让太监们搞定,治理国家的问题让大臣们搞定,自己面向的过程(自己做的事)就很少,除了享受,就是搞搞战略:用人和决策,要是这一点都面向对象,就彻底是个废物了,权力很容易被人夺走。

 

电影《阿凡达》里,工具高度发达、彻底面向对象的人类,最后还是败给了原始的面向过程的纳美人。或许《阿凡达》传达的是人要回归自我,与万物合为一体,崇拜和依赖工具和技术是没有未来的。在科技崇拜、争当经济动物的今天,《阿凡达》传达的天人合一与东方文化不谋而合。

原创粉丝点击