C++面向?qū)ο笳Z(yǔ)言程序設(shè)計(jì)中的6大重點(diǎn)

1.面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想是啥?

咱們先簡(jiǎn)單說(shuō)說(shuō)對(duì)象和類

對(duì)象:是人們要研究的任何事物。在面對(duì)對(duì)象軟件系統(tǒng)中則是基本的運(yùn)行時(shí)實(shí)體,既包含數(shù)據(jù),也包含作用于數(shù)據(jù)的操作。

類:對(duì)一組具有共同屬性特征和行為特征的對(duì)象的抽象。

基本思想:

將一個(gè)復(fù)雜的大規(guī)模軟件系統(tǒng)劃分為幾個(gè)規(guī)模較小、相對(duì)簡(jiǎn)單的模塊,即分而治之。

2.舉例說(shuō)明面對(duì)過(guò)程和面向?qū)ο蟪绦蛟O(shè)計(jì)的差別

面向過(guò)程:

就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。

特性:模塊化 流程化

面向?qū)ο螅?/p>

是把構(gòu)成問(wèn)題的事物分解成各個(gè)對(duì)象,以對(duì)象作為基礎(chǔ)描敘某個(gè)事物在整個(gè)解決問(wèn)題步驟中的行為。

特性:抽象 封裝 繼承 多態(tài)

說(shuō)了這么多的差別,總結(jié)一下吧:

面向過(guò)程的語(yǔ)言更加偏向底層,目前IT行業(yè)比較受歡迎的幾大系統(tǒng)的內(nèi)核和操作系統(tǒng)都是用C編寫(xiě)的

面向?qū)ο蟮恼Z(yǔ)言更加注重開(kāi)發(fā),例如,web開(kāi)發(fā),Java后臺(tái)開(kāi)發(fā)等,雖然用到了不同的語(yǔ)言,但都有一個(gè)相同的特性——面向?qū)ο蟆?/p>

3.封裝性給面向?qū)ο蟪绦蛟O(shè)計(jì)帶來(lái)了什么好處?

在面對(duì)對(duì)象程序設(shè)計(jì)方法中,所謂封裝,就是包含和隱藏對(duì)象信息,如內(nèi)部數(shù)據(jù)結(jié)構(gòu)和代碼的能力。

? ? 在面向?qū)ο蟮倪^(guò)程中,通過(guò)創(chuàng)建高度獨(dú)立的對(duì)象(先定義類)將代碼與數(shù)據(jù)捆綁在一起,并在對(duì)象中包含了所必需的代碼和數(shù)據(jù)。

封裝性的優(yōu)點(diǎn):

1.降低了程序設(shè)計(jì)的復(fù)雜度

? ? 將操作對(duì)象的內(nèi)部復(fù)雜性與應(yīng)用程序的其他部分隔離開(kāi)。程序員只需要通過(guò)對(duì)象的接口來(lái)操作對(duì)象完成特定的任務(wù),不需要知道對(duì)象內(nèi)部復(fù)雜的細(xì)節(jié)。

2.提高了數(shù)據(jù)的安全性和代碼的可靠性

? ? 外部代碼不能訪問(wèn)對(duì)象內(nèi)部的私有數(shù)據(jù),避免對(duì)這些數(shù)據(jù)的非法操作,從而提高了這些數(shù)據(jù)的安全性。通過(guò)類實(shí)現(xiàn)封裝,集中和統(tǒng)一了對(duì)類中數(shù)據(jù)的所有操作,從而避免因分散而造成的錯(cuò)誤。

3.改善了軟件的可維護(hù)性

? ? 類將數(shù)據(jù)與對(duì)數(shù)據(jù)的操作封裝成一個(gè)整體,但類的接口(即類的公用部分)與實(shí)現(xiàn)是分離的。類的接口保持不變,實(shí)現(xiàn)部分的變化不會(huì)影響我們對(duì)該類的使用。對(duì)象的內(nèi)部狀態(tài)不受外界干擾,也不會(huì)影響其他模塊??梢源蟠罂s短我們查找程序中錯(cuò)誤的時(shí)間。

4.改善了程序模塊可重用性

? ? 封裝隱藏了內(nèi)部的復(fù)雜性,提供給使用者一個(gè)簡(jiǎn)單的接口,使得重用一個(gè)模塊變成一件easy的事情。而對(duì)于廣大程序員的我們來(lái)說(shuō)是很棒棒了。

4.面向?qū)ο蟪绦蛟O(shè)計(jì)中的繼承性有啥好處?

繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)的第二個(gè)主要特征。而繼承的目的就是重用。

(重用已有的程序代碼可以大大降低軟件開(kāi)發(fā)的成本,提高軟件開(kāi)發(fā)的效率,縮短開(kāi)發(fā)時(shí)間。程序員表示好評(píng))

所謂繼承,就是在一個(gè)已有類的基礎(chǔ)上創(chuàng)建一個(gè)新類,這個(gè)新類獲得已有類的數(shù)據(jù)和操作代碼,并且新類可以增加新的數(shù)據(jù)與操作代碼。

繼承性的優(yōu)點(diǎn):

1.(一直在重復(fù)的)繼承性很好的實(shí)現(xiàn)了代碼的重用

在已有類的基礎(chǔ)上構(gòu)造、創(chuàng)建和擴(kuò)充新類最有效的手段。具有可進(jìn)化性,并且在使用已有類時(shí)不更改已存在的代碼。減少代碼和數(shù)據(jù)的冗余度。

