面向過程理解以及引申

面向過程數據處理和數據分離

面向過程的程序設計是一種自上而下的設計方法,設計者用一個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,都是一種面向對象的思想,只是不斷的封裝,再封裝而已。但封裝有個度,過度封裝,人沒有參與感,體驗不到裏面的細節,人就變成廢物了。

 

市場經濟和科學技術有個共同的特點,就是社會分工和科目細分,都傾向於“分”,面向對象的基礎邏輯就是細分。推行市場經濟和科學技術西方文化也傾向於“分”。而面向過程則相反,強調合,全部自己搞定。東方文化傾向“合”。自己就是宇宙,自己就是太極,西醫強調“分”,病人的健康讓藥和醫生做主,中醫強調“合”,自己的健康自己做主。

 

學科學和學國學就能看出“分”與“合”的不同,科學分成一門門的學科,國學就比較沒有分成那麼多的學科,只要精通了易經和陰陽之道,往往原理上一通百通:建築風水、中醫、武術、琴棋書畫…… 科學培養的是專才,而國學培養的是通才。

 

專才往往隔行如隔山,通才也不是洋洋精通,其實都彼此彼此,沒有誰好誰不好。很多人認爲文理藝都通的通才太難了,其實人人都通文理藝,只是通的程度不同,不是演員,但也看得懂戲,也能演簡單的角色,理工也不是什麼高深莫測,往往是自己的分科思維、所謂的專業思維限制了自己學習和發展的潛能。每個人可以在專業基礎上做相關的拓展,很通的人要想有所成就,還得專下來。通才與專才相對而已。

 

有人喜歡科學的具體細緻,不喜歡國學籠統模糊,而有人認爲太具體太細緻,沒有必要,留點想象空間和餘地纔有意思。

 

淨空大師說:追求科技要有個度,什麼都依賴工具和外在對象了,自己的本能和能力就弱化了,變成紈絝子弟或者千金小姐,環境一變就倒黴了。最面向對象的人是皇帝,吃喝拉撒的生活問題讓太監們搞定,治理國家的問題讓大臣們搞定,自己面向的過程(自己做的事)就很少,除了享受,就是搞搞戰略:用人和決策,要是這一點都面向對象,就徹底是個廢物了,權力很容易被人奪走。

 

電影《阿凡達》裏,工具高度發達、徹底面向對象的人類,最後還是敗給了原始的面向過程的納美人。或許《阿凡達》傳達的是人要回歸自我,與萬物合爲一體,崇拜和依賴工具和技術是沒有未來的。在科技崇拜、爭當經濟動物的今天,《阿凡達》傳達的天人合一與東方文化不謀而合。

發佈了32 篇原創文章 · 獲贊 30 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章