面向?qū)ο蟪绦蚍椒ㄕn件_第1頁
面向?qū)ο蟪绦蚍椒ㄕn件_第2頁
面向?qū)ο蟪绦蚍椒ㄕn件_第3頁
面向?qū)ο蟪绦蚍椒ㄕn件_第4頁
面向?qū)ο蟪绦蚍椒ㄕn件_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第九章 面向?qū)ο蟪绦蚍椒▽W(xué)習(xí)要求: 掌握面向?qū)ο蟪绦蛟O(shè)計(jì)語言的發(fā)展史。 了解主要的一些程序設(shè)計(jì)范型。 熟練掌握面向?qū)ο蟪绦蛟O(shè)計(jì)語言的三大特性:封裝、繼承和多態(tài)。 熟練掌握面面向?qū)ο蟪绦蛟O(shè)計(jì)語言的基本概念1第1頁,共46頁。9.1 概述 目前,軟件的生產(chǎn)方式也正在發(fā)生一場(chǎng)類似的變革 面向?qū)ο笫擒浖绦蛟O(shè)計(jì)的一種新思想 面向?qū)ο蟮幕舅枷?:從現(xiàn)實(shí)世界中客觀存在的事物(對(duì)象)出發(fā)構(gòu)造系統(tǒng),并在系統(tǒng)構(gòu)造中運(yùn)用人類的自然思維方式 2第2頁,共46頁。9.1.1 面向?qū)ο蟮挠蓙怼皩?duì)象“表示現(xiàn)實(shí)世界中的某個(gè)具體的事物 現(xiàn)實(shí)世界中的事物可分為兩大部分:物質(zhì)和意識(shí) 物質(zhì)表達(dá)的是具體的事物 意識(shí)描述的是某一個(gè)抽

2、象的概念 例如:“自行車”和“這輛白色的自行車”,后者是物質(zhì),使具體的客觀存在,前者是意識(shí),它是一個(gè)抽象的概念,是對(duì)客觀存在的事物的一種概括。 3第3頁,共46頁。問題領(lǐng)域 現(xiàn)實(shí)世界中的事物可直接映射到面向?qū)ο笙到y(tǒng)的問題領(lǐng)域 現(xiàn)實(shí)世界中的物質(zhì)可對(duì)應(yīng)于面向?qū)ο笙到y(tǒng)中的“對(duì)象” 現(xiàn)實(shí)世界中的意識(shí)可對(duì)應(yīng)面向?qū)ο笙到y(tǒng)中的抽象概念-類 4第4頁,共46頁。問題領(lǐng)域 物質(zhì): 一輛白色的自行車意識(shí): 自行車 具體事物: 一個(gè)對(duì)象-自行車的實(shí)例抽象概念: 自行車類 現(xiàn)實(shí)世界問題領(lǐng)域 面向?qū)ο髥栴}領(lǐng)域 現(xiàn)實(shí)世界與面向?qū)ο笙到y(tǒng)之間的對(duì)應(yīng)關(guān)系 5第5頁,共46頁。9.1.2 面向?qū)ο蠓椒ǖ陌l(fā)展面向?qū)ο蠓椒ǎ菏抢贸?/p>

3、象、封裝等機(jī)制,借助對(duì)象、類、繼承、消息傳遞等概念進(jìn)行軟件系統(tǒng)構(gòu)造的軟件開發(fā)方法。用面向?qū)ο笏枷霕?gòu)造軟件系統(tǒng)的主要內(nèi)容 :(P208例子) 對(duì)象對(duì)象的屬性和操作-一個(gè)完整的對(duì)象類繼承一個(gè)系統(tǒng)就是由各個(gè)對(duì)象組成的。6第6頁,共46頁。9.1.2 面向?qū)ο蠓椒ǖ陌l(fā)展史200090年代80年代70年代60年代 面向?qū)ο蠓椒ǖ陌l(fā)展Algol語言中引入引入塊結(jié)構(gòu)(beginend),第一次嘗試為數(shù)據(jù)提供保護(hù)和封裝數(shù)據(jù)抽象類型概念的發(fā)展-面向?qū)ο蟮幕舅枷耄簲?shù)據(jù)結(jié)構(gòu)+操作 = 實(shí)體Simula 67語言引入對(duì)象和消息機(jī)制。-面向?qū)ο笳Z言的鼻祖SmallTalk 80 商品化-純粹的OO編程語言產(chǎn)生了Ada

