面向对象程序设计基本概念
面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念
?
重點(diǎn): C++中的 多態(tài) 和 指針間接賦值
1): 多態(tài)的三個條件
? ? ? ??a: 子類繼承父類
? ? ? ??b: 虛函數(shù)(虛表及虛表指針)
? ? ? ??c: 父類引用或指針指向子類對象(參數(shù)類型的逆變和返回類型的協(xié)變)
? ? ? ? ? ? ? ??// 參數(shù)類型的逆變(contravariance)是指實(shí)現(xiàn)的參數(shù)類型是接口或委托定義的參數(shù)類型的父類。
? ? ? ?? ? ? ?? // 返回類型的協(xié)變(covariance)指返回類型是接口或委托定義返回類型的子類
2): 指針間接賦值的三個條件
? ? ? ??a: 外部實(shí)參和內(nèi)部形參
? ? ? ??b: 外部實(shí)參取地址傳給內(nèi)部形參
? ? ? ??c: 形參通過解引用可以間接修改了外部實(shí)參
?
3): 變量名和變量地址:
? ? ? ??變量名實(shí)際上是一個符號地址,在對程序編譯連接時由系統(tǒng)給每一個變量名分配一個內(nèi)存地址。在程序中從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從其存儲單元中讀取數(shù)據(jù)。
?
?
1、對象
定義:對象是指客觀存在的事物,由一組屬性和行為構(gòu)成。
對象 = 屬性 + 行為
在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對象之間也需要聯(lián)系,我們稱作對象的交互。
?
2、類
定義:
(1)類是具有共同特征的對象的抽象。
(2)類是對具有共同屬性和行為的一類事物的抽象描述。 共同的屬性被描述為類的數(shù)據(jù)成員,共同行為被描述為類的成員函數(shù)。
?
3、實(shí)例
定義:實(shí)例是由類所創(chuàng)建的具體對象,即給類定義的數(shù)據(jù)賦予具體值,操作賦予確定處理程序而所獲得的實(shí)際對象。
?
4、消息
定義:
(1)一個對象向另一個對象發(fā)出的請求。
(2)是向某對象請求服務(wù)的一種表達(dá)方式,是對象與外界、對象與其他對象之間聯(lián)系的工具。
?
性質(zhì):
(1)同一個對象可以接收不同形式的多個消息,作出不同的響應(yīng)。
(2)相同形式的消息可以傳遞給不同的對象,所作出的響應(yīng)可不同。
(3)消息的發(fā)送可以不考慮具體的接受者。
?
5、方法
定義:是對某對象接收消息后所采取的操作的描述。
?
6、抽象
定義:對實(shí)例進(jìn)行分析,抽取出共同性質(zhì)。
?
7、封裝(Encapsulation)
定義:
(1)將數(shù)據(jù)抽象的外部接口與內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)清楚地分開
(2)封裝就是將抽象得到的數(shù)據(jù)和行為相結(jié)合,形成一個有機(jī)的整體
?
作用:
(1)可以隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼模塊化。
(2)封裝的目的是增強(qiáng)安全性和簡化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只是要通過外部接口,一特定的訪問權(quán)限來使用類的成員。
(3)封裝主要依靠對類、數(shù)據(jù)和方法的訪問控制,從語法上講就是加上private、protected、public等關(guān)鍵詞。
(4)封裝的意義在于保護(hù)或者防止代碼(數(shù)據(jù))被我們無意中破壞。在面向?qū)ο蟪绦蛟O(shè)計(jì)中數(shù)據(jù)被看作是一個中心的元素并且和使用它的函數(shù)結(jié)合的很密切,從而保護(hù)它不被其它的函數(shù)意外的修改。
?
8、繼承(InHeritance)
定義:
(1)子類可以從父類繼承屬性和操作,提高編程效率
(2)通過繼承關(guān)系利用已有類構(gòu)造新類
?
作用:代碼重用
(1)避免代碼重復(fù)開發(fā),減少代碼和數(shù)據(jù)冗余
(2)通過增強(qiáng)一致性來減少模塊間的接口和界面
?
9、多態(tài)(Polymorphism)
定義:
(1)不同的對象收到相同的消息時產(chǎn)生多種不同的行為方式。
(2)多態(tài)性是允許你將父對象設(shè)置成為和一個或更多的他的子對象相等的技術(shù)。
(3)允許將子類類型的指針賦值給父類類型的指針。
(4)同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。
?
作用:接口重用
?
(1)編譯時的多態(tài)性
通過函數(shù)重載和運(yùn)算符重載實(shí)現(xiàn)。
對于非虛的成員來說,系統(tǒng)在編譯時,根據(jù)傳遞的參數(shù)、返回的類型等信息決定實(shí)現(xiàn)何種操作。
?
(2)運(yùn)行時的多態(tài)性
通過類的繼承關(guān)系和虛函數(shù)來實(shí)現(xiàn)。
程序在執(zhí)行前根據(jù)函數(shù)名和參數(shù)無法確定應(yīng)該調(diào)用哪個函數(shù),必須在程序執(zhí)行的過程中根據(jù)具體的情況來動態(tài)確定。
?
編譯時的多態(tài)性為我們提供了運(yùn)行速度快的特點(diǎn),而運(yùn)行時的多態(tài)性則帶來了高度靈活和抽象的特點(diǎn)。
?
實(shí)現(xiàn)
(1)接口多態(tài)性
(2)繼承多態(tài)性
(3)通過抽象類實(shí)現(xiàn)的多態(tài)性
?
10、重載(Overload)
定義:將語義、功能相似的幾個函數(shù)用同一個名字表示,但參數(shù)或返回值不同(包括類型、順序不同)
?
特征:
(1)相同的范圍(在同一個類中);
(2)函數(shù)名字相同;
(3)參數(shù)不同;
(4)virtual 關(guān)鍵字可有可無。
?
11、重寫(Overwrite)
定義:是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù)
?
特征:
(1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual關(guān)鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)。
?
12、覆蓋(Override)
定義:是指派生類函數(shù)覆蓋基類函數(shù)
特征:
(1)不同的范圍(分別位于派生類與基類);
(2)函數(shù)名字相同;
(3)參數(shù)相同;
(4)基類函數(shù)必須有virtual 關(guān)鍵字。
?
?
13、面向?qū)ο蟪绦蛟O(shè)計(jì)
定義:面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新的程序設(shè)計(jì)范型。
?
特征:
程序 = 對象 + 消息
?
主要特點(diǎn):
(1)程序由類的定義和類的使用兩部分組成,
在主程序中定義各對象并規(guī)定它們之間傳遞消息的規(guī)律。
(2)程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實(shí)現(xiàn)的,
對象接收到消息后,啟動有關(guān)方法完成相應(yīng)操作。
(3)類有繼承關(guān)系產(chǎn)生相互間的關(guān)系
?
14、面向過程程序設(shè)計(jì)
定義:采用模塊化、按照解決問題的步驟分步設(shè)計(jì)程序。
?
面向過程程序設(shè)計(jì)思想的核心--功能分解
面向過程程序設(shè)計(jì)將數(shù)據(jù)結(jié)構(gòu)和過程作為兩個實(shí)體對待,重點(diǎn)在過程。
?
程的設(shè)計(jì)存在以下缺點(diǎn):
(1)可重用性差
(2)可維護(hù)性差
(3)安全性差
上缺點(diǎn)的原因:數(shù)據(jù)和過程的分離
?
總結(jié)
以上是生活随笔為你收集整理的面向对象程序设计基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3. golang 流程控制
- 下一篇: 如何理解深度学习分布式训练中的large