C++程序設(shè)計-華南理工大學(xué) 第1章-緒論_第1頁
C++程序設(shè)計-華南理工大學(xué) 第1章-緒論_第2頁
C++程序設(shè)計-華南理工大學(xué) 第1章-緒論_第3頁
C++程序設(shè)計-華南理工大學(xué) 第1章-緒論_第4頁
C++程序設(shè)計-華南理工大學(xué) 第1章-緒論_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章緒論面向?qū)ο蟪绦蛟O(shè)計(C++)1《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝緒論面向?qū)ο蟪绦蛟O(shè)計思想的由來面向?qū)ο蟪绦蛟O(shè)計概述《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.面向?qū)ο蟪绦蛟O(shè)計的思想由來Wherearewe?程序設(shè)計方法的發(fā)展歷程評價軟件質(zhì)量的因素過程式程序設(shè)計的局限性從過程式轉(zhuǎn)變到面向?qū)ο驣4《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.1程序設(shè)計方法的發(fā)展歷程(1)早期:面向機(jī)器的語言,用于科學(xué)計算。例1:X86ASM00401010pushebp00401011mov

ebp,esp00401013subesp,40h00401016pushebx00401017pushesi00401018pushedi00401019leaedi,[ebp-40h]0040101Cmovecx,10h00401021moveax,0CCCCCCCCh00401026repstos

dword

ptr[edi]5《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝00401028pushoffsetstring"helloworld"(0042501c)0040102Dmov

ecx,offset

cout(00428bc0)00401032callostream::operator<<(0040b5a0)00401037xor

eax,eax00401039popedi0040103Apopesi0040103Bpopebx0040103Caddesp,40h0040103Fcmp

ebp,esp00401041call__chkesp(00401060)00401046mov

esp,ebp00401048popebp00401049ret

---極難掌握,軟件規(guī)模小

---對非數(shù)字運算難以勝任缺點:1.1程序設(shè)計方法的發(fā)展歷程(2)60年代:面向過程的“技巧式”程序設(shè)計

(如:早期的fortran,Cobol,Algol60)

例2:algol60

BEGINFILEF(KIND=REMOTE);EBCDICARRAYE[0:11];REPLACEEBY"HELLOWORLD!";WHILETRUEDOBEGINWRITE(F,*,E);END;END.8《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝IDENTIFICATIONDIVISION.

PROGRAM-ID.

HELLO-WORLD.

ENVIRONMENTDIVISION.

DATADIVISION.

PROCEDUREDIVISION.

DISPLAY"Hello,world!".

STOPRUN.例3:COBOL缺點:--程序控制復(fù)雜,--過于依賴程序員的經(jīng)驗和技巧,--難讀、難改、難移植1.1程序設(shè)計方法的發(fā)展歷程(3)70年代早期:結(jié)構(gòu)化的過程式程序設(shè)計

(如:C,Pascal)

例4:C語言

#include<stdio.h>

int

max(int,int);//max模塊

int

main(void){

inti;i=max(10,20);

printf("Hello,world!\n");return0;

}11《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.1程序設(shè)計方法的發(fā)展歷程(3續(xù))

--分解原則、模塊獨立原則、編碼結(jié)構(gòu)化原則

--最大的軟件:385萬行(美國導(dǎo)彈預(yù)警系統(tǒng))

--大型軟件難以維護(hù)、難以修改和移植。12《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.1程序設(shè)計方法的發(fā)展歷程(4)70年代中后期:軟件工程

--有成套的管理方法

--強(qiáng)調(diào)模塊性、抽象性、易維護(hù)、可修改、可移植

--軟件工程原則:將軟件“做什么”和“怎么做”分離

--最大的軟件:4000萬行(美國航天飛機(jī)監(jiān)控系統(tǒng))13《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝“需求分析”處于軟件工程的核心地位。一旦需求發(fā)生變更,工作量是巨大的!

因此,描述需求的方法是關(guān)鍵!!現(xiàn)實情況怎么樣?一方面,各種程序設(shè)計方法學(xué)被提出來

大得可怕,卻并不好用!

看上去好像我們要花絕大多數(shù)的時間寫文檔,以至于沒有時間編寫程序……

另一方面,軟件危機(jī)沒有得到根本上的解決

超過50%的大型軟件項目以失敗告終!