4、語言,支持抽象數(shù)據(jù)類型的最重要的語言之一。大量的OOPL出現(xiàn)-面向?qū)ο蠓椒ㄗ呦驅(qū)嵱?986年,首屆“面向?qū)ο缶幊?、系統(tǒng)、語言和應(yīng)用國(guó)際會(huì)議”O(jiān)bject-c,C+,Eiffel, Java-有廣泛影響的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。 面向?qū)ο筌浖こ贪l(fā)展。7第7頁,共46頁。面向?qū)ο笙嚓P(guān)術(shù)語面向?qū)ο螅∣O:Object Oriented):面向?qū)ο蠓治觯∣OA:Object Oriented Analyse)面向?qū)ο笤O(shè)計(jì)(OOD:Object Oriented Design)面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP:Object Oriented Programming)面向?qū)ο髷?shù)據(jù)庫(kù)(OODB:Object Ori

5、ented DataBase) 8第8頁,共46頁。9.2 基本概念-對(duì)象 抽象 對(duì)象是無處不在的 對(duì)象是數(shù)據(jù)以及可以對(duì)這些數(shù)據(jù)施加的操作結(jié)合在一起所構(gòu)成的獨(dú)立實(shí)體的總稱。 9第9頁,共46頁。對(duì)象在軟件系統(tǒng)開發(fā)的各個(gè)階段的不同表現(xiàn)形式 分析階段:對(duì)象是一種粗略的描述設(shè)計(jì)階段:對(duì)象的數(shù)據(jù)和操作進(jìn)一步得到細(xì)化,對(duì)象的特性得到明確的描述編程階段:通過定義類,并將其實(shí)例化從而得到具體的對(duì)象運(yùn)行階段:對(duì)象成為內(nèi)存中可標(biāo)識(shí)的區(qū)域,存放數(shù)據(jù)和操作代碼 10第10頁,共46頁。一個(gè)對(duì)象類的定義與對(duì)象實(shí)例化 /-/例9.1 演示:對(duì)象類的定義與對(duì)象實(shí)例化/-/定義一個(gè)電話類class Phone privat

6、e: char owner10; /電話主人姓名 char address50; /電話所在地 char phoneNumber10; /電話號(hào)碼11第11頁,共46頁。一個(gè)對(duì)象類的定義與對(duì)象實(shí)例化public: Phone(char *owner, char * address, char * phoneNum); /構(gòu)造函數(shù) char * getPhoneNumber(); /取電話號(hào)碼 char * getOwner(); /取電話主人姓名 char * getAddress(); /取電話所在地 char *changeOwner(char *); /電話過戶 char *dial(c

7、har *); /撥號(hào);/對(duì)象實(shí)例化Phone myPhone(“張三”,”河南鄭州”,”1234567”);12第12頁,共46頁。9.2 基本概念-消息 1.軟件系統(tǒng)中的對(duì)象之間存在依存關(guān)系:對(duì)象通過接收消息,對(duì)外提供服務(wù)發(fā)揮能動(dòng)性對(duì)象通過發(fā)送消息,請(qǐng)求其他對(duì)象為它服務(wù)2. 消息:消息是對(duì)象之間相互請(qǐng)求和相互協(xié)作的途徑,要求某個(gè)對(duì)象執(zhí)行類中所定義的某個(gè)操作的規(guī)格說明。 3. 消息的幾個(gè)關(guān)鍵要素:消息的發(fā)送者、消息的接收者、消息名、參數(shù)及應(yīng)答。注:消息是對(duì)象之間通信的唯一途徑13第13頁,共46頁。老板對(duì)下屬說: “明天早上八點(diǎn)以前把有關(guān)飲料的市場(chǎng)調(diào)查報(bào)告放到我的辦公桌上”。消息的發(fā)送者消息

