【Java】面向?qū)ο蠛兔嫦蜻^程區(qū)別

眾所周知,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ā)方法。

  1. 開始游戲;
  2. 黑子先走;
  3. 繪制畫面;
  4. 判斷輸贏;
  5. 輪到白子;
  6. 繪制畫面;
  7. 判斷輸贏;
  8. 返回第二步;
  9. 輸出最后結(jié)果;

以下是面向?qū)ο蠓治鰡栴}的步驟:

  1. 分析對(duì)象:棋子,棋盤,主體框架類,
  2. 棋盤類的屬性:需要畫一個(gè)棋盤,大小背景線條顏色,都是屬性。棋盤需要有位置分布,
  3. 棋子的屬性,黑棋,白棋,添加到棋盤的方法,
  4. 棋盤的方法:作為一個(gè)容器,需要容納棋子,添加棋子操作,繪制棋盤,當(dāng)添加棋子進(jìn)來的時(shí)候,判斷是否已經(jīng)繪制棋子,繪制棋盤,判定輸贏,輸出最后結(jié)果。
  5. 將棋盤繪制到主體框架類上面,并調(diào)用

那么總結(jié)一下面向?qū)ο蠛兔嫦蜻^程的區(qū)別:

  1. 出發(fā)點(diǎn)不同。面向?qū)ο蠓椒ㄊ欠铣R?guī)思維的方式來處理客觀世界的問題,強(qiáng)調(diào)把問題域的要領(lǐng)直接映射到對(duì)象及對(duì)象之間的接口上。而面向過程方法強(qiáng)調(diào)的是過程的抽象化與模塊化,它是以過程為中心構(gòu)造或者處理客觀世界問題的。
  2. 層次邏輯關(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ī)可以處理的過程。
  3. 數(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)系。
  4. 分析設(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>

  1. 抽象。抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象不打算了解全部問題,而是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面:過程抽象;數(shù)據(jù)抽象。
  2. 繼承。繼承是一種連接類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且派生類可以修改或者增加新的方法使之更適合特殊的需要。
  3. 封裝。封裝是指將客觀事物抽象成類,每個(gè)類對(duì)自身的數(shù)據(jù)和方法實(shí)行保護(hù)。類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。
  4. 多態(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):

  1. 較高的開發(fā)效率。采用面向?qū)ο蟮拈_發(fā)方式可以對(duì)現(xiàn)實(shí)的事物進(jìn)行抽象,可以把現(xiàn)實(shí)的事物直接映射為開發(fā)的對(duì)象,與人類的思維過程相似。同時(shí)面向?qū)ο蟮拈_發(fā)方式可以通過繼承或者組合的方式來實(shí)現(xiàn)代碼的重用,因此可以提高軟件的開發(fā)效率。
  2. 保證軟件代碼健壯。由于其很高的重用性,在開發(fā)過程中重用已有的而且在相關(guān)領(lǐng)域經(jīng)過長(zhǎng)期測(cè)試的代碼,穩(wěn)定性比較高,對(duì)軟件的健壯性起到了促進(jìn)作用。
  3. 保證軟件的高可維護(hù)性。面向?qū)ο箝_發(fā),代碼可讀性好,面向?qū)ο蟮脑O(shè)計(jì)模式使得代碼結(jié)構(gòu)更加清晰明了。同時(shí)針對(duì)面向?qū)ο蟮拈_發(fā)方式,已有非常成熟的設(shè)計(jì)模式,這些設(shè)計(jì)模式可以使程序在面向需求的變更時(shí),只需要修改部分的模塊就可以滿足需求,因此維護(hù)起來非常方便。

喜歡我的文章就點(diǎn)個(gè)贊唄!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評(píng)論 18 399
  • OOA:Object-Oriented Analysis面向?qū)ο蠓治龇椒?是在一個(gè)系統(tǒng)的開發(fā)過程中進(jìn)行了系統(tǒng)業(yè)務(wù)調(diào)...
    楚易楓閱讀 4,056評(píng)論 0 5
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,873評(píng)論 25 709
  • 長(zhǎng)夜漫漫 街上燈火璀璨 三五成群共醉一番 長(zhǎng)安路遠(yuǎn) 故國(guó)舊夢(mèng)難圓 一曲悲歌愁腸寸斷 曲終人散 月下孤影誰伴 琵琶聲...
    十年如夢(mèng)閱讀 222評(píng)論 2 1
  • 今天,女朋友陪我去醫(yī)院檢查,重度抑郁,檢查完之后我又陷入到自己的思維怪圈里,一副痛不欲生的死相。女友壓抑了很久的情...
    尼非采閱讀 675評(píng)論 0 0

友情鏈接更多精彩內(nèi)容