面向?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è),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

面向?qū)ο蟮某绦蛟O(shè)計(jì)(一)Object-OrientedProgramming1Lecturer:ZhangJingyu,ComputerSchool,SCUC++中的OOPOOPC硬件(CPU,RAM,IO…)Computer現(xiàn)實(shí)世界中需要解決的問(wèn)題,包括:電信,電力,金融,政府,制造業(yè),商貿(mào)物流,醫(yī)療衛(wèi)生,教育,交通…C++現(xiàn)實(shí)世界2Lecturer:ZhangJingyu,ComputerSchool,SCU1.Adobe系統(tǒng):Photoshop/Illustrator/AcrobatReader...2.中移動(dòng)/中電信/中聯(lián)通/美國(guó)電話電報(bào)公司(AT&T)/Vodaphone/T-Mobile/Orange:移動(dòng)電話基礎(chǔ)設(shè)施,計(jì)費(fèi)系統(tǒng),800service,及其他大量支撐平臺(tái)和服務(wù)3.NokiaSymbianOS系統(tǒng)(從內(nèi)核到外,用C++編寫(xiě)了所有代碼),4.Linux操作系統(tǒng)5.JavaVMcore6.MySQL數(shù)據(jù)庫(kù)C++部分應(yīng)用列表一3Lecturer:ZhangJingyu,ComputerSchool,SCU7.微軟:幾乎所有操作系統(tǒng)和開(kāi)發(fā)工具,xp,vista,office,IE瀏覽器,visualstudio,SQLServer...8.Google:網(wǎng)絡(luò)搜索引擎9.Apple:OSX部分內(nèi)核/iPod內(nèi)核10.IM即時(shí)通訊軟件:MSN,QQ大部分內(nèi)核,飛鴿11.JPL(JetPropulsionLab,NASA):火星探測(cè)器自動(dòng)驅(qū)動(dòng)系統(tǒng)(包括場(chǎng)景分析和路線預(yù)測(cè))以及很多地面支持軟件。12.彈道導(dǎo)彈防御系統(tǒng):TMD與NMDC++部分應(yīng)用列表二4Lecturer:ZhangJingyu,ComputerSchool,SCU13.游戲:.Blizzard:星際爭(zhēng)霸I-II,暗黑I,暗黑破壞神II:毀滅之王,魔獸爭(zhēng)霸III,魔獸世界。微軟:所有游戲。EA:視頻游戲引擎。末日三引擎,塞拉利昂,SWAT...Q:WhatdoIneedtoknowtobecomeaprogrammerforBlizzard?A:Blizzardhasseveraldifferentprogrammingpositionsavailable.ProgrammersareneededtoworkonB,individualgames,3Dandgraphics,tools,andotherareas.AllofthesepositionsrequireanextensiveunderstandingofCandC++.Onceyou...C++部分應(yīng)用列表三5Lecturer:ZhangJingyu,ComputerSchool,SCU克萊斯勒,法國(guó)電力,CENA,北電網(wǎng)絡(luò),SAP,阿爾卡特公司,雷諾,Manugistics,Communaut

urbaine(里昂交通管制),Parc科技有限公司,巴克萊全球投資(BGI),TLC(運(yùn)輸,Informatik,物流,GmbH咨詢)DeutscheBahn子公司,國(guó)防部的聯(lián)合作戰(zhàn)支援空運(yùn)中心(JOSAC),Telefonica,思科,尼桑,浦項(xiàng)制鐵,索尼銀行,isMobile

,美國(guó)西南航空公司,Novient

,沃達(dá)豐TeleCommerce

,SabreHoldings公司,法國(guó)電信,愛(ài)立信公司,德國(guó)電信,朗訊科技,MCIWorldCom,西門(mén)子,F(xiàn)irstUnionHomeEquityBank,巴恩,惠普,Adonix

