• 正文
    • 1 面向過程與面向?qū)ο?/span>
    • 2 對(duì)象的概念
    • 3 類的概念
    • 4 面向?qū)ο蟮奶匦?/span>
    • 5 總結(jié)
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

01/13 13:45
1638
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

本篇,來介紹面向?qū)ο蟮幕靖拍睢?/p>

1 面向過程與面向?qū)ο?/h2>

面向過程與面向?qū)ο?,是兩種不同的編程思想。

1.1 面向過程

面向過程的思路,是按照問題的解決步驟,將程序分解為一個(gè)個(gè)具體的函數(shù)或過程,然后依次調(diào)用這些函數(shù)來實(shí)現(xiàn)程序的功能。

面向?qū)ο蟮某绦蛟O(shè)計(jì),程序的執(zhí)行流程比較直觀,按照步驟一次執(zhí)行,適合處理簡(jiǎn)單的,單線程的任務(wù)。

1.2 面向?qū)ο?/h3>

面向?qū)ο蟮乃悸罚菍⑹挛锍橄蟪蓪?duì)象,每個(gè)對(duì)象有自己的屬性(變量)和方法(函數(shù))。對(duì)象是程序的基本單元,通過對(duì)象之間的交互、消息傳遞等來實(shí)現(xiàn)程序的功能。

2 對(duì)象的概念

2.1 對(duì)象數(shù)據(jù)

保存在對(duì)象中的數(shù)據(jù),描述了該對(duì)象的狀態(tài)。在面向?qū)ο笾?,?shù)據(jù)被稱為屬性。

例如,一個(gè)員工的屬性,可以包含員工號(hào)、生日、性別、電話號(hào)碼等。

2.2 對(duì)象行為

對(duì)象的行為,表示這個(gè)對(duì)象可以做什么。在面向?qū)ο笾?,?shù)據(jù)被稱為方法。

例如,員工對(duì)象的方法,可以有setGender()和getGender()來設(shè)置和獲取性別。

3 類的概念

3.1 類與對(duì)象

類可以理解為對(duì)象的藍(lán)圖。在實(shí)例化一個(gè)對(duì)象時(shí),是基于這個(gè)類來構(gòu)建對(duì)象。

類也可以理解為是對(duì)象的模板或模具,用來創(chuàng)建對(duì)象。

例如,創(chuàng)建一個(gè)整數(shù)或浮點(diǎn)數(shù):

int x;
float y;

也可以使用自定義的類來創(chuàng)建對(duì)象

myClass myObject;

3.2 類的屬性、方法和消息

以一個(gè)Person類為例來介紹:

class Person{
// 屬性
private:
    std::string name;
    std::string address;
    
// 方法
public:
    std::string getName(){
        return name;
    }
    std::string setName(std::string n){
        name = n;
    }
    
    std::string getAddress(){
        return address;
    }
    std::string setAddress(std::string adr){
        address = adr;
    }
}

3.2.1 屬性

類的數(shù)據(jù)通過屬性來表示,用來存放該類實(shí)例化的每個(gè)對(duì)象的狀態(tài)

屬性可以有3種類型:

    public: 其它對(duì)象可以訪問private: 只有自身對(duì)象可以訪問protected: 只允許相關(guān)對(duì)象訪問

3.2.2 方法

方法實(shí)現(xiàn)了一個(gè)類需要的行為。

在Person類中,方法有g(shù)etName()、getName()、getAddress()、setAddress()。

通過方法來檢查或修改對(duì)象的屬性,是面向?qū)ο笾谐S玫募夹g(shù)。

3.2.3 消息

消息是對(duì)象之間的通信機(jī)制。

當(dāng)對(duì)象A調(diào)用了對(duì)象B的一個(gè)方法,則表示對(duì)象A正在向?qū)ο驜發(fā)送一個(gè)消息,對(duì)象B的響應(yīng)即為其返回值。

class Payroll{
    std::string name;
    Person p = new Person();
    p.setName("Joe");
    //...
    name = p.getName();
}

3.3 類的可視化描述——UML與類圖

統(tǒng)一建模語言UML(Unified Modeling Language)是一種可視化建模工具,其中的UML類圖,可以用來描述類的特征。

每個(gè)類圖由三部分組成:類名、屬性(數(shù)據(jù))和方法(行為)。

類圖中:

    加號(hào)(+)表示公有訪問減號(hào)(-)表示私有訪問井號(hào)(#)表示保護(hù)訪問

4 面向?qū)ο蟮奶匦?/h2>

經(jīng)典的面向?qū)ο?,擁有三大特性?a class="article-link" target="_blank" href="/baike/492719.html">封裝(encapsulation)、繼承(inheritance)和多態(tài)(polymorphism)。除此之外,面向?qū)ο筮€會(huì)加入“組合”的特性。

4.1 封裝

封裝是指把對(duì)象的屬性和方法進(jìn)行封裝,對(duì)外隱藏其內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。

使用對(duì)象的好處之一,是無須對(duì)外暴露其所有的屬性和方法。

一個(gè)好的設(shè)計(jì),是僅暴露出必要的接口來與其它對(duì)象進(jìn)行交互。

4.1.1 接口與實(shí)現(xiàn)

接口定義了對(duì)象之間的通信方式。實(shí)現(xiàn)是具體功能的實(shí)現(xiàn)過程。

用戶通過類的接口與對(duì)象交互時(shí),只需要關(guān)注接口的形式,無需關(guān)注(也不應(yīng)該看到)對(duì)象的內(nèi)部實(shí)現(xiàn)。

4.1.2 舉例

一個(gè)計(jì)算整數(shù)的平方的例子:

class IntSquare{
// 私有屬性
private:
    int squareValue;
    
// 公共接口
public:
    int getSquare (int value){
        squareValue = calculateSquare(value);
        return squareValue;
    }
    
// 私有實(shí)現(xiàn)
private:
    int calculateSquare(int value){
        return value*value;
    }
}

該類中,外部對(duì)象唯一能訪問的,就是公共接口getSquare(),其余的私有屬性squareValue以及私有方法calculateSquare,外部對(duì)象無需知道這些私有屬性和方法的存在。

4.2 繼承

繼承是指一個(gè)類可以繼承另一個(gè)類的屬性和方法。

可以通過提取公共屬性和方法來創(chuàng)建新類。

例如:有一個(gè)貓類(Cat)和一個(gè)狗類(Dog),這兩個(gè)類都有一個(gè)屬性可以表示眼睛的顏色。在面向?qū)ο笾?,可以將顏色屬性上移到名為哺乳?dòng)物的類中(Mammal)。

4.2.1 超類和子類

    超類:也稱父類、基類。它包含了所有子類的公共屬性和行為。使用基類的好處在于,通過繼承基類,減少了大量重復(fù)的工作。子類:即超類的衍生類,是超類的擴(kuò)展

4.2.2 抽象

在實(shí)現(xiàn)了哺乳動(dòng)物類和貓、狗類后,還可以添加其它哺乳動(dòng)物(老虎、獅子),也可以將貓類作為父類,繼續(xù)擴(kuò)展出不同品種的貓(波斯貓、加菲貓)

4.2.3 is-a關(guān)系

繼承的關(guān)系,也稱作is-a關(guān)系,例如,貓is a哺乳動(dòng)物,狗is a哺乳動(dòng)物。

多重繼承:

多數(shù)編程語言中(Java、.Net、Swift),一個(gè)類只有一個(gè)父類,一個(gè)父類可以有多個(gè)子類但在C++中,一個(gè)類可以有多個(gè)父類,即允許繼承多個(gè)父類的功能。

4.3 多態(tài)

多態(tài)與繼承是緊耦合的關(guān)系。

當(dāng)向一個(gè)對(duì)象發(fā)送消息時(shí),該對(duì)象必須定義其實(shí)現(xiàn)來響應(yīng)消息。

在繼承的關(guān)系中,子類從父類中繼續(xù)接口,但每個(gè)子列又是各有特點(diǎn)的,因此每個(gè)子類各自實(shí)現(xiàn)對(duì)應(yīng)的接口功能,實(shí)現(xiàn)獨(dú)特的應(yīng)答。

4.4 組合

組合,字母理解,多個(gè)對(duì)象,組合為一個(gè)新的對(duì)象,例如,車架、車輪、發(fā)動(dòng)機(jī)等對(duì)象組成了汽車對(duì)象。

4.4.1 抽象

類比繼承方式,通過組合的方式,也是構(gòu)建對(duì)象的一種機(jī)制。實(shí)際上,構(gòu)建 ? 新類方式,就是繼承和組合這兩種方式。

使用繼承,是把屬性和方法提取到通用的類中。

使用組合,是把類嵌入到其它類中的來構(gòu)造新的類。

4.4.2 has-a關(guān)系

組合的關(guān)系,也稱作has-a關(guān)系,例如,汽車has a發(fā)動(dòng)機(jī)。

5 總結(jié)

本篇介紹了面向?qū)ο蟮囊恍┗靖拍?,是面向?qū)ο缶幊痰幕A(chǔ)。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