• 正文
    • 1 面向過程與面向對象
    • 2 對象的概念
    • 3 類的概念
    • 4 面向對象的特性
    • 5 總結
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

面向對象的基本概念

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

本篇,來介紹面向對象的基本概念。

1 面向過程與面向對象

面向過程與面向對象,是兩種不同的編程思想。

1.1 面向過程

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

面向對象的程序設計,程序的執(zhí)行流程比較直觀,按照步驟一次執(zhí)行,適合處理簡單的,單線程的任務。

1.2 面向對象

面向對象的思路,是將事物抽象成對象,每個對象有自己的屬性(變量)和方法(函數(shù))。對象是程序的基本單元,通過對象之間的交互、消息傳遞等來實現(xiàn)程序的功能。

2 對象的概念

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

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

例如,一個員工的屬性,可以包含員工號、生日、性別、電話號碼等。

2.2 對象行為

對象的行為,表示這個對象可以做什么。在面向對象中,數(shù)據(jù)被稱為方法。

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

3 類的概念

3.1 類與對象

類可以理解為對象的藍圖。在實例化一個對象時,是基于這個類來構建對象。

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

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

int x;
float y;

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

myClass myObject;

3.2 類的屬性、方法和消息

以一個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ù)通過屬性來表示,用來存放該類實例化的每個對象的狀態(tài)

屬性可以有3種類型:

    public: 其它對象可以訪問private: 只有自身對象可以訪問protected: 只允許相關對象訪問

3.2.2 方法

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

在Person類中,方法有getName()、getName()、getAddress()、setAddress()。

通過方法來檢查或修改對象的屬性,是面向對象中常用的技術。

3.2.3 消息

消息是對象之間的通信機制。

當對象A調(diào)用了對象B的一個方法,則表示對象A正在向對象B發(fā)送一個消息,對象B的響應即為其返回值。

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類圖,可以用來描述類的特征。

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

類圖中:

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

4 面向對象的特性

經(jīng)典的面向對象,擁有三大特性:封裝(encapsulation)、繼承(inheritance)和多態(tài)(polymorphism)。除此之外,面向對象還會加入“組合”的特性。

4.1 封裝

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

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

一個好的設計,是僅暴露出必要的接口來與其它對象進行交互。

4.1.1 接口與實現(xiàn)

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

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

4.1.2 舉例

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

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

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

4.2 繼承

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

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

例如:有一個貓類(Cat)和一個狗類(Dog),這兩個類都有一個屬性可以表示眼睛的顏色。在面向對象中,可以將顏色屬性上移到名為哺乳動物的類中(Mammal)。

4.2.1 超類和子類

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

4.2.2 抽象

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

4.2.3 is-a關系

繼承的關系,也稱作is-a關系,例如,貓is a哺乳動物,狗is a哺乳動物。

多重繼承:

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

4.3 多態(tài)

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

當向一個對象發(fā)送消息時,該對象必須定義其實現(xiàn)來響應消息。

在繼承的關系中,子類從父類中繼續(xù)接口,但每個子列又是各有特點的,因此每個子類各自實現(xiàn)對應的接口功能,實現(xiàn)獨特的應答。

4.4 組合

組合,字母理解,多個對象,組合為一個新的對象,例如,車架、車輪、發(fā)動機等對象組成了汽車對象。

4.4.1 抽象

類比繼承方式,通過組合的方式,也是構建對象的一種機制。實際上,構建 ? 新類方式,就是繼承和組合這兩種方式。

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

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

4.4.2 has-a關系

組合的關系,也稱作has-a關系,例如,汽車has a發(fā)動機。

5 總結

本篇介紹了面向對象的一些基本概念,是面向對象編程的基礎。

相關推薦

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