面向对象程序设计概念
一. 程序設(shè)計(jì)范型
??面向?qū)ο蟪绦蛟O(shè)計(jì)(object-oriented programming,OOP)是一種新的程序設(shè)計(jì)的范型。程序設(shè)計(jì)范型是設(shè)計(jì)程序的規(guī)范、模型和風(fēng)格,它是一類程序設(shè)計(jì)語(yǔ)言的基礎(chǔ)。
面向?qū)ο笤O(shè)計(jì)范型的主要特征是:
?程序=對(duì)象+消息
??面向?qū)ο蟪绦虻幕驹厥菍?duì)象。面向?qū)ο蟪绦虻闹饕Y(jié)構(gòu)特點(diǎn)是:一、程序一般由類的定義和類的使用兩部分組成;二、程序中的一切操作都是向?qū)ο蟀l(fā)送消息來實(shí)現(xiàn)的,對(duì)象收到消息后,啟動(dòng)有關(guān)方法完成相應(yīng)的操作。
??需要說明的是,某一種程序設(shè)計(jì)語(yǔ)言不一定與一種程序設(shè)計(jì)范型相對(duì)應(yīng)。實(shí)際上具有兩種或多種范型特征的程序設(shè)計(jì)語(yǔ)言,即混合型語(yǔ)言。例如,C++就不是純粹的面向?qū)ο蟪绦蛟O(shè)計(jì)范型的語(yǔ)言,而是具有面向過程程序設(shè)計(jì)范型和面向?qū)ο笤O(shè)計(jì)范型的混合性設(shè)計(jì)語(yǔ)言。
二. 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念
1. 對(duì)象
?現(xiàn)實(shí)中的對(duì)象,具有以下特征:
2. 類
??類是一組具有相同屬性和行為的對(duì)象的抽象。類與對(duì)象之間的關(guān)系是抽象與具體的關(guān)系。類是對(duì)多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果。
3. 消息與方法
??面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象之間也需要聯(lián)系,稱為對(duì)象的交互。面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)必須提供一種機(jī)制允許一個(gè)對(duì)象與另一個(gè)對(duì)象的交互。這種機(jī)制稱為消息傳遞。
??對(duì)象所能實(shí)現(xiàn)的行為(操作),在程序設(shè)計(jì)方法中稱為方法。它們是通過調(diào)用相應(yīng)的函數(shù)來實(shí)現(xiàn)的,在C++語(yǔ)言中方法是通過成員函數(shù)來實(shí)現(xiàn)的。方法包括界面和方法體兩部分。方法的界面給出了方法名和調(diào)用協(xié)議(相對(duì)于C++中的成員函數(shù)的函數(shù)名和參數(shù)表);方法體則是實(shí)現(xiàn)某種操作的一系列計(jì)算步驟,也就是一段程序(相對(duì)于C++中成員函數(shù)的函數(shù)體)。
三. 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征
1. 抽象
??抽象是通過特定的實(shí)例(對(duì)象)抽取共同性質(zhì)后形成概念的過程。面向?qū)ο蟪绦蛟O(shè)計(jì)中的抽象包括兩個(gè)方面:數(shù)據(jù)抽象和代碼抽象(或稱為行為抽象)。前者描述某類對(duì)象的屬性或狀態(tài),也就是此類對(duì)象區(qū)別于彼類對(duì)象的特征物理量:后者描述了某類對(duì)象的共同行為特征或具有的共同功能。對(duì)于一組具有相同屬性和行為的對(duì)象,可以抽象成一種類型,在C++中,這種類型就稱為類(class),類是對(duì)象的抽象,而對(duì)象是類的實(shí)例。
??抽象在系統(tǒng)分析、系統(tǒng)設(shè)計(jì)以及程序設(shè)計(jì)的發(fā)展中一直起著重要的作用。在面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,對(duì)一個(gè)具體問題的抽象分析的結(jié)果,是通過類來描述和實(shí)現(xiàn)的。
2. 封裝
??在現(xiàn)實(shí)世界中,所謂封裝就是把某個(gè)事物包圍起來,使外界不知道該事物的具體內(nèi)容。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,封裝是指把數(shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來放在對(duì)象內(nèi)部,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)象好像是一個(gè)不透明的黑盒子.表示對(duì)象屬性的數(shù)據(jù)和實(shí)現(xiàn)各個(gè)操作的代碼都被封裝在黑盒子里,從外面是看不見的,更不能從外面直接訪問或修改這些數(shù)據(jù)及代碼。使用一個(gè)對(duì)象的時(shí)候,只需知道它向外界提供的接口而無需知道它的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)和實(shí)現(xiàn)操作的算法。
??C++對(duì)象中的函數(shù)名就是對(duì)象的對(duì)外接口,外界可以通過函數(shù)名來調(diào)用這些函數(shù)來實(shí)現(xiàn)某些行為(功能)。封裝的好處是可以將對(duì)象的使用者與設(shè)計(jì)者分開,大大降低了人們操作對(duì)象的復(fù)雜度。使用者不必知道對(duì)象行為實(shí)現(xiàn)的細(xì)節(jié),只需要使用設(shè)計(jì)者提供的接口的功能即可自由地操作對(duì)象。封裝的結(jié)果實(shí)際上隱藏了復(fù)雜性,并提供了代碼重用性,從而減輕了開發(fā)軟件系統(tǒng)的難度。
??封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)方法的一個(gè)重要特性,封裝具有兩方面的含義:一是將有的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,各個(gè)對(duì)象相對(duì)獨(dú)立、互不干擾;二是將對(duì)象中某此據(jù)與操作代碼對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界消息,這種對(duì)外界隱蔽的做法稱為信息隱蔽。信息隱蔽有利于數(shù)據(jù)安全,防止無關(guān)人員訪和修改數(shù)據(jù)。
3. 繼承
??繼承是面向?qū)ο筌浖夹g(shù)當(dāng)中的一個(gè)概念。如果一個(gè)類別A“繼承自”另一個(gè)類別B,就把這個(gè)A稱為“B的子類別”,而把B稱為“A的父類別”也可以稱“B是A的超類”。在令子類別繼承父類別的同時(shí),可以重新定義某些屬性,并重寫某些方法,即覆蓋父類別的原有屬性和方法,使其獲得與父類別不同的功能。另外,為子類別追加新的屬性和方法也是常見的做法。 從繼承源上分,繼承又分為單繼承和多繼承。
4. 多態(tài)
??面向?qū)ο笙到y(tǒng)的多態(tài)性是指不同的對(duì)象收到相同的消息時(shí)執(zhí)行不同的操作。
??C++語(yǔ)言支持兩種多態(tài)性即編譯時(shí)的多 態(tài)性和運(yùn)行時(shí)的多態(tài)性。 編譯時(shí)的多態(tài)性是通過函數(shù)重載(包括運(yùn)算符重載)來實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過虛函數(shù)來實(shí)現(xiàn)的。
??多態(tài)性增強(qiáng)了軟件的靈活性和重用性,為軟件的開發(fā)與維護(hù)提供了極大的便利。尤其是采用了虛函數(shù)和動(dòng)態(tài)聯(lián)編機(jī)制后,允許用戶以更為明確、易懂的方式建立通用的軟件。
總結(jié)
以上是生活随笔為你收集整理的面向对象程序设计概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgresql mysql数据类型
- 下一篇: Kali Linux学习之arp地址欺骗