2.能改進(jìn)軟件系統(tǒng)的可維護(hù)性

類的繼承層次結(jié)構(gòu)自然地表達(dá)了人們分析問(wèn)題時(shí)所用的分類層次結(jié)構(gòu)。因此,按照繼承的方法開(kāi)發(fā)出來(lái)的面向?qū)ο筌浖到y(tǒng)的理解性會(huì)更好,從而改善軟件系統(tǒng)的可維護(hù)性。并通過(guò)增強(qiáng)一致性來(lái)減少板塊間的接口和界面,以此來(lái)增強(qiáng)程序的易維護(hù)性。

3.使已有程序庫(kù)具有清晰的層次結(jié)構(gòu)關(guān)系

如果沒(méi)有繼承概念的支持,程序庫(kù)中所有的類就像一盤(pán)毫無(wú)關(guān)系的散沙,管理和使用都不太方便。所以繼承是管理已有代碼的有力工具。

5.多態(tài)性給面向?qū)ο髱?lái)了啥好處?

啥是“多態(tài)性”:

自然語(yǔ)言:多態(tài)性是指“一詞多義”,相同的動(dòng)詞作用到不同類型的對(duì)象上面。

例如:學(xué)習(xí)操作系統(tǒng)、學(xué)習(xí)微機(jī)原理、學(xué)習(xí)C++、學(xué)習(xí)通信概論、學(xué)習(xí)MATLAB等這些行為都具有相似的動(dòng)作——“學(xué)習(xí)”,但是它們作用的對(duì)象不同,卻都表達(dá)了同樣的含義——學(xué)習(xí)課程。

程序設(shè)計(jì):當(dāng)不同的對(duì)象接收到相同的消息產(chǎn)生不同的動(dòng)作,從而實(shí)現(xiàn)“一個(gè)對(duì)外接口,多種內(nèi)在實(shí)現(xiàn)形式”,降低程序設(shè)計(jì)的復(fù)雜性。

C++實(shí)現(xiàn)多態(tài)性有以下兩種情況:

編譯時(shí)的多態(tài)性:通過(guò)函數(shù)重載、運(yùn)算符重載、模板實(shí)現(xiàn)

運(yùn)行時(shí)的多態(tài)性:通過(guò)虛函數(shù)實(shí)現(xiàn)

要想進(jìn)一步理解“多態(tài)性”的話,請(qǐng)看下面代碼:

class shape{? ? //創(chuàng)建基類

public:

virtual float area(){

//關(guān)鍵字virtual聲明的函數(shù)為虛函數(shù)

return -1;}

};

class circle:public shape{? ?

//創(chuàng)建圓形派生類

float radius;? ? ? ?

public:

circle(float r){

radius = r;

}

float area(){?

//在派生類中,虛函數(shù)被重新定義以實(shí)現(xiàn)不同的操作

return 3.14158*radius*radius;

//這種方式被叫做函數(shù)超越(函數(shù)覆蓋)

}

};

int main(){shape obj,*ptr;? ? //創(chuàng)建shape類對(duì)象obj,指向shape類對(duì)象的指針ptr

circle c(3.6);? ? //創(chuàng)建circle類對(duì)象并初始化

ptr = &obj;? ? //把ptr指針指向shape類對(duì)象

cout<<ptr->area()<<endl;//輸出面積

ptr =&c;//把ptr指針指向circle類對(duì)象

cout<<ptr->area()<<endl;//輸出面積

ps:運(yùn)行時(shí)的多態(tài)性的體現(xiàn):以指針ptr所指的對(duì)象來(lái)確定使用虛函數(shù)的哪個(gè)版本。

利用多態(tài)性有利于直接和精確地把握事物,不去涉及具體的數(shù)據(jù)結(jié)構(gòu)和類型,只看重揭示系統(tǒng)的邏輯合理性和內(nèi)在實(shí)質(zhì),簡(jiǎn)化復(fù)雜度,提高了更好的靈活性、問(wèn)題的抽象性和程序的可維護(hù)性

6.類庫(kù)三連問(wèn)

什么是類庫(kù)!

類庫(kù)是類的集合,并且給出了多個(gè)類之間的關(guān)系描述。

例如:Microsoft Visual C++系統(tǒng)中提供的MFC類庫(kù),

C++ Builder系統(tǒng)中提供的VCL類庫(kù),

Borland C++系統(tǒng)中提供的OWL類庫(kù)

如何使用類庫(kù)呢?

先了解以下內(nèi)容:

(1)類庫(kù)的類層次結(jié)構(gòu)

(2)可能需要用到的類以及基類的屬性和方法

(3)通過(guò)聯(lián)機(jī)文檔提供的例子學(xué)習(xí)有關(guān)類的使用方法

如何利用類庫(kù)呢?

一方面要充分利用開(kāi)發(fā)環(huán)境所提供的已有類庫(kù)中的類或者對(duì)其中的某些類進(jìn)行擴(kuò)充得到符合要求的類。

? ? 另一方面,在軟件開(kāi)發(fā)過(guò)程中認(rèn)真總結(jié)并建立與應(yīng)用領(lǐng)域中相關(guān)的類庫(kù),為以后在該領(lǐng)域開(kāi)發(fā)新的項(xiàng)目奠定基礎(chǔ)。

最后編輯于
?著作權(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)容