眾所周知,Java是一種面向?qū)ο笮缘恼Z言。那么面向?qū)ο笥质鞘裁茨??和面向過程有什么區(qū)別?下面就和大家分析下面向?qū)ο蠛兔嫦蜻^程的區(qū)別;

面向?qū)ο?/strong>,Obeject Oriented,是一種編程術(shù)語。面向?qū)ο笫钱?dāng)今軟件開發(fā)方法的主流方法之一,他是把數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作放在一起,作為一個(gè)相互依存的整體,就是我們所說的對(duì)象。對(duì)同類對(duì)象抽象出其共性,就是類,類中的大多數(shù)數(shù)據(jù),只能被本類的方法進(jìn)行處理。類通過一個(gè)簡(jiǎn)單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過消息進(jìn)行通信。程序流程由用戶在使用中決定,例如,站在抽象的角度,人具有身高,體重,年齡,血型等一些特征,人會(huì)勞動(dòng),會(huì)行走,會(huì)吃飯等這些方法,人僅僅是一個(gè)抽象的概念,它是不存在的實(shí)體,但是所有具備人這個(gè)群體的屬性與方法的對(duì)象都叫做人,這對(duì)象人是實(shí)際存在的實(shí)體,每個(gè)人都是人這個(gè)群體的一個(gè)對(duì)象。
面向過程,Procedure Oriented,是一種以事件為中心的開發(fā)方法,就是自頂向下順序執(zhí)行,逐步求精,其程序結(jié)構(gòu)是按照功能劃分為若干個(gè)基本模塊,這些模塊形成一個(gè)樹狀結(jié)構(gòu),各模塊之間的關(guān)系也比較簡(jiǎn)單,在功能上相對(duì)獨(dú)立,每一個(gè)模塊內(nèi)部一般都是由順序,選擇和循環(huán)3種基本結(jié)構(gòu)組成,其模塊化實(shí)現(xiàn)的具體方法是使用子程序,而程序流程在寫程序的時(shí)候就已經(jīng)決定了。
以五子棋為例子
面向過程的設(shè)計(jì)思路就是首先分析問題的步驟
把以下每個(gè)步驟用分別的函數(shù)來實(shí)現(xiàn)就是一個(gè)面向過程的開發(fā)方法。
- 開始游戲;
- 黑子先走;
- 繪制畫面;
- 判斷輸贏;
- 輪到白子;
- 繪制畫面;
- 判斷輸贏;
- 返回第二步;
- 輸出最后結(jié)果;
以下是面向?qū)ο蠓治鰡栴}的步驟:
- 分析對(duì)象:棋子,棋盤,主體框架類,
- 棋盤類的屬性:需要畫一個(gè)棋盤,大小背景線條顏色,都是屬性。棋盤需要有位置分布,
- 棋子的屬性,黑棋,白棋,添加到棋盤的方法,
- 棋盤的方法:作為一個(gè)容器,需要容納棋子,添加棋子操作,繪制棋盤,當(dāng)添加棋子進(jìn)來的時(shí)候,判斷是否已經(jīng)繪制棋子,繪制棋盤,判定輸贏,輸出最后結(jié)果。
- 將棋盤繪制到主體框架類上面,并調(diào)用
那么總結(jié)一下面向?qū)ο蠛兔嫦蜻^程的區(qū)別:
- 出發(fā)點(diǎn)不同。面向?qū)ο蠓椒ㄊ欠铣R?guī)思維的方式來處理客觀世界的問題,強(qiáng)調(diào)把問題域的要領(lǐng)直接映射到對(duì)象及對(duì)象之間的接口上。而面向過程方法強(qiáng)調(diào)的是過程的抽象化與模塊化,它是以過程為中心構(gòu)造或者處理客觀世界問題的。
- 層次邏輯關(guān)系不同。面向?qū)ο蠓椒ㄊ怯糜?jì)算機(jī)邏輯來模擬客觀世界中的物理存在,以對(duì)象的集合-類-作為處理問題的基本單位,盡可能地使計(jì)算機(jī)世界向客觀世界靠攏,以使問題的處理更清晰直接,面向?qū)ο蠓椒ㄊ怯妙惖膶哟谓Y(jié)構(gòu)來體現(xiàn)類之間的繼承和發(fā)展。而面向過程方法處理問題的基本單位是能清晰準(zhǔn)確地表達(dá)過程的模塊,用模塊的層次結(jié)構(gòu)概括模塊或模塊間的關(guān)系與功能,把客觀世界的問題抽象成計(jì)算機(jī)可以處理的過程。
- 數(shù)據(jù)處理方式與控制程序的方式不同。面向?qū)ο蠓椒▽?shù)據(jù)與對(duì)應(yīng)的代碼封裝成一個(gè)整體,原則上其他對(duì)象不能直接修改其數(shù)據(jù),即對(duì)象的修改只能由自身的成員函數(shù)完成,控制程序方式上是通過“事件驅(qū)動(dòng)”來激活和運(yùn)行程序。而面向過程的方法是直接通過程序來處理數(shù)據(jù),處理完畢后即可顯示處理結(jié)果,在控制程序方式上按照設(shè)計(jì)調(diào)用或返回程序,不能自由導(dǎo)航,各模塊之間存在控制與被控制、調(diào)用與被調(diào)用的關(guān)系。
- 分析設(shè)計(jì)與編碼轉(zhuǎn)換方式不同。面向?qū)ο蠓椒ㄘ灤┯谲浖芷诘姆治觥⒃O(shè)計(jì)以及編碼中,是一種平滑過程,從分析到設(shè)計(jì)再到編碼是采用一致性的模型表示,即實(shí)現(xiàn)的是一種無縫連接。而面向過程方法強(qiáng)調(diào)分析、設(shè)計(jì)以及編碼之間按照規(guī)則進(jìn)行轉(zhuǎn)換,貫穿于軟件生命周期的分析、設(shè)計(jì)以及編碼中,實(shí)現(xiàn)的是一種有縫的連接。
面向?qū)ο蟮奶卣?/strong>
- 抽象。抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象不打算了解全部問題,而是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面:過程抽象;數(shù)據(jù)抽象。
- 繼承。繼承是一種連接類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且派生類可以修改或者增加新的方法使之更適合特殊的需要。
- 封裝。封裝是指將客觀事物抽象成類,每個(gè)類對(duì)自身的數(shù)據(jù)和方法實(shí)行保護(hù)。類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。
- 多態(tài)。多態(tài)是指允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)。多態(tài)包括參數(shù)化多態(tài)和包含多態(tài)。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享等優(yōu)勢(shì),很好地解決了應(yīng)用程序函數(shù)同名問題。Java中實(shí)現(xiàn)多態(tài)主要是方法的重載和方法的覆蓋。
面向?qū)ο箝_發(fā)方式的優(yōu)點(diǎn):
- 較高的開發(fā)效率。采用面向?qū)ο蟮拈_發(fā)方式可以對(duì)現(xiàn)實(shí)的事物進(jìn)行抽象,可以把現(xiàn)實(shí)的事物直接映射為開發(fā)的對(duì)象,與人類的思維過程相似。同時(shí)面向?qū)ο蟮拈_發(fā)方式可以通過繼承或者組合的方式來實(shí)現(xiàn)代碼的重用,因此可以提高軟件的開發(fā)效率。
- 保證軟件代碼健壯。由于其很高的重用性,在開發(fā)過程中重用已有的而且在相關(guān)領(lǐng)域經(jīng)過長(zhǎng)期測(cè)試的代碼,穩(wěn)定性比較高,對(duì)軟件的健壯性起到了促進(jìn)作用。
- 保證軟件的高可維護(hù)性。面向?qū)ο箝_發(fā),代碼可讀性好,面向?qū)ο蟮脑O(shè)計(jì)模式使得代碼結(jié)構(gòu)更加清晰明了。同時(shí)針對(duì)面向?qū)ο蟮拈_發(fā)方式,已有非常成熟的設(shè)計(jì)模式,這些設(shè)計(jì)模式可以使程序在面向需求的變更時(shí),只需要修改部分的模塊就可以滿足需求,因此維護(hù)起來非常方便。
喜歡我的文章就點(diǎn)個(gè)贊唄!