面向?qū)ο?Object Oriented)是軟件開(kāi)發(fā)方法,一種編程范式。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā),擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。面向?qū)ο笫且环N對(duì)現(xiàn)實(shí)世界理解和抽象的方法,是計(jì)算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物。
面向?qū)ο笫窍鄬?duì)于面向過(guò)程來(lái)講的,面向?qū)ο蠓椒ǎ严嚓P(guān)的數(shù)據(jù)和方法組織為一個(gè)整體來(lái)看待,從更高的層次來(lái)進(jìn)行系統(tǒng)建模,更貼近事物的自然運(yùn)行模式
面向?qū)ο?Object Oriented)是軟件開(kāi)發(fā)方法,一種編程范式。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā),擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。面向?qū)ο笫且环N對(duì)現(xiàn)實(shí)世界理解和抽象的方法,是計(jì)算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物。
面向?qū)ο蟮姆椒ㄖ饕前咽挛锝o對(duì)象化,包括其屬性和行為。面向?qū)ο缶幊谈N近實(shí)際生活的思想??傮w來(lái)說(shuō)面向?qū)ο蟮牡讓舆€是面向過(guò)程,面向過(guò)程抽象成類,然后封裝,方便使用就是面向?qū)ο螅ㄈf(wàn)物皆對(duì)象)。
面向?qū)ο蟮乃拇筇匦?/p>
1、抽象
忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的東西,專注的注意與當(dāng)前目標(biāo)有關(guān)的方面。(就是把現(xiàn)實(shí)世界中的某一類東西,提取出來(lái),用程序代碼表示,抽象出來(lái)的一般叫做類或者接口)。抽象并不打算了解全部問(wèn)題,而是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一個(gè)數(shù)據(jù)抽象,而是過(guò)程抽象。
數(shù)據(jù)抽象 -->表示世界中一類事物的特征,就是對(duì)象的屬性。比如鳥(niǎo)有翅膀,羽毛等(類的屬性)
過(guò)程抽象 -->表示世界中一類事物的行為,就是對(duì)象的行為。比如鳥(niǎo)會(huì)飛,會(huì)叫(類的方法)
2、封裝
封裝是面向?qū)ο蟮奶卣髦唬菍?duì)象和類概念的主要特性。封裝就是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。如私有變量,用set,get方法獲取。
封裝保證了模塊具有較好的獨(dú)立性,使得程序維護(hù)修改較為容易。對(duì)應(yīng)用程序的修改僅限于類的內(nèi)部,因而可以將應(yīng)用程序修改帶來(lái)的影響減少到最低限度。
3、繼承
一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,提供一種明確表達(dá)共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過(guò)程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),原始類稱為新類的基類(父類)。派生類可以從它的父類哪里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。因此可以說(shuō),繼承為了重用父類代碼,同時(shí)為實(shí)現(xiàn)多態(tài)性作準(zhǔn)備。
4、多態(tài)
多態(tài)是指允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活/抽象/行為共享/代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題??偟膩?lái)說(shuō),方法的重寫,重載與動(dòng)態(tài)鏈接構(gòu)成多態(tài)性。java引入多態(tài)的概念原因之一就是彌補(bǔ)類的單繼承帶來(lái)的功能不足。
動(dòng)態(tài)鏈接 -->對(duì)于父類中定義的方法,如果子類中重寫了該方法,那么父類類型的引用將調(diào)用子類中的這個(gè)方法,這就是動(dòng)態(tài)鏈接。
面向?qū)ο蠛兔嫦蜻^(guò)程是兩種不同的編程范式。它們?cè)诮鉀Q問(wèn)題的方式、關(guān)注的焦點(diǎn)、性能等方面有所區(qū)別。以下是它們的主要區(qū)別:
1. 關(guān)注點(diǎn)不同:
面向過(guò)程:關(guān)注解決問(wèn)題的步驟和過(guò)程。它將問(wèn)題分解為一系列步驟,然后用函數(shù)來(lái)實(shí)現(xiàn)這些步驟,最后依次調(diào)用這些函數(shù)來(lái)解決問(wèn)題。
面向?qū)ο螅宏P(guān)注解決問(wèn)題所需的對(duì)象。它將問(wèn)題事務(wù)分解成各個(gè)對(duì)象,每個(gè)對(duì)象具有相應(yīng)的行為。通過(guò)依次調(diào)用對(duì)象的行為來(lái)解決問(wèn)題。
2. 分析和設(shè)計(jì)方法不同:
面向過(guò)程:基于算法和函數(shù)過(guò)程進(jìn)行設(shè)計(jì),通常使用數(shù)據(jù)流圖、偽代碼等工具。
面向?qū)ο螅夯趯?duì)象和類進(jìn)行設(shè)計(jì),通常使用UML建模、Rose、Visio等工具。
3. 性能差異:
面向過(guò)程:性能相對(duì)較高。因?yàn)槊嫦驅(qū)ο笮枰獙?shí)例化對(duì)象,開(kāi)銷較大,比較消耗資源。面向過(guò)程適用于對(duì)性能要求較高的場(chǎng)景,如單片機(jī)、嵌入式開(kāi)發(fā)、Linux系統(tǒng)等。
面向?qū)ο螅盒阅芟鄬?duì)較低。但面向?qū)ο缶哂蟹庋b、繼承、多態(tài)等特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使程序更易于維護(hù)、使用和擴(kuò)展。
4. 代碼可維護(hù)性、可復(fù)用性和可擴(kuò)展性:
面向過(guò)程:可維護(hù)性、可復(fù)用性和可擴(kuò)展性較差。面向過(guò)程的程序通常是按照特定順序從頭到尾實(shí)現(xiàn),各個(gè)部分之間耦合較高,難以修改和維護(hù)。
面向?qū)ο螅壕哂休^好的可維護(hù)性、可復(fù)用性和可擴(kuò)展性。面向?qū)ο蟮姆庋b、繼承和多態(tài)等特性使得程序更靈活、易于修改和維護(hù)。
5. 解決問(wèn)題的方案不同:
面向過(guò)程:按照步驟順序解決問(wèn)題,如設(shè)計(jì)一個(gè)五子棋系統(tǒng),分為開(kāi)始游戲、白棋走、繪制畫面、黑棋走、判斷輸贏等步驟。
面向?qū)ο螅喊凑展δ軐?shí)現(xiàn)解決問(wèn)題,如設(shè)計(jì)一個(gè)五子棋系統(tǒng),可以分為黑白雙方、棋盤系統(tǒng)和判斷系統(tǒng)等對(duì)象,各自負(fù)責(zé)不同的功能。
總之,面向?qū)ο蠛兔嫦蜻^(guò)程在解決問(wèn)題的方式、關(guān)注的焦點(diǎn)、性能等方面有所區(qū)別。面向?qū)ο蟾⒅貙?duì)象的抽象和封裝,易于維護(hù)、復(fù)用和擴(kuò)展;而面向過(guò)程更注重解決問(wèn)題的步驟和過(guò)程,性能較高,但可維護(hù)性、可復(fù)用性和可擴(kuò)展性較差。根據(jù)實(shí)際需求和場(chǎng)景,可以選擇適合的編程范式來(lái)解決問(wèn)題。
關(guān)于這個(gè)問(wèn)題,面向?qū)ο蠛兔嫦蜻^(guò)程是兩種不同的編程范式。
面向過(guò)程是一種以過(guò)程為中心的編程方式,注重解決問(wèn)題的步驟和流程。在面向過(guò)程的編程中,程序被劃分為一系列的函數(shù)或過(guò)程,這些函數(shù)接受輸入數(shù)據(jù)并產(chǎn)生輸出結(jié)果。程序的控制流程通過(guò)函數(shù)之間的調(diào)用來(lái)實(shí)現(xiàn)。
面向?qū)ο笫且环N以對(duì)象為中心的編程方式,注重描述問(wèn)題中的實(shí)體和實(shí)體之間的關(guān)系。在面向?qū)ο蟮木幊讨?,程序被組織為一系列的對(duì)象,每個(gè)對(duì)象都有自己的數(shù)據(jù)和方法。對(duì)象之間通過(guò)消息傳遞來(lái)進(jìn)行交互,對(duì)象的方法可以訪問(wèn)和操作對(duì)象的數(shù)據(jù)。
面向過(guò)程和面向?qū)ο蟮膮^(qū)別可以總結(jié)如下:
1. 抽象程度不同:面向過(guò)程更注重問(wèn)題的步驟和流程,而面向?qū)ο蟾⒅貑?wèn)題中的實(shí)體和實(shí)體之間的關(guān)系。
2. 數(shù)據(jù)封裝:面向過(guò)程中的數(shù)據(jù)是公開(kāi)的,可以被其他過(guò)程直接訪問(wèn)和修改,而面向?qū)ο笾械臄?shù)據(jù)被封裝在對(duì)象內(nèi)部,只能通過(guò)對(duì)象的方法來(lái)訪問(wèn)和修改。
3. 繼承和多態(tài):面向?qū)ο罂梢酝ㄟ^(guò)繼承和多態(tài)來(lái)實(shí)現(xiàn)代碼的復(fù)用和擴(kuò)展,而面向過(guò)程需要手動(dòng)復(fù)制和修改代碼來(lái)實(shí)現(xiàn)相同的功能。
4. 可維護(hù)性和擴(kuò)展性:面向?qū)ο蟾子诰S護(hù)和擴(kuò)展,因?yàn)閷?duì)象之間的關(guān)系和行為都被封裝在對(duì)象內(nèi)部,修改一個(gè)對(duì)象不會(huì)影響其他對(duì)象的功能。而面向過(guò)程的修改可能會(huì)影響整個(gè)程序的功能。
、面向?qū)ο缶幊蹋?/p>
首先java就是面向?qū)ο缶幊?,所謂在java中萬(wàn)事萬(wàn)物皆對(duì)象,這是因?yàn)閖ava中所有類的調(diào)用都是new出來(lái)的,其次面向?qū)ο笥玫饺筇匦?,即封裝、多態(tài)、繼承。
2、面向接口編程:
一個(gè)接口可以從三方面去考察:制定者(或者叫協(xié)調(diào)者)、實(shí)現(xiàn)者(或者叫生產(chǎn)者)、調(diào)用者(或者叫消費(fèi)者),接口本質(zhì)上就是由制定者來(lái)協(xié)調(diào)實(shí)現(xiàn)者和調(diào)用者之間的關(guān)系。
區(qū)別:
面向?qū)ο螅汗δ芘c整個(gè)項(xiàng)目進(jìn)行了綁定;
面向服務(wù):功能是單獨(dú)存在的,哪個(gè)項(xiàng)目需要,哪個(gè)項(xiàng)目就去調(diào)用。
面向服務(wù)的好處是什么:
在一個(gè)項(xiàng)目中各個(gè)不同的功能不再需要綁定項(xiàng)目,可以單獨(dú)獨(dú)立出來(lái)成一個(gè)服務(wù)器,
有項(xiàng)目需要用到某功能的時(shí)候直接去調(diào)用。
面向?qū)ο笫擒浖_(kāi)發(fā)方法。
面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開(kāi)發(fā),擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。
面向?qū)ο笫且环N對(duì)現(xiàn)實(shí)世界理解和抽象的方法,是計(jì)算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物。
面向?qū)ο笫窍鄬?duì)于面向過(guò)程來(lái)講的,面向?qū)ο蠓椒?,把相關(guān)的數(shù)據(jù)和方法組織為一個(gè)整體來(lái)看待,從更高的層次來(lái)進(jìn)行系統(tǒng)建模,更貼近事物的自然運(yùn)行模式。
FORTRAN 2003以后開(kāi)始支持面向?qū)ο缶幊蹋ㄖС謱?duì)象擴(kuò)展類型和繼承,多態(tài),動(dòng)態(tài)類型分配,以及類型綁定過(guò)程)。
面向?qū)ο缶褪悄阕咴隈R路上找一個(gè)比你壯很多的人,然后死命的頂著他
面向過(guò)程就是當(dāng)他發(fā)現(xiàn)你死命的頂著他的時(shí)候 ,給他一拳
面向結(jié)果就是你被送到醫(yī)院