8、的接收者參數(shù)1參數(shù)2參數(shù)3注意在此消息名是: 給我市場(chǎng)調(diào)查報(bào)告14第14頁,共46頁。消息的幾個(gè)特性 同一對(duì)象可以接收不同形式的消息,產(chǎn)生不同的響應(yīng) 相同形式的消息可以送給不同對(duì)象,所做出的響應(yīng)可截然不同 消息的發(fā)送可以不考慮具體的接收者,對(duì)象可以響應(yīng)消息,也可以不理會(huì)15第15頁,共46頁。公有消息和私有消息 私有消息:由對(duì)象自己向本身發(fā)送的消息,這些消息不對(duì)外開放,外界不必了解它 公有消息:由外界直接向?qū)ο蟀l(fā)送的消息 16第16頁,共46頁。在程序設(shè)計(jì)語言中的消息在具體的程序中,消息的表現(xiàn)形式為對(duì)象在其操作過程中對(duì)另一個(gè)對(duì)象的服務(wù)程序的調(diào)用,也就是函數(shù)(或過程)調(diào)用。例:給電話對(duì)象發(fā)送一個(gè)

9、消息char * ifdial;ifdial = myPhone.dial(“82904456”); 3. 不是所有的函數(shù)調(diào)用都是消息 17第17頁,共46頁。9.2 基本概念-類 1.類是人類抽象思維的產(chǎn)物。2.對(duì)一組具有相同數(shù)據(jù)和相同操作的對(duì)象的描述。3.類是對(duì)一組對(duì)象的抽象概括,而每個(gè)對(duì)象都是某一個(gè)類的一個(gè)具體的實(shí)例。 對(duì)象本身不包括實(shí)現(xiàn)操作的代碼,這些代碼在類中定義18第18頁,共46頁。9.2 基本概念-類 1.類是用唯一的類名來標(biāo)識(shí)的,類的定義包括數(shù)據(jù)和操作兩部分。2.類中的數(shù)據(jù)和操作由于訪問權(quán)限的不同,又分為公有的、私有的和受保護(hù)的。 3.類與對(duì)象的關(guān)系 19第19頁,共46頁。

10、9.2 基本概念-實(shí)例 1.由某個(gè)特定類所描述的一個(gè)對(duì)象 2 . 同一個(gè)類的不同實(shí)例之間有以下特點(diǎn):相同的操作集合相同的屬性集合不同的對(duì)象名 對(duì)象和類的實(shí)例是同義詞 20第20頁,共46頁。9.2 基本概念-方法 對(duì)象所能執(zhí)行的操作 在C+中稱為成員函數(shù) 類中定義的函數(shù),描述對(duì)象執(zhí)行操作的算法,即響應(yīng)消息的方法 21第21頁,共46頁。9.3 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法 面向?qū)ο蟪绦蛟O(shè)計(jì)是軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的新方法 增加軟件的可擴(kuò)充性和可重用性 改善并提高程序員的生產(chǎn)能力 控制維護(hù)軟件的復(fù)雜性和軟件維護(hù)的開銷 22第22頁,共46頁。9.3.1 程序設(shè)計(jì)范型 范型:指一種通用的一般化的關(guān)于現(xiàn)實(shí)世界

11、的模型。它體現(xiàn)了一類語言的主要特點(diǎn),這些特點(diǎn)能用來支持應(yīng)用域所希望的設(shè)計(jì)風(fēng)格。 面向?qū)ο蟪绦蛟O(shè)計(jì)范型 :從程序這一方面將,它是一個(gè)類的集合和各類之間的繼承關(guān)系聯(lián)系起來的結(jié)構(gòu),再加上一個(gè)主程序,在主程序中定義各對(duì)象并規(guī)定他們之間傳遞消息的規(guī)律。從程序執(zhí)行這一方面講,他歸結(jié)為各對(duì)象和他們之間以消息傳遞的方式進(jìn)行著的通訊。OOP的主要特征:各對(duì)象之間的消息傳遞和各類之間的繼承。 23第23頁,共46頁。9.3.2 結(jié)構(gòu)化程序設(shè)計(jì)設(shè)計(jì)思想:自頂向下、逐步求精。類似我們一般的思維方式。 主模塊子模塊1子模塊2子模塊3子模塊3-m子模塊n子模塊3-1子模塊3-2子模塊3-324第24頁,共46頁。結(jié)構(gòu)化程

12、序設(shè)計(jì)的優(yōu)缺點(diǎn)優(yōu)點(diǎn):自頂向下,逐步求精 模塊化 復(fù)用缺點(diǎn) 面向功能,易于變化:功能變化頻繁,用戶需求不斷改變 把數(shù)據(jù)和過程分離為相互獨(dú)立的實(shí)體 復(fù)雜系統(tǒng)的行為難以用頂層功能描述 本質(zhì)上不利于復(fù)用 25第25頁,共46頁。一般的面向結(jié)構(gòu)的程序設(shè)計(jì)框架main() fun1() fun2() func3() 26第26頁,共46頁。9.3.4 面向?qū)ο蟪绦蛟O(shè)計(jì) 吸取了結(jié)構(gòu)化程序設(shè)計(jì)的一切優(yōu)點(diǎn) 考慮了現(xiàn)實(shí)世界與面向?qū)ο蠼饪臻g的映射關(guān)系 形成一個(gè)新的數(shù)據(jù)類型“類”類型 目前的面向?qū)ο蟪绦蛟O(shè)計(jì)語言都提供了大量的類 例如:鏈表是一種常用的數(shù)據(jù)類型,利用它可以實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。我們可以把鏈表這種存儲(chǔ)結(jié)構(gòu)以及對(duì)

13、鏈表的插入和刪除等操作封裝成一個(gè)類,這樣使用鏈表時(shí),可以先構(gòu)造出一個(gè)鏈表對(duì)象,對(duì)它的操作,就轉(zhuǎn)化為調(diào)用其方法實(shí)現(xiàn)。27第27頁,共46頁。面向?qū)ο蟪绦蛟O(shè)計(jì)的目標(biāo)和優(yōu)點(diǎn)目標(biāo) :將現(xiàn)實(shí)世界的問題取解盡可能簡(jiǎn)化 優(yōu)點(diǎn) 自然、直觀:考慮了現(xiàn)實(shí)世界與面向?qū)ο蠼饪臻g的映射關(guān)系 將數(shù)據(jù)和操作放在了一起,作為一個(gè)相互依存、不可分割的整體來處理,采用數(shù)據(jù)抽象和信息隱藏技術(shù) 將對(duì)象以及對(duì)對(duì)象的操作抽象成一種新的數(shù)據(jù)類型-類 為繼承和復(fù)用提供了有效的手段 使用多態(tài)性增強(qiáng)了操作的透明性、可理解性和可維護(hù)性 28第28頁,共46頁。 肩頭 箭頭表示消息 整個(gè)應(yīng)用程序?qū)ο?對(duì)象2對(duì)象3對(duì)象4對(duì)象5一般的面向?qū)ο蟮某绦蛟O(shè)計(jì)

14、框架29第29頁,共46頁。9.4 OOPL的三個(gè)重要特性 封裝性繼承性多態(tài)性 30第30頁,共46頁。9.4.1 封裝性 封裝指的是將一個(gè)數(shù)據(jù)和與這個(gè)數(shù)據(jù)有關(guān)的操作集合放在一起,形成一個(gè)能動(dòng)的實(shí)體-對(duì)象 封裝有雙重含義:包裝和信息隱藏 封裝和繼承是面向?qū)ο蠓椒ㄖ谢パa(bǔ)的兩種技術(shù) 在程序設(shè)計(jì)中,是通過對(duì)類的數(shù)據(jù)和操作定義訪問權(quán)限(private 、public、protected)31第31頁,共46頁。從外界只能看到對(duì)象的外特性,即能夠接受哪些消息,具有哪些處理能力。而對(duì)象的內(nèi)特性(實(shí)現(xiàn)處理能力的算法和保存內(nèi)部)對(duì)外是不可見的。 封裝的狀態(tài) 方法2方法1方法方法n屬性1屬性2屬性屬性n32第3

