JAVA編程思想的理解

1)POP--面向過程編程(Process-oriented programming ):
   面向過程編程是以功能爲中心來進行思考和組織的一種編程方法,它強調的是系統的數據被加工和處理的過程,在程序設計中主要以函數或者過程爲程序的基本組織方式,系統功能是由一組相關的過程和函數序列構成。面向過程強調的是功能(加工),數據僅僅做爲輸入和輸出存在。這種過程化的思想是一種很樸素和廣泛的思想和方法,人類不少活動都是這種組織模式,好比工廠生產,企業服務等。面向過程以數據的加工處理過程爲主線,忽略了過程的所屬、邊界和環境,混淆了服務功能和自我功能(好比人能夠砍樹,這就是一種服務功能,有輸入也有輸出;它能夠提供給外部,而行走,則是自我功能,沒有輸入也沒有輸出),外部環境和內部組織,以及環境數據和原料性數據之間的區別。從思惟上來說,面向過程更強調細節,忽視了總體性和邊界性,但這與現實世界有很大的出入,由於現實世界中,這種過程都不是孤立存在的,而是從屬於某個對象,所以,面向過程雖然反映了現實世界的而一個方面(功能),但沒法更加形象的模擬或者表示現實世界。

 
2)OOP--面向對象編程(Object Oriented Programming):
   世界是由一個個對象組成的,所以面向對象的思惟方式更加接近現實世界,面向對象編程的組織方式也更加貼近現實世界。面向對象以對象爲中心,將對象的內部組織與外部環境區分開來,將表徵對象的內部屬性數據與外部隔離開來,其行爲與屬性構成一個總體,而系統功能則表現爲一系列對象之間的相互做用的序列,能更加形象的模擬或表達現實世界。在編程組織中,對象的屬性與方法再也不像面向過程那樣分開存放,而是視爲一個總體(程序的最終實現其實仍是分離的,但這僅僅是物理實現上的,不影響將對象的這兩個部分視爲一個總體),所以具備更好的封裝性和安全性(表徵內部的屬性數據須要經過對象的提供的方法來訪問)。面向對象強調的是總體性,所以面向對象與面向過程在不少方面是能夠互補的。同時因爲對象繼承和多態技術的引入,使得面向對象具備更強、更簡潔的對現實世界的表達能力。從而加強了編程的組織性,重用性和靈活性。

   面向對象依然保留着面向過程的特性,面向過程當中的功能變成了對象的方法,加工處理功能變成了對象的服務性方法,而這部分方法依然須要外界的輸入,同時也對外界進行輸出,只是輸入和輸出也變成了對象。在面向對象編程中,大多時候,咱們並不須要關心一個對象對象的方方面面,有些對象在整個系統中都是充當「原料」和「成品」的角色,其自己的行爲並不在咱們關心的範圍,而另外有些對象處於一種加工廠地位,咱們也僅關心這些對象的服務性功能,不須要太多關注對象內部屬性和自我行爲,針對這些對象關注點的不一樣會對對象進行分類,好比前面提到的兩類對象,就是從在系統中所處的角色不一樣而分類,前者叫實體對象,後者稱爲操做對象。
從方法論來說,咱們能夠將面向過程與面向對象看作是事物的兩個方面--局部與總體(注意:局部與總體是相對的),在實際應用中,二者方法都一樣重要。
面向過程和麪向對象是編程方法中最基本的兩種方法,處於編程方法體系的底層。

3)SOA--面向服務架構
    面向服務以服務爲出發點,組織和協調相關的對象來提供目標服務,對外提供必要的參數輸入接口,將服務的結果做爲輸出,而「服務」自己的計算過程和組織則被封裝在一塊兒,對用戶透明。其實面向服務也是以功能(服務)爲中心,但其強調的是功能的總體性,封裝性、自包性,而不是過程性和協做性,總體性指的是服務對外是做爲一總體來體現的;封裝性指的是服務完成的計算和處理過程、自有屬性都不直接暴露給外部,除了經過公共的服務接口進行交互外,用戶沒法也不用知道內部的具體組織和協調的;自包性指的是服務的完成不依賴於服務的調用方,服務系統的自己就能夠完成服務所需的功能;所以面向服務在程序組織上處於更高的層次,是一種粗粒度的組織方法。面向服務與面向過程、面向對象本質上沒有什麼不一樣,區別就在於考慮問題的層面不一樣。面向對象和麪向過程多用於系統內部的組織和管理,而面向服務主要用於系統間的組織和管理。面向服務是更大的對象或者過程。
面向服務設計的三大原則是無狀態、單一實例和明確的服務接口。明確的服務接口是強制和必須的,但無狀態和單一實例則不屬於強制性原則,雖說服務提供狀態管理會增長服務的複雜性,多實例也同樣會增長服務的複雜性(須要增長同步併發處理等,並且會致使訪問不肯定性),但不少狀況下這又是沒法避免的。
如今的面向服務架構,主要用於系統間的交互和集成,有一系列的標準(XML,SOAP,WSDL,XSD,WS-policy,WS-BPEL等)。
 
4)AOP--面向方面.
   面向方面應該屬於面向對象的範疇,從對象組織角度來說,咱們通常採用的分類方法都是使用相似生物學分類的方法,以「繼承」關係爲主線,咱們稱之爲縱向。但事實上,對象之間除了這種縱向分類以外,咱們一樣能夠從橫向的角度去觀察這些對象,這就是面向方面(切面)編程的基本出發點。原來要解決這類問題,咱們通常是採用接口來完成,但這有兩個問題,一是對象設計的時候通常都是縱向思惟,若是這個時候須要就須要考慮這些不一樣類的對象的這些共性,不只會增長設計的難度和複雜性,還會形成類的接口過多而難以維護,二是須要對現有的對象動態增長這種行爲或者責任的時候很是困難。如今不少程序的都是以中間語言存在,執行的時候是解釋執行或者即時編譯執行,這也爲增長這種切面行爲或者責任提供了比較好的切入口。面向方面跟Api hook很相似。面向方面編程的具體一些原理和作法,能夠參考上海尚學堂的博官網資料或博文。
相關文章
相關標籤/搜索