,Peugeot,ARINC公司,McHugh愛(ài)立信(Ericsson).6Lecturer:ZhangJingyu,ComputerSchool,SCUC++PrimerPlusTheC++ProgrammingLanguageC++Primer(潘愛(ài)民譯)EffectiveC++(侯捷譯)MoreEffectiveC++(侯捷譯)C++標(biāo)準(zhǔn)程序庫(kù)自修教程與參考手冊(cè)(侯捷譯)深度探索C++對(duì)象模型(侯捷譯)C++參考書(shū)三選一閱讀順序7Lecturer:ZhangJingyu,ComputerSchool,SCUC語(yǔ)言回顧變量,常量Page.21分支判斷if-else,switch循環(huán)for,while,do-whilePage.133數(shù)組Page.68函數(shù)Page.29指針8Lecturer:ZhangJingyu,ComputerSchool,SCUC++程序中的頭文件C++頭文件沒(méi)有擴(kuò)展名.hinclude<iostream>原C頭文件被重新包裹成為沒(méi)有擴(kuò)展名的頭文件

stdio.h->cstdio#include<cstdio>

math.h->cmath#include<cmath>#include<math.h>正確,但不推薦

#include<cmath.h>錯(cuò)誤9Lecturer:ZhangJingyu,ComputerSchool,SCUnamespace名稱空間解決的問(wèn)題:名稱沖突問(wèn)題不同組件庫(kù)中可能存在同名的變量或函數(shù)。當(dāng)在某個(gè)軟件開(kāi)發(fā)過(guò)程中,同時(shí)使用這些組件庫(kù),將導(dǎo)致名稱沖突問(wèn)題。解決方案:用不同的名稱空間來(lái)區(qū)分不同的開(kāi)發(fā)庫(kù)。防止名稱空間沖突的辦法10Lecturer:ZhangJingyu,ComputerSchool,SCU主要內(nèi)容設(shè)計(jì)并實(shí)現(xiàn)一個(gè)“寵物診所管理系統(tǒng)”使用C++的類(lèi)機(jī)制定義自己的數(shù)據(jù)類(lèi)型寵物診所類(lèi)PetClinicClass狗類(lèi)DogClass貓類(lèi)CatClass理解面向?qū)ο笾袑?shí)現(xiàn)信息隱藏(informationhiding)的封裝(encapsulate)機(jī)制11Lecturer:ZhangJingyu,ComputerSchool,SCU面向?qū)ο蠓椒▽W(xué)機(jī)器語(yǔ)言匯編語(yǔ)言面向過(guò)程方法C,Basic面向?qū)ο蠓椒–++,Java8條指令1KB內(nèi)存64KB內(nèi)存面向?qū)ο驩O方法學(xué)的出現(xiàn)是軟件開(kāi)發(fā)歷史中順其自然的一步硬件的處理能力不斷提升12Lecturer:ZhangJingyu,ComputerSchool,SCUC++的類(lèi)機(jī)制C++類(lèi)機(jī)制允許在代碼中,由程序員增加自己定義的數(shù)據(jù)類(lèi)型。其作用是:我們?cè)诔绦蛑袩o(wú)法將C++內(nèi)置的int,short,char這些內(nèi)置數(shù)據(jù)類(lèi)型與現(xiàn)實(shí)世界中的物體(比如:貓,狗,鬧鐘,汽車(chē))建立起直接,自然,簡(jiǎn)單的映射鬧鐘類(lèi)狗類(lèi)具有共通特征具有共通特征13Lecturer:ZhangJingyu,ComputerSchool,SCU//創(chuàng)建一只狗stringname1="旺財(cái)";intage1=5;stringcolor1="黑";doubleweight1=10;boolguided=false;//創(chuàng)建一只貓stringname2="湯姆";intage2=2;stringcolor2="灰";doubleweight2=5;bool

