《面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念》教學(xué)課件2_第1頁
《面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念》教學(xué)課件2_第2頁
《面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念》教學(xué)課件2_第3頁
《面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念》教學(xué)課件2_第4頁
《面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念》教學(xué)課件2_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章面向?qū)ο蟪绦蛟O(shè)計(jì)

5.2

面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念5.2面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念為什么要提出面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο笳Z言和方法類、對象和消息面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn)面向?qū)ο蟪绦虻慕Y(jié)構(gòu)為什么要提出面向?qū)ο蟪绦蛟O(shè)計(jì)如何在程序中表示日期?(如2012年3月15日)第一個(gè)方案,一個(gè)簡單的結(jié)構(gòu)

structDate{inty;//yearintm;//monthinyearintd;//dayofmonth};可以利用Date做什么事呢?

運(yùn)行1_1.cpp,依次輸入下面數(shù)據(jù):20123152012153-313322000229問題:日期的合法性無法保證第2個(gè)方案,在第1個(gè)基礎(chǔ)上設(shè)計(jì)一些輔助函數(shù),完成一些最常見的操作1_2.cppinit_day(),初始化,將合理日期值賦給數(shù)據(jù)成員add_day(),增加日期的值為什么要提出面向?qū)ο蟪绦蛟O(shè)計(jì)問題:如果定義了Date型變量today,忘了初始化就使用了它;如果又定義了Date型變量tomorrow,沒有調(diào)用add_day(),而是直接寫了下面代碼tomorrow.y=today.y;tomorrow.m=today.m;tomorrow.d=today.d+1;我們需要不會被程序員忘記的初始化函數(shù),需要被忽視的可能性很低的操作。實(shí)現(xiàn)這些目標(biāo)的基本技術(shù)就是成員函數(shù),即將函數(shù)聲明于結(jié)構(gòu)體為什么要提出面向?qū)ο蟪绦蛟O(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)軟件的結(jié)構(gòu)化分析、設(shè)計(jì)方法工程化的概念的方法但無法很好地支持越來越復(fù)雜、龐大的系統(tǒng)需求面向?qū)ο蠓椒ㄖ苯訉栴}的求解映射到問題本身上有目的地將系統(tǒng)分解為模塊將問題分解為一系列的實(shí)體(對象)方便設(shè)計(jì),可維護(hù)性、可擴(kuò)充性好面向?qū)ο笳Z言和方法簡單的例子——圖書館管理系統(tǒng)包含reader(讀者)對象、librarian(圖書管理員)對象、bookshelf(書架)對象等所有的操作由各對象協(xié)作完成借書reader對象向librarian對象提出借書請求librarian對象向bookshelf對象提出查書和取書請求然后逐步響應(yīng),逐步返回,共同完成借書操作面向?qū)ο笳Z言和方法面向?qū)ο蠓椒ǖ囊恍┨匦猿绦蛟O(shè)計(jì)的重點(diǎn)在數(shù)據(jù)而不是函數(shù)程序由對象組成對象之間通過相互協(xié)作來完成功能大多數(shù)對象的定義以數(shù)據(jù)為中心函數(shù)與相關(guān)的數(shù)據(jù)緊密結(jié)合數(shù)據(jù)可以被隱藏很容易擴(kuò)充新的數(shù)據(jù)和函數(shù)面向?qū)ο笳Z言和方法對象、類和消息面向?qū)ο蟪绦蛟O(shè)計(jì)的一般步驟分析實(shí)際問題,分辨并抽取其中的類和對象設(shè)計(jì)相應(yīng)的類,并根據(jù)這些類創(chuàng)建各種對象協(xié)調(diào)這些對象完成程序功能萬物皆對象每個(gè)學(xué)生、每個(gè)班級、每個(gè)學(xué)校、每個(gè)國家、每棵樹、每本書、每部汽車——具體的實(shí)體“張三”、“李四”都是對象,但“人”不是“人”不是具體的實(shí)體,是類,是抽象概念類是某些對象共同特征的表示類是創(chuàng)建對象的模板,對象是類的實(shí)例對象、類和消息如何區(qū)分對象和類——以“人”和“張三”為例“人”描述了所有人(包括“張三”)都具有的屬性和行為,如有姓名、身高、體重,有鼻子、眼睛、四肢,能交流、能思維等等對象(“張三”)是具體的“張三”的姓名是“張三”“張三”的身高是185CM類(“人”)描述的概念是抽象的“人”的姓名是什么?“人”的身高是什么?對象、類和消息對象和類的例子教室——1342教室國家——中國學(xué)?!獤|華大學(xué)……對象、類和消息例子:讀者類ReaderclassReader{public: Reader();//構(gòu)造函數(shù)

intregistration(char*name);//注冊

intborrowBook(intbookNo); //借書

intreturnBook(intbookNo); //還書private: char*name; //姓名

char*certifNo; //借書證號};對象可以響應(yīng)消息對象zhang可以響應(yīng)registration(注冊)、borrowBook(借書)和returnBook(還書)三種消息要對象zhang借書可以向?qū)ο髗hang發(fā)borrowBook消息對象zhang則通過執(zhí)行成員borrowBook來響應(yīng)消息對象、類和消息C++將“向?qū)ο蟀l(fā)消息”處理成“調(diào)用對象的某個(gè)成員函數(shù)”C++將“對象響應(yīng)消息”處理成“轉(zhuǎn)去執(zhí)行相應(yīng)的成員函數(shù)”調(diào)用對象zhang的成員函數(shù)borrowBook

zhang.borrowBook(12); rpt

borrowBook(12); ref.borrowBook(12);對象、類和消息格式說明類的定義以關(guān)鍵字class開頭class后面是類名(Reader)類名后面花括號擴(kuò)起來的部分是類體類的定義以分號結(jié)尾對象、類和消息內(nèi)容說明類的定義可以包含數(shù)據(jù)和函數(shù)關(guān)鍵字public后面定義了類的公有成員類Reader有四個(gè)公有成員函數(shù):Reader、registration(注冊)、borrowBook(借書)和returnBook(還書)關(guān)鍵字private后面定義的是類的私有成員類Reader包含兩個(gè)私有數(shù)據(jù)成員,姓名(name)和借書證號(certifNo)數(shù)據(jù)成員和成員函數(shù)都可以是私有的或公有的對象、類和消息類是一種新的自定義類型,可以用該類型來聲明變量、指針、數(shù)組等對象各自擁有自己的數(shù)據(jù)空間,互不干擾Readerzhang; //聲明Reader類的對象zhangReaderreader[1000]; //聲明Reader類的數(shù)組Reader*rptr=&zhang;//聲明Reader類型的指針Reader&ref=zhang; //聲明Reader類型的引用對象、類和消息消息機(jī)制的特性同一對象可以接收不同的消息,并有不同的響應(yīng)。如對象zhang可接收注冊、借書、還書三種消息給不同對象發(fā)送同一消息會產(chǎn)生不同的效果。對象之間是平等的,每個(gè)對象都可以向其它對象發(fā)消息,讓其為自己服務(wù)對象、類和消息面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn)面向?qū)ο蠹夹g(shù)的優(yōu)點(diǎn)易于建模易于維護(hù)可擴(kuò)展性好代碼重用面向?qū)ο蟪绦虻慕Y(jié)構(gòu)面向?qū)ο蟪绦蛟O(shè)計(jì)的任務(wù)設(shè)計(jì)類創(chuàng)建類的對象實(shí)例協(xié)調(diào)這些對象共同工作面向?qū)ο蟪绦蛉匀恍枰粋€(gè)入口:main函數(shù)例子1:編寫一個(gè)雇員類Employee并測試它1_3.cpp#include<string>#include<iostream>usingnamespacestd;classEmployee{public:Employee(stringn){ //構(gòu)造函數(shù)

name=n;}