Why???15《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝Wherearewe?程序設(shè)計方法的發(fā)展歷程如何評價軟件的質(zhì)量?過程式程序設(shè)計的局限性從過程式轉(zhuǎn)變到面向?qū)ο驣I16《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.2.1如何評價軟件的質(zhì)量?軟件的內(nèi)部質(zhì)量—正確性—健壯性—可擴(kuò)充性—可復(fù)用性—可讀性—可維護(hù)性—其他(兼容性,效率,可移植性…)但是事實上,這些方面正是結(jié)構(gòu)化程序設(shè)計和軟件工程追求的目標(biāo)。17《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.2.2過程式程序設(shè)計本身的局限性過程式程序設(shè)計是一種以功能為中心、基于功能分解的程序設(shè)計方法。一個過程式程序由一些子程序構(gòu)成,每個子程序?qū)?yīng)一個子功能,它實現(xiàn)了功能抽象。子程序描述了一系列的操作,它是操作的封裝體。過程式程序的執(zhí)行過程體現(xiàn)為一系列的子程序調(diào)用。在過程式程序中,數(shù)據(jù)處于附屬地位,它獨立于子程序,在子程序調(diào)用時作為參數(shù)傳給子程序使用。

下面的經(jīng)典公式刻劃了過程式程序設(shè)計的本質(zhì)特征:

程序=算法+數(shù)據(jù)結(jié)構(gòu)19《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝例:自我介紹,whoami定義一個結(jié)構(gòu)體PERSON,包含成員name;生成一個結(jié)構(gòu)體變量,調(diào)用函數(shù)設(shè)置他的姓名;調(diào)用函數(shù)whoami打印他的姓名.

structPerson{charname[20];…;};voidwhoami(structPerson);voidmain(){

structPersonmike;

strcpy(,“mike”);

whoami(mike);}voidwhoami(structPersonp){

printf(“%s”,);}20《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.2.2過程式程序設(shè)計本身的局限性(續(xù))

程序員只能按過程式程序設(shè)計的邏輯結(jié)構(gòu)(而不是按問題本身的邏輯結(jié)構(gòu))去描述問題;因此,問題的求解實際上是一種過程的抽象。也就是說,程序員必須在實際問題模型(問題空間)和機(jī)器模型(解空間)之間進(jìn)行轉(zhuǎn)換。

然而,這種轉(zhuǎn)換并不是線性的。因此,當(dāng)實際問題發(fā)生改變時,程序中各種成分也隨之改變。其中:功能:很容易變過程執(zhí)行順序:很容易變接口:極容易變數(shù)據(jù):極容易變21《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝Wherearewe?程序設(shè)計方法的發(fā)展評價軟件質(zhì)量的因素結(jié)構(gòu)化程序設(shè)計的局限性從過程式轉(zhuǎn)變到面向?qū)ο驣22《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.3從過程式轉(zhuǎn)變到面向?qū)ο蠼Y(jié)構(gòu)體+過程(易變)對象(穩(wěn)定)

對象:把問題空間中的事物在解空間中的表示稱為“對象”?;谶^程基于對象按計算機(jī)的結(jié)構(gòu)建模對問題本身建模

也就是說:當(dāng)我們讀描述解決方案的代碼時,也就是在讀表達(dá)該問題的文字!

OOP允許程序員用問題本身的術(shù)語來描述問題,而不是用(要運行解決方案的)計算機(jī)的術(shù)語來描述問題。每個對象看上去就象一臺小計算機(jī),它有狀態(tài),有可以執(zhí)行的運算。

23《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.3.1例:自我介紹,whoamiOOP(C++):定義一個類PERSON,包含屬性name和行為whoami;生成一個名為mike的對象(mike);給mike發(fā)送一個消息,讓他自己通過行為whoami說出他的名字.classPERSON{public:charname[20];voidwhoami(){cout<<name;};…;//};voidmain(){PERSONmike(“mike”);

mike.whoami();}24《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.3.2面向?qū)ο蟪绦蛟O(shè)計的編程思想對象式程序設(shè)計是一種以對象為中心、基于數(shù)據(jù)抽象的程序設(shè)計方法。對象式程序設(shè)計通常稱為面向?qū)ο蟪绦蛟O(shè)計。一個面向?qū)ο蟪绦蛴梢恍ο髽?gòu)成,對象是由一些數(shù)據(jù)及可施于這些數(shù)據(jù)上的操作所構(gòu)成的封裝體。對象的特征由相應(yīng)的類來描述,一個類可以從其它的類繼承。面向?qū)ο蟪绦虻膱?zhí)行過程體現(xiàn)為各個對象之間相互發(fā)送和處理消息.面向?qū)ο蟪绦蚩珊唵蔚乇硎境上旅娴墓剑?/p>