isMouseKiller=true;Dogwc;//創(chuàng)建一只狗="旺財(cái)";wc.age=5;wc.color="黑";wc.weight=10;wc.guided=false;Cattom;//創(chuàng)建一只貓="湯姆";tom.age=2;tom.color="灰";tom.weight=5;tom.isMouseKiller=true;C語(yǔ)言版C++語(yǔ)言版14Lecturer:ZhangJingyu,ComputerSchool,SCU類(lèi)定義(一)類(lèi)定義由兩部分組成類(lèi)頭(classhead):C++關(guān)鍵字class及其后面的類(lèi)型名稱構(gòu)成類(lèi)體(classbody):由一對(duì)花括號(hào)包圍起來(lái)類(lèi)定義最后必須接一個(gè)分號(hào)表示定義結(jié)束

classalarm{….};15Lecturer:ZhangJingyu,ComputerSchool,SCU類(lèi)定義(二)現(xiàn)實(shí)世界的物體有兩種特征:屬性(形狀,大小,顏色,重量,名稱等)動(dòng)作(響鈴,剎車(chē),咬人等)在C++中用類(lèi)來(lái)映射現(xiàn)實(shí)世界的同種物體,類(lèi)中相應(yīng)地用兩種元素來(lái)表示現(xiàn)實(shí)世界物體的兩種特征:數(shù)據(jù)成員:比如表示大小,重量的變量成員函數(shù):設(shè)計(jì)者希望在該類(lèi)對(duì)象上執(zhí)行的各種操作16Lecturer:ZhangJingyu,ComputerSchool,SCU類(lèi)定義示例classDog{ stringname;};classCat{ stringname;};Dogobj1;Catobj2;//錯(cuò)誤//obj1和obj2是不同類(lèi)型//的兩種對(duì)象obj1=obj2;17Lecturer:ZhangJingyu,ComputerSchool,SCU在C++中引入新的自定義類(lèi):狗類(lèi)//Dog.h:狗類(lèi)型classDog{public: Dog(); virtual~Dog();//以下是數(shù)據(jù)成員的聲明

string name; //名字

string variety; //品種

int age; //年齡

string color; //顏色

double weight; //重量

bool

isMouseKiller;//是否愛(ài)管閑事};18Lecturer:ZhangJingyu,ComputerSchool,SCU使用Dog類(lèi)#include<iostream>usingnamespacestd;#include"Dog.h"voidmain(){Dogwc;//創(chuàng)建一只狗="旺財(cái)";wc.age=5;wc.color="黑";wc.weight=10;wc.isMouseKiller=false;cout<<<<"是一只" <<wc.color<<"色的狗。";}19Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)1.0的缺陷缺陷-代碼中的magicnumber(幻數(shù))問(wèn)題:i<5直接使用數(shù)字5,導(dǎo)致代碼難以維護(hù),難以理解解決-在診所PetClinic類(lèi)中增加一個(gè)數(shù)據(jù)成員(屬性變量)maxKeepingDogs,用于存放診所能夠同時(shí)治療的狗的數(shù)量(這種解決方案也存在缺陷,在后面的缺陷列表中將繼續(xù)討論)系統(tǒng)升級(jí)至2.0版20Lecturer:ZhangJingyu,ComputerSchool,SCU數(shù)據(jù)成員初始化的錯(cuò)誤形式!數(shù)據(jù)成員可以是任意類(lèi)型(基本類(lèi)型int,short等,或者是類(lèi)類(lèi)型string,Dog等)除靜態(tài)數(shù)據(jù)成員外,數(shù)據(jù)成員不能在類(lèi)體中被顯示初始化classcar{ stringmodel="BMW";//錯(cuò)誤!

doublelength=6.0;//錯(cuò)誤!};21Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)2.0的缺陷缺陷-目前診所中只收治了一只狗進(jìn)行治療,該狗被放入dogSet[0]。main程序?qū)⑽闯跏蓟膁ogSet[1]-dogSet[4]全部顯示,在屏幕上輸出隨機(jī)沒(méi)有意義的數(shù)據(jù)。解決方案-為診所增加一個(gè)收容狗的計(jì)數(shù)器inKeepingDogs,用于記錄當(dāng)前收治的狗的數(shù)量。操作:為PetClinic類(lèi)增加新的數(shù)據(jù)成員inKeepingDogs系統(tǒng)升級(jí)至3.0版22Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)3.0的缺陷缺陷-診所新接收了一條叫小明的狗,但是忘記同步增加診所當(dāng)前收治計(jì)數(shù)器inKeepingDogs

的值。1)增加狗到dogSet,2)增加inKeepingDogs

表面上看是兩個(gè)分離的操作,但在邏輯上又應(yīng)該屬于必須同時(shí)發(fā)生的一個(gè)整體操作。解決方案-將兩個(gè)操作視作一個(gè)整體,放入同一個(gè)函數(shù)中。把這個(gè)函數(shù)作為成員函數(shù)添加至PetClinic類(lèi)。PetClinic類(lèi)的一個(gè)動(dòng)作:收治新的狗addNewDog(..)系統(tǒng)升級(jí)至4.0版23Lecturer:ZhangJingyu,ComputerSchool,SCUpublicclassPetClinic{Dog[]dogSet;

int

maxKeepingDogs;

int

inKeepingDogs;…//接收治療一只新的狗

voidaddDog(Dogd1){dogSet[0]=d1;

inKeepingDogs++;}}classPetClinic{public:

PetClinic(); virtual~PetClinic(); DogdogSet[5];

int

maxKeepingDogs;

int

inKeepingDogs;

//接收治療一只新的狗

voidaddDog(Dogd1);};Java版:PetClinic.javaC++版PetClinic.h類(lèi)成員函數(shù)的聲明和定義代碼在同一個(gè)文件中完成類(lèi)成員函數(shù)的聲明在頭文件.h中完成,定義在同名的.cpp文件中完成24Lecturer:ZhangJingyu,ComputerSchool,SCU信息隱藏informationhidingOO的重要原則之一:所有數(shù)據(jù)都應(yīng)該盡量隱藏在它所在的類(lèi)的內(nèi)部信息隱藏是現(xiàn)代軟件開(kāi)發(fā)過(guò)程中,保證軟件可維護(hù)性的重要方法當(dāng)類(lèi)的使用者直接使用類(lèi)中的數(shù)據(jù)時(shí),請(qǐng)仔細(xì)檢查你的類(lèi)設(shè)計(jì):到底使用者會(huì)用這個(gè)數(shù)據(jù)做什么?為什么不是類(lèi)的方法來(lái)提供這個(gè)操作?25Lecturer:ZhangJingyu,ComputerSchool,SCUgettersandsetters基于信息隱藏原則,類(lèi)的數(shù)據(jù)成員不應(yīng)直接被外界讀寫(xiě)在OO類(lèi)設(shè)計(jì)時(shí),時(shí)常應(yīng)為類(lèi)中的一個(gè)數(shù)據(jù)成員xxx提供兩個(gè)方法getXxx()和setXXX(),供類(lèi)的使用者對(duì)xxx進(jìn)行讀寫(xiě)為診所類(lèi)PetClinic和狗類(lèi)Dog的每一個(gè)數(shù)據(jù)成員增加兩個(gè)方法,系統(tǒng)升級(jí)至5.026Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)5.0的缺陷缺陷-創(chuàng)建診所,初始化診所數(shù)據(jù)成員MaxKeepingDogs和InKeepingDogs是分離的步驟,可能導(dǎo)致PetClinic類(lèi)使用者在生成診所時(shí)忘記其中的一步解決方案-創(chuàng)建一個(gè)類(lèi)的對(duì)象時(shí),可能進(jìn)行一系列初始化操作,將這些操作放入類(lèi)的構(gòu)造函數(shù)constructor,在構(gòu)造函數(shù)中進(jìn)行所有初始化。系統(tǒng)升級(jí)至6.027Lecturer:ZhangJingyu,ComputerSchool,SCU類(lèi)的構(gòu)造函數(shù)constructor構(gòu)造函數(shù)與類(lèi)同名classXxx{public:Xxx();

Xxx(int,int);}多數(shù)類(lèi)都提供一個(gè)沒(méi)有參數(shù)的缺省構(gòu)造函數(shù)。用途:如果需要定義一個(gè)類(lèi)對(duì)象,但暫時(shí)不清楚初始值,則使用defaultconstructor來(lái)定義對(duì)象,表明對(duì)象已經(jīng)生成,但該對(duì)象中的數(shù)據(jù)成員還未被初始化28Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)6.0的缺陷缺陷-Haodk診所生意興旺,有不少狗慕名前來(lái)治病,診所不斷收治Haodk.addDog(xxx)狗。如果超出maxKeepingDogs上限,6.0系統(tǒng)中,未對(duì)此情況做任何處理,導(dǎo)致系統(tǒng)出錯(cuò)解決方案-在addDog()中增加檢查診所是否有剩余容量接收新狗的能力。如果空間已滿,則拒絕接收,修改addDog返回值系統(tǒng)升級(jí)至7.029Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)7.0的缺陷缺陷-PetClinic類(lèi)中存放狗的數(shù)組,目前其大小固定為5。對(duì)于規(guī)模較小的診所,比如最多只能收治3只狗,在定義診所對(duì)象時(shí),系統(tǒng)也會(huì)為其分配5個(gè)Dog元素的數(shù)組,但只有前三個(gè)Dog元素需要被使用,造成內(nèi)存資源浪費(fèi)解決方案-使用可變大小的容器vector替代數(shù)組,在程序運(yùn)行時(shí),于構(gòu)造函數(shù)中用maxKeepingDogs的值來(lái)動(dòng)態(tài)生成Vector系統(tǒng)升級(jí)至8.030Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)8.0版的啟示理解以下三種角色的定位,了解你是誰(shuí)!系統(tǒng)的最終用戶寵物診所的工作人員類(lèi)的使用者寵物診所系統(tǒng)開(kāi)發(fā)人員(比如main的程序員)類(lèi)的開(kāi)發(fā)者PetClinic,Dog類(lèi)的開(kāi)發(fā)人員類(lèi)的開(kāi)發(fā)者用vector替代數(shù)組,并非為了方便寵物診所的工作人員。而是為PetClinic類(lèi)的用戶在編寫(xiě)系統(tǒng)時(shí),提供可以定義任意容量診所的能力31Lecturer:ZhangJingyu,ComputerSchool,SCU再次討論構(gòu)造函數(shù)(一)對(duì)象構(gòu)造的順序執(zhí)行該對(duì)象中所有成員對(duì)象的缺省構(gòu)造函數(shù)執(zhí)行該對(duì)象的構(gòu)造函數(shù)類(lèi)的定義不引發(fā)任何內(nèi)存分配。只有當(dāng)定義一個(gè)類(lèi)的對(duì)象時(shí),才會(huì)為這個(gè)對(duì)象分配內(nèi)存空間,然后再調(diào)用對(duì)象的構(gòu)造函數(shù)進(jìn)行初始化操作。(注意分配空間和調(diào)用構(gòu)造函數(shù)的前后順序)32Lecturer:ZhangJingyu,ComputerSchool,SCU寵物診所管理系統(tǒng)8.0的缺陷缺陷-盡管在8.0系統(tǒng)中,用getter/setter/addDog

這些成員函數(shù)對(duì)類(lèi)的使用者隱藏了類(lèi)的細(xì)節(jié)(數(shù)據(jù)成員),但是類(lèi)使用者依然可以在代碼中繞過(guò)成員函數(shù),直接訪問(wèn)類(lèi)的數(shù)據(jù)成員解決方案-將數(shù)據(jù)成員從類(lèi)體的public部分抽出,放入類(lèi)體的private部分系統(tǒng)升級(jí)至9.033Lecturer:ZhangJingyu,ComputerSchool,SCU類(lèi)成員訪問(wèn)限制(一)定義類(lèi)成員時(shí),用訪問(wèn)限定符public,private,protected指定成員能被誰(shuí)訪問(wèn)公有成員public:在類(lèi)的外部和內(nèi)部都可以被使用私有成員private:只能在類(lèi)的內(nèi)部自己使用(類(lèi)的友員也可訪問(wèn)private成員)34Lecturer:ZhangJingyu,ComputerS

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論