15、2頁,共46頁。9.4.2 繼承性 面向?qū)ο蟮某绦蛟O(shè)計(jì)語言的許多強(qiáng)有力的功能,來自于將它的類組成一個(gè)層次結(jié)構(gòu)(類等級(jí)) 一個(gè)類的上層可以有父類,下層可以有子類 這種層次結(jié)構(gòu)的一個(gè)重要性質(zhì)是繼承性,一個(gè)類直接繼承其父類的全部描述(數(shù)據(jù)和函數(shù)) 繼承又具有傳遞性 如果 類C 類B,類B 類A,則類C 類A 33第33頁,共46頁。baseclass drivedA drivedB drivedB drivedA drivedCbaseclass drivedA drivedB drivedD 單繼承 重復(fù)繼承 多繼承 34第34頁,共46頁。應(yīng)用程序中的繼承性class baseClassclas

16、s B:public baseClassclass C:public baseClassclass D:public A, public B35第35頁,共46頁。9.4.3 多態(tài)性 指在基類中定義的數(shù)據(jù)或操作被派生類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,從而是的同樣的操作名稱在各個(gè)派生類中具有不同的含義。指類等級(jí)的各層中共享(公有)一個(gè)行為(函數(shù))的名字,然而類等級(jí)中各類卻各自按各自的需要來實(shí)現(xiàn)這個(gè)行為。 以:shape為例,它的draw,這對(duì)不同形狀的圖形所畫的方法也不一樣 多態(tài)性的實(shí)現(xiàn)需要借助于面向?qū)ο蟮膭?dòng)態(tài)連接、重載的機(jī)制來支持 36第36頁,共46頁。多態(tài)性舉例-繪圖程

17、序GraphLineEllipsePolygonCircleTriangleRectangleGraph *pObj; /定義一個(gè)指向圖形對(duì)象的指針.pObj-Draw();/繪制圖形37第37頁,共46頁。c+語言中的多態(tài)性 編譯時(shí)得多態(tài)性:由重載實(shí)現(xiàn)的 運(yùn)行時(shí)得多態(tài)性:由虛函數(shù)實(shí)現(xiàn)的 38第38頁,共46頁。9.5 抽象 抽象是面向?qū)ο蟮幕舅枷胧且环N從一般的觀念看待事物的方法 要求程序員集中于事物的本質(zhì)特性而不是具體細(xì)節(jié)和實(shí)現(xiàn)細(xì)節(jié) 程序員從一組對(duì)象為起點(diǎn),抽取公共行為(方法)到一個(gè)類中。 39第39頁,共46頁。抽象現(xiàn)實(shí)世界的物體抽象成對(duì)象?,F(xiàn)實(shí)世界物體之間的關(guān)系抽象成軟件系統(tǒng)中對(duì)象之間

18、的關(guān)系。 具有共同特征的對(duì)象抽象成類。 具有共同特征的類抽象出基類和派生類。 程序員從一組對(duì)象為起點(diǎn),抽取公共行為(方法)到一個(gè)類中。 40第40頁,共46頁。面向?qū)ο笙到y(tǒng)的一個(gè)簡(jiǎn)單模型 對(duì)象 類 繼承41第41頁,共46頁。*9.6 面向?qū)ο蟮姆治雠c設(shè)計(jì) 面向?qū)ο箝_發(fā)方法的生命周期面向?qū)ο蠓治?面向?qū)ο笤O(shè)計(jì) 42第42頁,共46頁。9.6.1 面向?qū)ο箝_發(fā)方法的生命周期 分析階段 : 對(duì)問題領(lǐng)域中存在的事物的分析,進(jìn)行抽象。設(shè)計(jì)階段 : 結(jié)合具體的開發(fā)環(huán)境,進(jìn)行詳細(xì)設(shè)計(jì)。實(shí)現(xiàn)階段 : 進(jìn)行具體的編程,以及代碼測(cè)試。 43第43頁,共46頁。9.6.2 面向?qū)ο蠓治?面向?qū)ο蠓治鍪擒浖_發(fā)過程中的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論