程序=對象/類+對象/類+…

對象/類=數(shù)據(jù)+操作25《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.3.3對象技術(shù)(OT)的年代表26《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝1.4對象技術(shù)(OT)的年代表(續(xù))Simula:SmalltalkC++:在兼容原有C語言的基礎(chǔ)上,進(jìn)一步加入支持面向?qū)ο蠹夹g(shù)的要素,如數(shù)據(jù)抽象、繼承、多態(tài)等。Java:UML:27《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.面向?qū)ο蟪绦蛟O(shè)計概述Wherearewe?什么是對象什么是類OO的四個基本原理多態(tài)性和泛化I29《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.1什么是對象?對象的定義對象的標(biāo)識對象的狀態(tài)對象的操作2.1.1對象的非正式定義非正式地,一個對象用來描述一個實體(entity),這個實體可以使物理實體、概念上的實體或者是軟件。

physicalentity:卡車

Conceptualentity:化學(xué)反應(yīng)過程

Softwareentity:

鏈表31《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.1.2對象的一個更正式的定義對象,是現(xiàn)實世界中某個實體在計算機(jī)邏輯中的映射和描述。對象具有標(biāo)識(identity),在一個明確的邊界(boundary)里封裝了狀態(tài)(state)和行為(behavior)。

Stateisrepresentedbyattributesandrelationships.Behaviorisrepresentedbyoperations,methods,andstatemachines.Attributes(屬性)Operations(操作)32《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.1.3對象的標(biāo)識(Identity)

每一個對象都有一個唯一的標(biāo)識,即使它的狀態(tài)跟其他對象相同。Professor“JClark”teachesBiologyProfessor“JClark”teachesBiologyIdentity:ProfJClark_f

ProfJClark_m33《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.1.4對象的狀態(tài)(state)狀態(tài)(state)描述的是對象在不同時刻所表現(xiàn)出來的一種狀況(condition)或情形(situation):例如,滿足某種條件,在做某件事情或者等待某個事件的發(fā)生。

通常對象的狀態(tài)隨時間的變化而改變。Discipline(學(xué)科):Finance(金融學(xué))MaximumCourseLoad(最大課程負(fù)擔(dān)):3classes(終身職位)ProfessorClark34《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.1.5對象的行為(Behavior)對象的行為確定了一個對象如何行動(acts),如何對事件進(jìn)行響應(yīng)(reacts)。ProfessorClark’sbehaviorSubmitFinalGradesAcceptCourseOfferingTakeSabbatical(休假年)35《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝Wherearewe?什么是對象?什么是類OO的四個基本原理多態(tài)性和泛化I36《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2什么是類?類的定義類的屬性類的操作舉例類和對象的關(guān)系2.2類(Class)Aclass(類)isadescriptionofasetofobjectsthatsharethesameattributes(屬性),operations(操作),relationships(關(guān)系),andsemantics(語義).Anobjectisaninstance(實例)ofaclass.Aclassisanabstraction(抽象)inthatitEmphasizesrelevantcharacteristics.(強(qiáng)調(diào)相關(guān)的本質(zhì)特征)Suppressesothercharacteristics.(舍去其他的無關(guān)特征)38《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.1類的屬性(Attributes)Anattributeisanamedpropertyofaclassthatdescribestherangeofvaluesthatinstancesofthepropertymayhold.Aclassmayhaveanynumberofattributesornoattributesatall.屬性39《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.2類的操作(Operation)Aservicethatcanberequestedfromanobjecttoeffectbehavior.Anoperationhasasignature,whichmayrestricttheactualparametersthatarepossible.

(操作是可以被另一個對象請求執(zhí)行而實現(xiàn)某種行為的服務(wù)。一個操作有一個簽名,該簽名可以對實際參數(shù)進(jìn)行約束。)Aclassmayhaveanynumberofoperationsornoneatall.40《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.3類course(花名冊)41《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.4類的UML表示42《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.5類的UML表示的組成部分Aclasshasthreesections:Theclassname(類名)Thestructure(屬性)Thebehavior(操作)43《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.6Objects和Classes的關(guān)系A(chǔ)classisanabstractdefinitionofanobject.(類是對象的抽象定義)Itdefinesthestructureandbehaviorofeachobjectintheclass.(定義類中每一個對象的結(jié)構(gòu)和行為)Itservesasatemplateforcreatingobjects.(類是創(chuàng)建對象的模板)Classesarenotcollectionsofobjects.

