面向過程—面向對象—面向服務


英文及縮寫

  面向過程:procedure oriented programming POP

  面向對象:object oriented programming OOP

      面向服務:Service-Oriented Architecture SOA

面向對象和面向過程的歷程

  面向過程編程采取的是時間換空間的策略,因為在早期計算機配置低,內存小,如何節省內存則成了首要任務,哪怕是運行的時間更長。隨着硬件技術的發展,硬件不再成為瓶頸,相反更好的模擬現實世界、系統的可維護性等問題凸顯出來,於是面向對象設計應運而生。當下:應用在PC機上的一般應用系統,由於不太需要考慮硬件的限制,而系統的可維護性等方面卻要求很高,一般采用面向對象方式;而在內存限制有所要求的嵌入式系統,則大多采用面向過程方式進行設計編程。

定義

  面向過程(POP)是分析解決問題的步驟,然后用函數把這些步驟一步一步的實現,然后在使用的時候一一調用則可。

      面向對象(OOP)是把構成問題的事務分解成各個對象,而建立對象的目的也不是為了完成一個個步驟,而是為了描述某個事物在解決整個問題的過程中所發生的行為。下面舉一例說明面向過程和面向對象編程。

      面向服務(SOA)是一種進行系統開發的新的體系架構。在基於SOA架構的系統中,具體應用程序的功能是由一些松耦合並且具有統一接口定義方式的組件(也就是Service)組合構建起來的,它對迅速變化的業務環境具有良好適應力。
使用面向服務的編程思想,設計者只需要通過集成各種服務即可完成系統的構建。通常情況下,面向服務的架構思想主要用於分布式系統的構建,設計者通過特定的數據格式集成一些服務完成系統構建,相比面向過程和面向對象而言,面向服務的思想是粒度最大的。面向對象,面向過程和面向服務都是當下仍廣泛具有指導意義的編程思想,它們相輔相成,共同幫助我們完成軟件設計任務。

舉例:

首先使用面向過程:

1、開始游戲,

2、黑子先走,

3、繪制畫面,

4、判斷輸贏,

5、輪到白子,

6、繪制畫面,

7、判斷輸贏,

8、返回步驟2,

9、輸出最后結果。

把上面每個步驟用分別的函數來實現,問題就解決了。

 

面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為:

1、黑白雙方,這兩方的行為是一模一樣的,

2、棋盤系統,負責繪制畫面,

3、規則系統,負責判定諸如犯規、輸贏等。

第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。

  面向對象保證了功能的統一型,從而為擴展打下基礎。現在要加入悔棋的功能,如果要改動面向過程的設計,那么從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向對象的話,只用改動棋盤對象就行了,棋盤系統保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的。由此可以看出面向對象更易於擴展。

 

一、面向過程

1.1、含義:

顧名思義面向過程就是一種以過程為中心的編程思想,亦可以叫做“面向記錄”面對過程能做到的就是分析出解決問題所需要的步驟,然后使用函數把步驟一步一步實現,使用的時候一個一個依次解決就好了。

1.2、舉例

比如我們去機房上課,我們開始開機上課是一個事件,下課關機走人又是一個事件,在編程序的時候我們關心的是某一個事件,而不是上課本身,對於面向過程這一種思想來編寫上課程序只要分別對上課下課寫程序就好,不用關心怎么上課等內容。

二、面向對象

2.1、含義

面向對象就是一種以一種事物為中心的編程思想,他讓我們在分析和解決問題時把思維和重點轉向現實中的客體中來,把構成事物分解成各個對象,建立對象是為了描述某個事物在整個解決問題的步驟中的行為,然后通過UML工具理清這些客體之間的聯系,最后用面向對象的語言實現這種客體以及客體之間的聯系。 

2.2、舉例

比如我們來機房上課,上課開機和下課關機是一類事物,上課下課可以有自己的屬性,學生,老師等,有自己的方法,用中文講課,用英文講課等,怎么講課是怎么上課的行為而不是上課的每個事件。

三、面向服務

3.1、含義

面向服務就是描述服務之間的松耦合,松耦合的系統來源於業務,而面向對象的模型是緊耦合,面向服務的體系結構不是一個新鮮事物,是更傳統的面向對象模型的替代模型。 

 

面向服務設計的三大原則是無狀態、單一實例和明確的服務接口。明確的服務接口是強制和必須的,但無狀態和單一實例則不屬於強制性原則,雖然說服務提 供狀態管理會增加服務的復雜性,多實例也一樣會增加服務的復雜性(需要增加同步並發處理等,而且會導致訪問不確定性),但很多情況下這又是無法避免的。

3.2、舉例

播放一個CD,你可以將要播放的CD放入CD機中,CD機將為你播放這張CD,CD機提供了一個CD播放服務。這里的好處就是你可以用不同的CD機去播放同一張CD。他們能提供同樣的CD播放服務,但是服務質量是不同的。
SOA的思想明顯不同於面向對象的編程,面向對象編程強烈的建議你應該將數據與其操作綁定。因此在面向對象編程風格中,每張CD 有它自己的CD播放機,他們之間不能被拆開。這聽起來很奇怪,但是這就是我們建立許多已存軟件系統的方式。

 

四、補充

4.1、面向組件編程(Component-Oriented Programming  COP)

組件不是一個新的概念,Java中的javaBean規范和EJB規范都是典型的組件。組件的特點在於他定義了一種通用的處理方式。例如,JavaBean 擁有內視的特性,這樣就可以通過工具來實現JavaBean的可視化。而EJB規范定義了企業服務中的一些特性,使得EJB容器能夠為符合EJB規范的代碼增添企業計算所需要的能力,例如事務、持久化、池等。
所以,組件比起對象來的進步就在於通用的規范的引入。通用規范往往能夠為組件添加新的能力(就像上面所討論的),但也給組件添加了限制,例如你需要實現EJB的一些接口
COP比OOP更進一步。通常OOP將數據對象組織到實體中。這種方法具有很多優點。但是,OOP有一個大的限制:對象之間的相互依賴關系。去掉這個限制的一個好的想法就是組件。組件和一般對象之間的關鍵區別是組件是可以替代的。

4.2、面向切面編程(Aspect-Oriented Programming  AOP)

將通用需求功能從不相關類之中分離出來;同時,能夠使得很多類共享一個行為,一旦行為發生變化,不必修改很多類,只要修改這個行為就可以。
AOP就是這種實現分散關注的編程方法,它將“關注”封裝在“方面”中。

 

五、總結:

5.1、面向對象是將事物高度抽象化。
5.2、面向過程是一種自頂向下的編程
5.3、面向對象必須先建立抽象模型,之后直接使用模型就行了。
5.4、面向過程(OP)和面向對象(OO)本質的區別在於分析方式的不同,最終導致了編碼方式的不同。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM