面向?qū)ο蟪绦蛟O(shè)計(jì)-第二章_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-第二章_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-第二章_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-第二章_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)-第二章_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第二章面象對(duì)象的程序設(shè)計(jì)2.1、對(duì)象和類2.2、數(shù)據(jù)的抽象和封裝2.3、繼承性2.4、多態(tài)性2.1、對(duì)象和類1、為什么要引入對(duì)象和類面向?qū)ο蟪绦蛟O(shè)計(jì)方法(OOP)的出發(fā)點(diǎn)是彌補(bǔ)面向過程程序設(shè)計(jì)方法中的缺點(diǎn)數(shù)據(jù)的流動(dòng)性→分離→不能直接反映客觀引入對(duì)象和類:將數(shù)據(jù)與方法緊密結(jié)合數(shù)據(jù)不能流動(dòng)直接反映客觀世界保護(hù)數(shù)據(jù)不會(huì)被外界的函數(shù)意外的改變2.1、對(duì)象和類2、對(duì)象和類的概念對(duì)象是現(xiàn)實(shí)世界中一個(gè)實(shí)體類是對(duì)多個(gè)實(shí)體進(jìn)行綜合抽象的結(jié)果小紅小明

實(shí)例對(duì)象

學(xué)生類

類2.1、對(duì)象和類3、對(duì)象的特征對(duì)象的名字:用于區(qū)分不同的對(duì)象對(duì)象的屬性:是對(duì)實(shí)體某一方面的描述,反映了實(shí)體間的區(qū)別不同類的對(duì)象、同類的對(duì)象對(duì)象的操作:是對(duì)象能夠進(jìn)行的行為2.1、對(duì)象和類對(duì)象的例子對(duì)象名稱:小明對(duì)象屬性:學(xué)歷:大學(xué)年齡:21

專業(yè):歷史系對(duì)象操作:上課吃飯2.1、對(duì)象和類4、對(duì)象的交互對(duì)象不是孤立的,他們之間存在著各種聯(lián)系

對(duì)象之間的相互交互是通過消息傳遞來進(jìn)行的例如銀行帳戶對(duì)象bankAccount、顧客對(duì)象:顧客對(duì)象發(fā)送一個(gè)取款的消息,要求取款:具體的做法是:

在BankAccount中定義一個(gè)公有的方法——取款來供顧客對(duì)象調(diào)用。這個(gè)取款的方法就是一個(gè)公有的消息2.1、對(duì)象和類5、對(duì)象之間的消息消息的性質(zhì):(1)同一對(duì)象可以接受不同形式的多個(gè)消息,作出不同的響應(yīng)(2)不同對(duì)象可以接受相同的消息,所作出的響應(yīng)可以是不同的(3)消息之間的發(fā)送可以不考慮具體的接受者,對(duì)象可以響應(yīng)消息,也可以不響應(yīng)多態(tài)2.1、對(duì)象和類5、對(duì)象之間的消息消息的分類:(1)公有消息:由其他對(duì)象向自己直接發(fā)送的消息(2)私有消息:由對(duì)象自己向自己發(fā)送的消息2.2、數(shù)據(jù)的抽象和封裝1、數(shù)據(jù)的抽象抽象是對(duì)特定的實(shí)例抽取共同性形成概念的過程,它是面向?qū)ο蟪绦蛟O(shè)計(jì)的一種基本思想抽象是對(duì)象系統(tǒng)的簡(jiǎn)化描述和規(guī)范說明,它強(qiáng)調(diào)了系統(tǒng)中的一部分細(xì)節(jié)和特性,例如做什么;而忽略其他部分,例如如何做2.2、數(shù)據(jù)的抽象和封裝舉例:庫(kù)房管理軟件中對(duì)錄音機(jī)進(jìn)行抽象

屬性:長(zhǎng)、寬、高、生產(chǎn)廠家等

行為:放音、錄音、停止、倒帶、快進(jìn)等其它對(duì)象無(wú)需關(guān)心錄音機(jī)的放音是怎么實(shí)現(xiàn)的,這些是在類的實(shí)現(xiàn)中要考慮的。2.2、數(shù)據(jù)的抽象和封裝2、數(shù)據(jù)的封裝

就是將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作組成一個(gè)實(shí)體,數(shù)據(jù)的表示方式和對(duì)數(shù)據(jù)的操作細(xì)節(jié)被隱藏起來,用戶通過操作接口對(duì)數(shù)據(jù)進(jìn)行操作MakeDeposit()WithDraw()Transfer()接口顧客BalanceOwnerMakeDeposit()WithDraw()Transfer()Account()實(shí)現(xiàn)細(xì)節(jié)(對(duì)用戶不可見)數(shù)據(jù)方法2.3、繼承性1、繼承性的概念繼承性是面向?qū)ο蟮幕咎卣鳎磉_(dá)了對(duì)象類之間一般與特殊的關(guān)系,使類之間形成層次模型基類派生類2.3、繼承性2、繼承的好處

繼承機(jī)制為程序員提供了一種組織,構(gòu)造和重用類的基本手段

繼承可以使基類的數(shù)據(jù)和操作可以被另一個(gè)類(派生類)重用,在派生類只需要描述基類中沒有的數(shù)據(jù)和操作2.3、繼承性3、繼承的分類(1)單繼承:每個(gè)派生類只直接繼承了一個(gè)基類的特征

(2)多繼承:多個(gè)基類派生出一