44《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.2.6Objects和Classes的關(guān)系(例)ProfessorMeijerProfessorAllen

45《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝類和對象中的屬性46《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝Wherearewe?什么是對象?什么是類?OO的四個基本原理多態(tài)性和泛化I47《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.3面向?qū)ο蟮乃膫€基本原理48《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.3.1什么是抽象(Abstraction)2.3.1什么是抽象(Abstraction)Theessentialcharacteristicsofanentitythatdistinguishesitfromallotherkindsofentities.(區(qū)別于其他實體的本質(zhì)特征)Definesaboundaryrelativetotheperspectiveoftheviewer.(定義一個相對于觀察者的角度的邊界)Isnotaconcretemanifestation,denotestheidealessenceofsomething.(不是一種有形的表現(xiàn),表示的是事物的本質(zhì))50《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝例:抽象51《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.3.2什么是封裝(Encapsulation)2.3.2什么是封裝(Encapsulation)Hidesimplementationfromclients.(封裝把具體實現(xiàn)隱藏起來,對客戶使用者不可見。增加了實現(xiàn)的“彈性”--resiliency)Clientsdependoninterface(接口).clients53《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝對象的接口(Interface)對象的接口(Interface)規(guī)定我們能向特定的對象發(fā)出什么請求,而具體的實現(xiàn)(屬性)則被隱藏起來了。ClassTV{public:voidturn_on(){};voidturn_off(){};voidvolume_up(){};voidvolume_down(){};voidchange_channel(intn){};private:……;//不能使用};54《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝封裝的本質(zhì):隱藏實現(xiàn)通過封裝,使得程序員分為:

-類創(chuàng)建者:專注于實現(xiàn)類-客戶程序員:使用類的用戶,專注于使用類優(yōu)點:

避免客戶程序員插手他們不應(yīng)當(dāng)接觸的部分。

(通過public,private,protected控制客戶的訪問)

-實現(xiàn)者可以隨時修改被隱藏的內(nèi)部工作方式,而不影響客戶程序員(的代碼)。55《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.3.3什么是模塊性(Modularity)2.3.3什么是模塊性(Modularity)Breaksupsomethingcomplexintomanageablepieces.(把一個復(fù)雜的事物分成易于處理的碎片)Helpspeopleunderstandcomplexsystems.(幫助人們理解復(fù)雜的系統(tǒng))57《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝例:模塊性—大問題分解成小問題(選課系統(tǒng))(繳費系統(tǒng))(課程編目系統(tǒng))(學(xué)生管理系統(tǒng))58《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.3.4什么是層次(Hierarchy)2.3.4什么是層次(Hierarchy)提高抽象程度降低抽象程度處在層次中同一層(level)的元素,也應(yīng)該處在抽象的同一層。(資產(chǎn))(有價證券)(債券)(不動產(chǎn))60《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝Wherearewe?什么是對象?OO的四個基本原理什么是類多態(tài)性和泛化I61《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.4.1多態(tài)性(Polymorphism)Theabilitytohidemanydifferentimplementationsbehindasingleinterface.多態(tài)性是能夠把多種不同的實現(xiàn)隱藏在一個單一的接口后面的能力。62《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝多態(tài)性:例163《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝多態(tài)性:例264《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝多態(tài)性的實現(xiàn)機(jī)制晚綁定vs

早綁定

Upcasting

vs

Downcasting65《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.4.2泛化(Generalization)Arelationshipamongclasseswhereoneclasssharesthestructureand/orbehaviorofoneormoreclasses.(泛化是類與類之間的這樣一種關(guān)系:其中一個類共享一個或多個其它類的結(jié)構(gòu)和行為)Definesahierarchyofabstractionsinwhichasubclassinheritsfromoneormoresuperclasses.(定義了之類繼承父類的抽象層次)Singleinheritance.(單繼承)Multipleinheritance.(多繼承)Isan“isakindof”relationship.(是一種“同一類”的關(guān)系)66《面向?qū)ο蟪绦蛟O(shè)計》中國科技大學(xué)計算機(jī)系馬建輝2.4.3繼承:重用接口通過繼承,可以創(chuàng)建一個與已存在的類(基類)具有類似功能的類(派生類)。

---派生類包含了基類的所有

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論