1. 程式人生 > >Java面向物件和麵向過程有什麼區別?網友:傻傻分不清楚……

Java面向物件和麵向過程有什麼區別?網友:傻傻分不清楚……

面向物件,Obeject Oriented,是一種程式設計術語。面向物件是當今軟體開發方法的主流方法之一,他是把資料以及對資料的操作放在一起,作為一個相互依存的整體,就是我們所說的物件。對同類物件抽象出其共性,就是類,類中的大多數資料,只能被本類的方法進行處理。類通過一個簡單的外部介面與外界發生關係,物件與物件之間通過訊息進行通訊。程式流程由使用者在使用中決定,例如,站在抽象的角度,人具有身高,體重,年齡,血型等一些特徵,人會勞動,會行走,會吃飯等這些方法,人僅僅是一個抽象的概念,它是不存在的實體,但是所有具備人這個群體的屬性與方法的物件都叫做人,這物件人是實際存在的實體,每個人都是人這個群體的一個物件。

面向過程,Procedure Oriented,是一種以事件為中心的開發方法,就是自頂向下順序執行,逐步求精,其程式結構是按照功能劃分為若干個基本模組,這些模組形成一個樹狀結構,各模組之間的關係也比較簡單,在功能上相對獨立,每一個模組內部一般都是由順序,選擇和迴圈3種基本結構組成,其模組化實現的具體方法是使用子程式,而程式流程在寫程式的時候就已經決定了。

以五子棋為例子

面向過程的設計思路就是首先分析問題的步驟

把以下每個步驟用分別的函式來實現就是一個面向過程的開發方法。

開始遊戲;

黑子先走;

繪製畫面;

判斷輸贏;

輪到白子;

繪製畫面;

判斷輸贏;

返回第二步;

輸出最後結果;

以下是面向物件分析問題的步驟:

分析物件:棋子,棋盤,主體框架類,

棋盤類的屬性:需要畫一個棋盤,大小背景線條顏色,都是屬性。棋盤需要有位置分佈,

棋子的屬性,黑棋,白棋,新增到棋盤的方法,

棋盤的方法:作為一個容器,需要容納棋子,新增棋子操作,繪製棋盤,當新增棋子進來的時候,判斷是否已經繪製棋子,繪製棋盤,判定輸贏,輸出最後結果。

將棋盤繪製到主體框架類上面,並呼叫

那麼總結一下面向物件和麵向過程的區別:

出發點不同。面向物件方法是符合常規思維的方式來處理客觀世界的問題,強調把問題域的要領直接對映到物件及物件之間的介面上。而面向過程方法強調的是過程的抽象化與模組化,它是以過程為中心構造或者處理客觀世界問題的。

層次邏輯關係不同。面向物件方法是用計算機邏輯來模擬客觀世界中的物理存在,以物件的集合-類-作為處理問題的基本單位,儘可能地使計算機世界向客觀世界靠攏,以使問題的處理更清晰直接,面向物件方法是用類的層次結構來體現類之間的繼承和發展。而面向過程方法處理問題的基本單位是能清晰準確地表達過程的模組,用模組的層次結構概括模組或模組間的關係與功能,把客觀世界的問題抽象成計算機可以處理的過程。

資料處理方式與控制程式的方式不同。面向物件方法將資料與對應的程式碼封裝成一個整體,原則上其他物件不能直接修改其資料,即物件的修改只能由自身的成員函式完成,控制程式方式上是通過“事件驅動”來啟用和執行程式。而面向過程的方法是直接通過程式來處理資料,處理完畢後即可顯示處理結果,在控制程式方式上按照設計呼叫或返回程式,不能自由導航,各模組之間存在控制與被控制、呼叫與被呼叫的關係。

分析設計與編碼轉換方式不同。面向物件方法貫穿於軟體生命週期的分析、設計以及編碼中,是一種平滑過程,從分析到設計再到編碼是採用一致性的模型表示,即實現的是一種無縫連線。而面向過程方法強調分析、設計以及編碼之間按照規則進行轉換,貫穿於軟體生命週期的分析、設計以及編碼中,實現的是一種有縫的連線。

面向物件的特徵

抽象。抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象不打算了解全部問題,而是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面:過程抽象;資料抽象。

繼承。繼承是一種連線類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且派生類可以修改或者增加新的方法使之更適合特殊的需要。

封裝。封裝是指將客觀事物抽象成類,每個類對自身的資料和方法實行保護。類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

多型。多型是指允許不同類的物件對同一訊息做出響應。多型包括引數化多型和包含多型。多型性語言具有靈活、抽象、行為共享、程式碼共享等優勢,很好地解決了應用程式函式同名問題。Java中實現多型主要是方法的過載和方法的覆蓋。

面向物件開發方式的優點:

較高的開發效率。採用面向物件的開發方式可以對現實的事物進行抽象,可以把現實的事物直接對映為開發的物件,與人類的思維過程相似。同時面向物件的開發方式可以通過繼承或者組合的方式來實現程式碼的重用,因此可以提高軟體的開發效率。

保證軟體程式碼健壯。由於其很高的重用性,在開發過程中重用已有的而且在相關領域經過長期測試的程式碼,穩定性比較高,對軟體的健壯性起到了促進作用。

保證軟體的高可維護性。面向物件開發,程式碼可讀性好,面向物件的設計模式使得程式碼結構更加清晰明瞭。同時針對面向物件的開發方式,已有非常成熟的設計模式,這些設計模式可以使程式在面向需求的變更時,只需要修改部分的模組就可以滿足需求,因此維護起來非常方便。

為了讓學習變得輕鬆、高效,今天給大家免費分享一套Java入門教學資源。幫助大家在成為Java架構師的道路上披荊斬棘。需要入門的資料歡迎加入學習交流群:9285,05736