voidsetSalary(doubles) {salary=s;}voidprintSalary() {cout<<"Mysalaryis$"<<salary<<"!"<<endl;}voidwhoAreYou(){cout<<endl<<"Mynameis"<<name<<".\n";}private:stringname;doublesalary;};例子1:編寫一個(gè)雇員類Employee并測試它intmain(){//聲明類Employee的對象a和b

Employeea("ZhangShan"),b("LiSi");a.setSalary(123.4);//給對象a發(fā)消息setSalaryb.setSalary(156.7);//給對象b發(fā)消息setSalarya.whoAreYou(); //給對象a發(fā)消息whoAreYoua.printSalary(); //給對象a發(fā)消息printSalaryb.whoAreYou(); //給對象b發(fā)消息whoAreYoub.printSalary(); //給對象b發(fā)消息printSalaryreturn0;}例子1:編寫一個(gè)雇員類Employee并測試它程序執(zhí)行結(jié)果:MynameisZhangShan.Mysalaryis$123.4!MynameisLiSi.Mysalaryis$156.7!學(xué)習(xí)目的檢測了解面向?qū)ο蟪绦蛟O(shè)計(jì)方法相對于結(jié)構(gòu)化程序設(shè)計(jì)方法的優(yōu)點(diǎn)了解面向?qū)ο笳Z言的特點(diǎn)掌握類、對象和消息在面向?qū)ο蟪绦蛟O(shè)計(jì)中的作用了解面向?qū)ο蟪绦蛟O(shè)計(jì)的結(jié)構(gòu)作業(yè)編寫一個(gè)名為Person的類,表示人的名字和地址。使用

溫馨提示

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

最新文檔

評論

0/150

提交評論