個(gè)派生類2.3、繼承性舉例:哺乳動(dòng)物和貓兩個(gè)對(duì)象貓屬于哺乳動(dòng)物,具有恒溫,胎生等特性貓具有與其它哺乳動(dòng)物不同的特性哺乳動(dòng)物貓繼承關(guān)系箭頭表示貓繼承了哺乳動(dòng)物所有的屬性,關(guān)系不能顛倒繼承的特點(diǎn):

(1)派生類獲得了基類所有屬性和方法

(2)派生類還要有自己獨(dú)有的屬性或方法2.3、繼承性4、繼承與封裝的關(guān)系似乎存在矛盾:

封裝性要求外部看不到對(duì)象內(nèi)部的屬性和操作

代碼的共享似乎會(huì)暴露對(duì)象內(nèi)部的代碼實(shí)際上不矛盾:

系統(tǒng)內(nèi)部,具有繼承關(guān)系的兩個(gè)類被當(dāng)作兩個(gè)獨(dú)立封裝好的類來處理1

繼承和封裝并不矛盾,在減少編程代碼量這一點(diǎn)上是一致的22.4、多態(tài)性1、多態(tài)性的概念多態(tài)性就是特定功能有多種實(shí)現(xiàn)方法,表現(xiàn)為:(2)多態(tài)性就是不同函數(shù)使用同一個(gè)函數(shù)名,即同樣的接口實(shí)現(xiàn)不同的操作(1)多態(tài)性就是不同對(duì)象收到相同消息后,執(zhí)行不同動(dòng)作包括成員函數(shù)、外部函數(shù)2.4、多態(tài)性例子:一段繪圖功能代碼——不使用多態(tài)性

Shape類:屬性type

param

方法DrawCircle

DrawSquare

DrawMeCircle和Square類繼承Shape類:2.4、多態(tài)性目標(biāo):無(wú)論Circle或Square類的一個(gè)對(duì)象,調(diào)用同

一個(gè)成員函數(shù)DrawMe

voidShape::DrawMe()

{

siwtch(Shape.Type){

case“Circle”shape.DrawCircle();

case“Square”shape.DrawSquare();

}}類方法//判別圖形類型,調(diào)用各自對(duì)象的DrawMe方法//如果是圓形,調(diào)用圓的方法//如果是矩形//如果是直線?問題:如果增加了一個(gè)派生類Line,需要修改成員函數(shù)DrawMe,程序不易維護(hù)case“Line”shape.DrawLine();

2.4、多態(tài)性解釋:ShapeCircleSquare其它對(duì)象發(fā)送消息函數(shù)名?只知道屬于Shape類不知道調(diào)用哪個(gè)方法

Shape類:

屬性type

方法DrawCircle

DrawSquare

所以定義DrawMeDrawMe2.4、多態(tài)性使用多態(tài)性(采用虛函數(shù)方法):

Shape類:屬性type

方法DrawMe(虛函數(shù))Circle類:

屬性type

方法DrawMe:實(shí)現(xiàn)畫圓:DrawCircleSquare類:屬性type

方法DrawMe:實(shí)現(xiàn)畫矩形:DrawSquare優(yōu)點(diǎn):在執(zhí)行時(shí),無(wú)論針對(duì)哪個(gè)類的對(duì)象,都通過調(diào)用函數(shù)DrawMe畫出其圖形,由系統(tǒng)選擇恰當(dāng)?shù)某蓡T函數(shù)來執(zhí)行

增加類時(shí)也無(wú)需修改代碼接口相同、無(wú)需修改代碼2.4、多態(tài)性2、多態(tài)性的分類(1)編譯多態(tài)性

編譯時(shí)多態(tài)是通過重載來實(shí)現(xiàn)的。編譯處理程序在編譯的時(shí)侯根據(jù)函數(shù)的參數(shù)來確定不同的同名函數(shù)(2)運(yùn)行多態(tài)性

運(yùn)行時(shí)多態(tài)性是通過虛函數(shù)來實(shí)現(xiàn)的,程序運(yùn)行時(shí)使用程序的那個(gè)函數(shù)版本,在運(yùn)行的時(shí)侯通過對(duì)象發(fā)送的消息來確定(剛才的例子)結(jié)論:無(wú)論哪種類型都無(wú)需程序員參與,由系統(tǒng)實(shí)現(xiàn)本章小結(jié)本章介紹了面向?qū)ο蟮膸讉€(gè)基本概念

面向?qū)ο笞罨A(chǔ)的概念就是對(duì)象,對(duì)象是對(duì)客觀世界中實(shí)體的認(rèn)識(shí)。

對(duì)象之間也是有聯(lián)系的。

具有相同類型屬性和操作的對(duì)象可以被抽象為類,類是對(duì)象的模板面向?qū)ο笥腥齻€(gè)特性封裝性:對(duì)象中的屬性和操作都被隱藏起來,只把接口暴露

給外界。

繼承性:對(duì)象間的一種層次關(guān)系,某個(gè)對(duì)象繼承了另一個(gè)對(duì)

象就具有了那個(gè)對(duì)象所有的屬性和方法。

多態(tài)性:同一個(gè)操作作用在不同對(duì)象的時(shí)候表現(xiàn)出的不同行

為。思考與練習(xí)題1、什么是程序設(shè)計(jì),什么是編程語(yǔ)言,二者是什么關(guān)系?2、結(jié)構(gòu)化程序設(shè)計(jì)的思路是什么?3、什么是面向?qū)ο蟪绦蛟O(shè)計(jì)?4、為什么說

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論