面向對象程序設計的4個主要特點


面向對象程序設計的4個主要特點是什么?

抽象

封裝

繼承

多態

類和對象體現了抽象和封裝

基於以上四點的程序稱為面向對象的程序設計。

什么是類?

前邊我們學習過c++中的結構體,struct的使用是先聲明,然后定義一個該結構體的變量,最后再初始化(賦值)

其實結構體的聲明當中有很多不同數據類型的成員,在一個結構體當中,這就是對屬性的封裝,但是結構體與類相比較,還缺少了一個重要的環節,結構體當中只有屬性,只封裝了屬性,但沒有封裝相應的操作,也就是沒有封裝操作成員屬性的函數。

類當中有兩個方面,一是封裝屬性,二是封裝函數。在自己聲明的類當中要既有屬性又有函數,這就是類。

什么是對象?

在結構體中聲明一個結構體就相當於我們設計了一個類,定義一個結構體就相當於我們定義了一個對象

比如 聲明一個結構體相當於封裝了一個類(但缺少相應的操作)

struct Student{

private int num;

string name;

float score;

string address;

這里如果再有函數就是一個類了

};

定義給兩個結構體,相當於我們定義了兩個對象

Student student1,student2;

初始化結構體,相當於對象的初始化


 

客觀世界中任何一個事物都可以看成一個對象(Object),對象可以是自然物體(如汽車、狗熊)也可以是一種邏輯(如班級、連隊)。

任何一個對象都有兩個要素:一個是靜態特征,如班級專業,班級人數,所在教室,這種靜態特征稱為屬性。

                                             一個是動態特征,如班級學習、班級開會、班級體育比賽,這種動態特征稱為行為(或功能)。

封裝的意義?

把一部分或全部屬性和部分功能(函數)對外界屏蔽,就是從外界(類的大括號之外)看不到,不可知,這就是封裝的意義。

實際上就是用了一個后邊會介紹的關鍵字 private 私有化關鍵字來完成,就是隱蔽,比如賬號的密碼,你如果玩網絡游戲,你的賬號密碼別人都可以看到,訪問,所以要把它封裝。

封裝兩個方面的含義:一是將有關數據和操作代碼封裝在對象當中,形成一個基本單位,各個對象之間相對獨立互不干擾。

                                   二是將對象中某些屬性和操作私有化,已達到數據和操作信息隱蔽,有利於數據安全,防止無關人員修改。


 

類與對象之間的關系是什么?

程序設計當中,常用到抽象這個詞,這個詞就是解釋類與對象之間關系的詞。

類與對象之間的關系就是抽象的關系。

一句話來說明:類是對象的抽象,而對象則是類得特例,即類的具體表現形式。

舉例說明上面的那句話:

我們都是人類,人類是不是有自己的屬性,屬性有年齡、名字、ID、性別,人類是不是有功能,即操作能力,能說話、能吃飯、能睡覺,能思考解決問題。

我們大家都是人類,我們彼此卻又不相同,我們每一個人具有自己的屬性的能力,每一個人就是人類的某一個對象。

把我們共同的屬性和功能向上抽取,這就是抽象,抽象程一個人類。


 

繼承

面向對象的繼承是為了軟件重用,簡單理解就是代碼復用,把重復使用的代碼精簡掉的一種手段。

如何精簡,當一個類中已經有了相應的屬性和操作的代碼,而另一個類當中也需要寫重復的代碼,那么就用繼承方法,把前面的類當成父類,后面的類當成子類,子類繼承父類,理所當然。就用一個關鍵字extends就完成了代碼的復用。


 

多態

沒有繼承就沒有多態,繼承是多態的前提。

舉例來說明多態

貓、狗、鳥都是動物

動物不同於植物,貓、狗、鳥都可以叫、都可以吃

這些功能可以同時繼承自動物類,貓類、狗類、鳥類都是動物類的子類

但是貓的叫聲是“喵喵喵” ,狗的叫聲是“汪汪汪”,鳥的叫聲是“吱吱支”

貓愛吃魚,狗愛吃骨頭,鳥愛吃蟲子

這就是雖然繼承自同一父類,但是相應的操作卻各不相同,這叫多態。

由繼承而產生的不同的派生類,其對象對同一消息會做出不同的響應。


 

知道了以上概念就可以進行面向對象編程(Object Oriented Programming,簡稱OOP)

現在開始聲名一個學生類:

class  Student{

int num;

string name;

char sex;

void display(){

cout<<"num:"<<num<<endl;

cout<<"name:"<<name<<endl;

cout<<"sex:"<<sex<<endl;

}

};

封裝一個類,然后用這個類定義兩個對象

Student student1,student2;

如果是重要或是私有的信息,不讓外界知道,可以進行私有化處理:

class {

private:

int num;

string name;

char sex;

public:

void display(){

cout<<"num:"<<num<<endl;

cout<<"name:"<<name<<endl;

cout<<"sex:"<<sex<<endl;

}

}student1,student2;

在C++中如果不定義private和public,則系統默認為是私有。

還可以用無名類來定義對象,必須要求封裝類之后同時定義對象。


 

對象成員的引用或初始化

私有化的不可以這樣寫

不能 student1.num=100001;student1.name=”張三";針對於public:

對象調用函數 student1.display();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM