當(dāng)我們談?wù)撁嫦驅(qū)ο髸r(shí),我們?cè)谡務(wù)撌裁?/h2>

初學(xué)一門新的編程語(yǔ)言時(shí),我們總會(huì)先遇到某種語(yǔ)言的基礎(chǔ)語(yǔ)法、基礎(chǔ)類型、變量聲明與條件控制語(yǔ)句等等。旅程的開始往往盡是對(duì)著面向過程代碼的有樣學(xué)樣。
一路學(xué)習(xí),披荊斬棘,了解了一些語(yǔ)言的高級(jí)用法與套路,卻還是感覺難以理解其精髓;甚至?xí)行┟曰笈c困擾:

1.面對(duì)紛繁復(fù)雜的業(yè)務(wù)場(chǎng)景,繁復(fù)多變需求更迭,怎么樣才能提高效率。
2.在經(jīng)歷了大量的近乎重復(fù)的業(yè)務(wù)代碼的洗禮后,我們?cè)趺床拍?,逐步搭建適合自己業(yè)務(wù)場(chǎng)景的框架工具。

要解決問題,我們需要在開發(fā)模式上多做思考。在面向?qū)ο蟪霈F(xiàn)以前,結(jié)構(gòu)化程序設(shè)計(jì)是程序設(shè)計(jì)的主流,結(jié)構(gòu)化程序設(shè)計(jì)又稱為面向過程的程序設(shè)計(jì)。問題被看作一系列需要按照指定步驟完成的任務(wù),但是逐漸的,我們注意到程序?qū)嵺`中,對(duì)代碼的易維護(hù)、可擴(kuò)展、高復(fù)用的呼聲逐漸增加。我們也會(huì)了解到某些問題在我們周圍不斷重復(fù)發(fā)生,而該問題的解決方案的核心,也被總結(jié)成了很多成型的方法,靈活使用便能夠避免大量的重復(fù)勞動(dòng)。

現(xiàn)在咱們來(lái)談一談面向?qū)ο蟮某绦蛟O(shè)計(jì)理論與原則。

面向?qū)ο蟪绦蛟O(shè)計(jì) (Object Oriented Programming) 本質(zhì)上是以建立模型體現(xiàn)出的抽象思維方式和面向?qū)ο蟮膶?shí)踐方法。模型是用來(lái)反映編程實(shí)踐中涉及到的事物特征和可預(yù)測(cè)的變化行為的一種抽象;通過這種抽象的思維方式與對(duì)應(yīng)的實(shí)踐方法來(lái)更好的統(tǒng)籌開發(fā)工作中遇到的具體問題。

而面向?qū)ο蟪绦蛟O(shè)計(jì)也可以說是一種編程架構(gòu)。其中的基本原則是程序由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成的。從而達(dá)到對(duì)程序 重用性、靈活性和擴(kuò)展性的要求。面向?qū)ο缶幊贪藢?duì)象、類、繼承、多態(tài)、消息等等。
通過建立模型可以將編程涉及到的事物,轉(zhuǎn)化為編程系統(tǒng)中抽象的代表一些特點(diǎn)與行事方法的集合。面向?qū)ο蟪绦蛟O(shè)計(jì)方法是模擬人類的思維方式,使得軟件的開發(fā)方法與過程接近人類認(rèn)識(shí)世界、解決現(xiàn)實(shí)問題的方法和過程。

面向?qū)ο蟪绦蛟O(shè)計(jì)以對(duì)象為核心,認(rèn)為程序由一系列對(duì)象組成。類是對(duì)現(xiàn)實(shí)世界的抽象,包括表示靜態(tài)屬性的數(shù)據(jù)和對(duì)數(shù)據(jù)的操作方法,對(duì)象是類的實(shí)例化。對(duì)象間通過消息傳遞相互通信,來(lái)模擬現(xiàn)實(shí)世界中不同實(shí)體間的聯(lián)系。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象是組成程序的基本模塊。

面向?qū)ο缶幊痰幕咎攸c(diǎn):

1.封裝性:
封裝是指描述對(duì)象的屬性以及其行為的程序代碼組裝到一起,把它們封裝在一個(gè)類中,為軟件結(jié)構(gòu)的模塊性提供基礎(chǔ)。封裝的最基本單位是對(duì)象,而使得軟件結(jié)構(gòu)的相關(guān)部件的實(shí)現(xiàn)“高內(nèi)聚、低耦合”的“最佳狀態(tài)”便是面向?qū)ο蠹夹g(shù)的封裝性所需要實(shí)現(xiàn)的最基本目標(biāo)。

2.繼承性

繼承性主要指的是類之間的聯(lián)系與區(qū)別。而在子類可以獲得父類定義好的部分屬性與方法。同時(shí)也可以針對(duì)自己的特性進(jìn)行拓展與擴(kuò)充。

3.多態(tài)性:

多態(tài)性是指在面向?qū)ο蠹夹g(shù)中,當(dāng)不同的對(duì)象同時(shí)接收到同一個(gè)完全相同的消息之后,所表現(xiàn)出來(lái)的動(dòng)作是不相同的,具有多種形態(tài);多態(tài)性是指在一組對(duì)象的一個(gè)類中,面向?qū)ο蠹夹g(shù)可以使用相同的調(diào)用方式來(lái)對(duì)相同的函數(shù)名進(jìn)行調(diào)用,即便這若干個(gè)具有相同函數(shù)名的函數(shù)所表示的函數(shù)是不同的。

面向?qū)ο蠹夹g(shù)在保障進(jìn)行良好的需求設(shè)計(jì)的同時(shí),也盡可能實(shí)現(xiàn)利用低成本來(lái)開發(fā)出高質(zhì)量的應(yīng)用軟件的目標(biāo)。

面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn),可以隔離變化,通過保持接口不變,內(nèi)部的實(shí)現(xiàn)方式不會(huì)導(dǎo)致對(duì)外界的干擾,可以提高代碼的可維護(hù)性;通過將不同模塊進(jìn)行獨(dú)立細(xì)分,可以控制軟件整體復(fù)雜度;

當(dāng)然,面向?qū)ο蟪绦蛟O(shè)計(jì)也存在一些缺陷,當(dāng)類數(shù)量過多,對(duì)象被大量創(chuàng)建時(shí),勢(shì)必會(huì)影響程序運(yùn)行效率;如果將某些功能實(shí)現(xiàn)為大體量類庫(kù)才能提供的功能,對(duì)眾多類代碼的可靠性、類功能的學(xué)習(xí)以及掌握產(chǎn)生挑戰(zhàn)。

面向?qū)ο蟪绦蛟O(shè)計(jì)之后,也存在了新的編程開發(fā)模式。很多人也在看到了它的缺陷之后也都做了其他的嘗試,這些我們以后再做分析。但是需要知道的是,隨著編程實(shí)踐的進(jìn)行,每個(gè)開發(fā)模式都會(huì)有存在的理由和價(jià)值,不斷學(xué)習(xí)靈活使用,才能在不同的場(chǎng)景中提升工作效率。

名詞解釋:

面向?qū)ο蟪绦蛟O(shè)計(jì)中的概念主要包括: 對(duì)象、類、數(shù)據(jù)抽象、繼承、動(dòng)態(tài)綁定、數(shù)據(jù)封裝、多態(tài)性、消息傳遞。通過這些概念面向?qū)ο蟮乃枷氲玫搅司唧w的體現(xiàn)。

  • 對(duì)象
    對(duì)象是一個(gè)自包含的實(shí)體,用一組可識(shí)別的特性和行為來(lái)標(biāo)識(shí)。


  • 類就是具有相同的屬性和功能的對(duì)象的抽象的集合

  • 構(gòu)造方法
    又叫構(gòu)造函數(shù),是對(duì)類進(jìn)行初始化的方法。

  • 封裝 (encapsulation)
    第一層意思: 每個(gè)對(duì)象都包含它能進(jìn)行操作所需要的所有信息,良好的封裝可以減少耦合
    第二層意思: 將接口與實(shí)現(xiàn)分離的過程。類內(nèi)部的實(shí)現(xiàn)可以自由修改并且具有清晰的對(duì)外接口。

  • 繼承:
    類之間的關(guān)系,在這種關(guān)系中,一個(gè)類共享了一個(gè)或多個(gè)其他類定義的結(jié)構(gòu)和行為。繼承描述了類之間的“ is a”關(guān)系。子類可以對(duì)基類的行為進(jìn)行擴(kuò)展、覆蓋、重定義。繼承者可以理解為是對(duì)被繼承者的特殊化,因?yàn)樗司邆浔焕^承者的特性外,還具備自己獨(dú)有的個(gè)性。
    繼承定義了類如何相互關(guān)聯(lián),共享特性。繼承的工作方式是,定義父類和子類,或者叫做基類和派生類,其中子類繼承父類的所有特性。子類還可以定義新的特性。

  • 組合:
    即是類之間的關(guān)系也是對(duì)象之間的關(guān)系。在這種關(guān)系中一個(gè)對(duì)象或者類包含了其他的對(duì)象和類。組合描述了 “has a”關(guān)系。

  • 多態(tài)
    一個(gè)名稱可以表示很多不同類的對(duì)象,這些類和一個(gè)共同超類有關(guān)。因此這個(gè)名稱表示的任何對(duì)象可以以不同的方式響應(yīng)一些共同的操作。多態(tài)表示不同的對(duì)象可以執(zhí)行相同的動(dòng)作,但是要通過它們自己的實(shí)現(xiàn)代碼來(lái)執(zhí)行。 這樣,子類以父類的身份出現(xiàn); 子類在工作時(shí)以自己的方式來(lái)實(shí)現(xiàn);子類以父類的身份出現(xiàn)時(shí),子類特有的屬性和方法不可使用。

  • 動(dòng)態(tài)綁定:
    也稱動(dòng)態(tài)類型,指的是一個(gè)對(duì)象或者表達(dá)式的類型直到運(yùn)行時(shí)才能確定。通常由編譯器摻入特殊代碼來(lái)實(shí)現(xiàn)。

  • 靜態(tài)綁定
    也成為靜態(tài)類型,指的是一個(gè)對(duì)象或者表達(dá)式的類型在編譯時(shí)確定。

  • 消息傳遞
    指的是一個(gè)對(duì)象調(diào)用了另一個(gè)對(duì)象的方法

  • 接口
    接口是把隱式公共方法和屬性組合起來(lái),以封裝特定功能的一個(gè)集合,一旦類實(shí)現(xiàn)了接口,類就可以支持接口所指定的所有屬性和成員。 一個(gè)類可以支持多個(gè)接口,多個(gè)類也可以支持相同的接口。
    接口預(yù)先定義時(shí),還不知道類是否存在,方法如何實(shí)現(xiàn)。

  • 泛型 是具有占位符(類型參數(shù))的類、結(jié)構(gòu)、接口和方法,這些占位符是類、結(jié)構(gòu)、接口和方法所存儲(chǔ)或使用的一個(gè)或多個(gè)類型的占位符。泛型集合類可以將類型參數(shù)用作它所存儲(chǔ)的對(duì)象的類型的占位符;類型參數(shù)作為其字段的類型和其方法的參數(shù)類型出現(xiàn)。

?著作權(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)容

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