2018-09-14 面向?qū)ο缶幊痰牡谝惶?/h2>

tip:藍(lán)色部分為專業(yè)名詞

1.名詞解釋

定義:

一種具有對(duì)象概念的程序編程典范,它可能包含數(shù)據(jù)、屬性、代碼方法。

對(duì)象則指的是的實(shí)例。它將對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性,對(duì)象里的程序可以訪問(wèn)及經(jīng)常修改對(duì)象相關(guān)連的數(shù)據(jù)。在面向?qū)ο蟪绦蚓幊汤?,?jì)算機(jī)程序會(huì)被設(shè)計(jì)成彼此相關(guān)的對(duì)象[1][2]。

面向?qū)ο蟪绦蛟O(shè)計(jì)可以看作一種在程序中包含各種獨(dú)立而又互相調(diào)用的對(duì)象的思想,這與傳統(tǒng)的思想剛好相反,面向?qū)ο蟪绦蛟O(shè)計(jì)中的每一個(gè)對(duì)象都應(yīng)該能夠接受數(shù)據(jù)、處理數(shù)據(jù)并將數(shù)據(jù)傳達(dá)給其它對(duì)象,因此它們都可以被看作一個(gè)小型的“機(jī)器”,即對(duì)象。

目前已經(jīng)被證實(shí)的是,面向?qū)ο蟪绦蛟O(shè)計(jì)推廣了程序的靈活性和可維護(hù)性,并且在大型項(xiàng)目設(shè)計(jì)中廣為應(yīng)用。此外,支持者聲稱面向?qū)ο蟪绦蛟O(shè)計(jì)要比以往的做法更加便于學(xué)習(xí),因?yàn)樗軌蜃屓藗兏?jiǎn)單地設(shè)計(jì)并維護(hù)程序,使得程序更加便于分析、設(shè)計(jì)、理解。反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。

結(jié)論:

當(dāng)我們提到面向?qū)ο蟮臅r(shí)候,它不僅指一種程序設(shè)計(jì)方法。它更多意義上是一種程序開(kāi)發(fā)方式。在這一方面,我們必須了解更多關(guān)于面向?qū)ο笙到y(tǒng)分析面向?qū)ο笤O(shè)計(jì)(Object Oriented Design,簡(jiǎn)稱OOD)方面的知識(shí)。許多流行的編程語(yǔ)言是面向?qū)ο蟮?它們的風(fēng)格就是會(huì)透由對(duì)象來(lái)創(chuàng)出實(shí)例。

重要的面向?qū)ο缶幊陶Z(yǔ)言包含Common Lisp、PythonC++、Objective-CSmalltalk、Delphi、Java、Swift、C#、Perl、RubyPHP等。、

以上內(nèi)容摘自百科,以后主要以python語(yǔ)言學(xué)習(xí)為主


2.特征

1.分享非面向?qū)ο蟪绦蚯吧碚Z(yǔ)言

面向?qū)ο缶幊掏ǔ9蚕砀唠A編程語(yǔ)言的低級(jí)功能。可用于建構(gòu)一個(gè)程序的基本工具包括:

? ? 變量: 能存儲(chǔ)一些內(nèi)置類型的信息如整數(shù)字符,也有些是數(shù)據(jù)結(jié)構(gòu)像是字符串、串列散列表等包含內(nèi)置或復(fù)合的變量如指針。

? ? 程序:也稱為函數(shù)、方法或例程,是指輸入數(shù)據(jù)產(chǎn)生輸出結(jié)果,現(xiàn)代語(yǔ)言還包含結(jié)構(gòu)化編程結(jié)構(gòu)如程序循環(huán)條件。

2.類與對(duì)象

支持面向?qū)ο缶幊陶Z(yǔ)言通常利用繼承其他類達(dá)到代碼重用和可擴(kuò)展性的特性。而類有兩個(gè)主要的概念:

? ? 類(Class):定義了一件事物的抽象特點(diǎn)。類的定義包含了數(shù)據(jù)的形式以及對(duì)數(shù)據(jù)的操作。

? ? 對(duì)象:是類的實(shí)例

其中(Class)定義了一件事物的抽象特點(diǎn)。類的定義包含了數(shù)據(jù)的形式以及對(duì)數(shù)據(jù)的操作。舉例來(lái)說(shuō),“”這個(gè)類會(huì)包含狗的一切基礎(chǔ)特征,即所有“狗”都共有的特征或行為,例如它的孕育、毛皮顏色和吠叫的能力。類可以為程序提供模版和結(jié)構(gòu)。一個(gè)類的方法和屬性被稱為“成員”。 我們來(lái)看一段偽代碼

開(kāi)始

? ? 公有成員:

? ? ? ? ? ? ? ? 吠叫():

? ? 私有成員:

? ? ? ? ? ? ? ? 毛皮顏色:

? ? ? ? ? ? ? ? 孕育:

結(jié)束

程序在面向?qū)ο缶幊坍?dāng)中被視為方法,變量被視為成員或?qū)傩?。例如,?a target="_blank" rel="nofollow">狗”這個(gè)類列舉狗的特點(diǎn),從而使這個(gè)類定義了世界上所有的狗。而萊絲這個(gè)對(duì)象則是一條具體的狗,它的屬性也是具體的。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的。因此,萊絲就是狗這個(gè)類的一個(gè)實(shí)例。一個(gè)具體對(duì)象屬性的值被稱作它的“狀態(tài)”。

定義萊絲

? ? 萊絲.毛皮顏色 : 棕白色

? 萊絲.吠叫()

3.動(dòng)態(tài)配置與消息傳遞機(jī)制

動(dòng)態(tài)配置是指方法會(huì)隨著實(shí)例動(dòng)態(tài)的改變。

消息傳遞機(jī)制(Message Passing)是指一個(gè)對(duì)象通過(guò)接受消息、處理消息、傳出消息或使用其他類的方法來(lái)實(shí)現(xiàn)一定功能。如:萊絲可以通過(guò)吠叫引起的注意,從而導(dǎo)致一系列的事發(fā)生。

4.封裝性

具備封裝性(Encapsulation)的面向?qū)ο缶幊屉[藏了某一方法的具體運(yùn)行步驟,取而代之的是通過(guò)消息傳遞機(jī)制發(fā)送消息給它。封裝是通過(guò)限制只有特定類的對(duì)象可以訪問(wèn)這一特定類的成員,而它們通常利用接口實(shí)現(xiàn)消息的傳入傳出。舉個(gè)例子,接口能確保幼犬這一特征只能被賦予狗這一類。通常來(lái)說(shuō),成員會(huì)依它們的訪問(wèn)權(quán)限被分為3種:公有成員私有成員以及保護(hù)成員。(有些語(yǔ)言更進(jìn)一步:Java可以限制同一包內(nèi)不同類的訪問(wèn);C#VB.NET保留了為類的成員聚集準(zhǔn)備的關(guān)鍵字:internal(C#)和Friend(VB.NET);Eiffel語(yǔ)言則可以讓用戶指定哪個(gè)類可以訪問(wèn)所有成員。)??????

公有成員,狗都能做的事。私有成員,某些狗才能做的事。保護(hù)成員,??????

5.繼承

繼承性(Inheritance)是指,在某種情況下,一個(gè)類會(huì)有“子類”。子類比原本的類(稱為父類)要更加具體化。

吉娃娃犬: 繼承

開(kāi)始

公有成員:? ? ? ? 顫抖()

結(jié)束

牧羊犬: 繼承

定義萊絲牧羊犬

萊絲.顫抖()? ? /* 錯(cuò)誤:顫抖是吉娃娃犬的成員方法。 */

當(dāng)一個(gè)類從多個(gè)父類繼承時(shí),我們稱之為“多重繼承”。如一只狗既是吉娃娃犬又是牧羊犬(雖然事實(shí)上并不合邏輯)。多重繼承并不總是被支持的,因?yàn)樗茈y理解,又很難被好好使用。

6.多態(tài)

多態(tài)(Polymorphism)是指由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)做出不同的響應(yīng)[8]。例如,狗和雞都有“叫()”這一方法,但是調(diào)用狗的“叫()”,狗會(huì)吠叫;調(diào)用雞的“叫()”,雞則會(huì)啼叫。 我們將它體現(xiàn)在偽代碼上:

開(kāi)始

? ? 公有成員:

? ? ? ? ? ? ? 叫()

? ? ? ? ? ? 開(kāi)始

? ? ? ? ? ? ? ? ? ? 吠叫()

? ? ? ? ? ? 結(jié)束

結(jié)束

開(kāi)始

? ? ? ? 公有成員:

? ? ? ? ? ? ? ? 叫()

? ? ? ? ? ? ? ? 開(kāi)始

? ? ? ? ? ? ? ? ? ? ? ? 啼叫()

? ? ? ? ? ? ? ? 結(jié)束

結(jié)束

定義萊絲

定義魯斯特

萊絲.叫()

魯斯特.叫()

同樣是做出這一種行為,但萊絲和魯斯特具體做出的表現(xiàn)方式將大不相同。多態(tài)性的概念可以用在運(yùn)算符重載

7.抽象性

抽象(Abstraction)是簡(jiǎn)化復(fù)雜的現(xiàn)實(shí)問(wèn)題的途徑,它可以為具體問(wèn)題找到最恰當(dāng)?shù)念惗x,并且可以在最恰當(dāng)?shù)睦^承級(jí)別解釋問(wèn)題。舉例說(shuō)明,萊絲在大多數(shù)時(shí)候都被當(dāng)作一條狗,但是如果想要讓它做牧羊犬做的事,你完全可以調(diào)用牧羊犬的方法。如果狗這個(gè)類還有動(dòng)物的父類,那么你完全可以視萊絲為一個(gè)動(dòng)物。

也就是說(shuō)可以用萊斯去干各種類能做的事情。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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