




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C++程序設(shè)計
主講:朱淑芹
e-mail:shuqinzhu2008@163.com
tel考文獻(xiàn)[1]
《C++程序設(shè)計》,譚浩強(qiáng)著,清華大學(xué)出版社,2004年[2]《C++程序設(shè)計》,錢能著,清華大學(xué)出版社,2000年[3]《C++Prime》(第三版),StanleyBLippman著,潘愛民譯,中國電力出版社[4]《EffectiveC++》,ScottMeyers著,Lostmouse譯
第1章面向?qū)ο蟪绦蛟O(shè)計概述本章從一個小型的學(xué)生信息管理系統(tǒng)的面向過程程序設(shè)計出發(fā),討論了傳統(tǒng)的面向過程程序設(shè)計方法的不足,進(jìn)而引出面向?qū)ο蟪绦蛟O(shè)計方法,介紹面向?qū)ο蟪绦蛟O(shè)計的編程思想,面向?qū)ο蟪绦蛟O(shè)計的基本概念,面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點。最后簡單介紹面向?qū)ο蟮能浖_發(fā)。本章內(nèi)容簡介第1章面向?qū)ο蟪绦蛟O(shè)計本章學(xué)習(xí)目標(biāo)1.了解傳統(tǒng)的面向過程程序設(shè)計方法的不足2.掌握面向?qū)ο蟪绦蛟O(shè)計的編程思想3.理解并掌握面向?qū)ο蟪绦蛟O(shè)計的基本概念4.領(lǐng)會面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點5.了解面向?qū)ο蟮能浖_發(fā)工程C++的語言組成根據(jù)EffectiveC++第三版第一條款的描述,現(xiàn)在C++由以下四個“子語言”組成:1、C子語言。2、面向?qū)ο蟮腃++。3、泛型編程語言。4、STL(C++標(biāo)準(zhǔn)模板庫)。隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計中不可或缺的部分,其效率可能比一般的naive代碼低些,但是其安全性與規(guī)范性使它大受歡迎。1.1面向過程程序設(shè)計面向過程程序設(shè)計的基本思想功能分解逐步求精模塊化結(jié)構(gòu)化【例1-1】運用面向過程程序設(shè)計方法設(shè)計一個小型的學(xué)生信息管理系統(tǒng)。該系統(tǒng)要管理的學(xué)生信息包括:學(xué)號(Num)、姓名(Name)、性別(Sex)、出生日期(Birthday)、三門課成績﹝英語(English)、數(shù)據(jù)結(jié)構(gòu)(DataStructure)、C++程序設(shè)計(CPlusPlus)
﹞、總成績(Sum)、平均成績(Average),學(xué)生信息表如表1-1所示。1.1面向過程程序設(shè)計學(xué)號姓名性別出生日期英語成績數(shù)據(jù)結(jié)構(gòu)成績C++成績總成績平均成績20070202001鄧光輝男89-02-0587889026588.320070202002杜麗麗女90-09-2079807523478.020070202003姜志遠(yuǎn)男90-11-0868847022274.020070202004張大偉男88-08-0570678221973.0………………………表1-1學(xué)生信息表
1.1面向過程程序設(shè)計該學(xué)生信息管理系統(tǒng)要具有如下功能:(1)顯示學(xué)生信息:顯示全部學(xué)生的信息。(2)查詢學(xué)生信息:按學(xué)號或姓名查詢學(xué)生信息,查詢結(jié)果直接顯示在屏幕上。(3)添加學(xué)生信息:對學(xué)生信息進(jìn)行添加。(4)修改學(xué)生信息:按學(xué)號修改學(xué)生信息。1.1面向過程程序設(shè)計該學(xué)生信息管理系統(tǒng)要具有如下功能:(續(xù))(5)刪除學(xué)生信息:按學(xué)號刪除學(xué)生信息。(6)統(tǒng)計學(xué)生成績:統(tǒng)計每個學(xué)生的總成績和平均成績,或統(tǒng)計所有學(xué)生某一門課的總成績和平均成績。(7)學(xué)生信息排序:按學(xué)號、總成績或某一門課成績排序。(8)備份學(xué)生信息:把所有學(xué)生信息備份一份。1.1面向過程程序設(shè)計實現(xiàn)該系統(tǒng)的C程序框架/*學(xué)生信息管理系統(tǒng)C語言源代碼student.c*/#include<stdio.h>/*包含輸入/輸出頭文件*/#include<string.h>/*包含字符串處理頭文件*/typedef
struct{/*用于存放生日信息的結(jié)構(gòu)體*/
intyear;
intmonth;
intday;}Date;實現(xiàn)該系統(tǒng)的C程序框架(續(xù))typedef
struct{/*用于存放學(xué)生信息的結(jié)構(gòu)體*/charNum[15];charName[10];charSex;floatEnglish;/*英語課成績*/floatDataStructure;/*數(shù)據(jù)結(jié)構(gòu)課成績*/floatCPlusPlus;/*C++課成績*/floatSum,Average;/*總成績、平均成績*/}Student;
實現(xiàn)該系統(tǒng)的C程序框架(續(xù))/*用于存放讀入內(nèi)存中的所有學(xué)生信息的全局?jǐn)?shù)組*/Studentstud[100];intcount=0;
/*存放實際學(xué)生人數(shù)的全局變量*/
/*各自定義函數(shù)原型聲明*/voidReadData();/*讀取學(xué)生信息到全局?jǐn)?shù)組stud中*/voidDisplay();/*顯示學(xué)生信息*/voidSearch();/*查詢學(xué)生信息*/voidSearchNum();/*按學(xué)號查詢學(xué)生信息*/voidSearchName();/*按姓名查詢學(xué)生信息*/…voidBackupData();/*備份學(xué)生信息*/實現(xiàn)該系統(tǒng)的C程序框架(續(xù))voidmain(){/*系統(tǒng)功能以菜單的形式提供給用戶*/charchoice;
ReadData();for(;;){/*顯示系統(tǒng)功能菜單*/
printf("**********學(xué)生信息管理系統(tǒng)***************\n");
printf("***********************************************\n");
printf(“**********1.顯示學(xué)生信息***************\n");
printf("**********2.查詢學(xué)生信息***************\n");…實現(xiàn)該系統(tǒng)的C程序框架(續(xù))printf("**********8.備份學(xué)生信息***************\n");printf(“**********0.退出系統(tǒng)***************\n");printf("***********************************************\n");printf("請選擇要執(zhí)行的操作(0~8):_\n");scanf("%c",&choice);switch(choice){case'1':Display();break;case'2':Search();break;…case'0':return;default:printf("選擇錯誤!請重新選擇。\n");}/*switch結(jié)束*/實現(xiàn)該系統(tǒng)的C程序框架(續(xù))
}/*for結(jié)束*/}/*main函數(shù)結(jié)束*//*各自定義函數(shù)實現(xiàn)代碼*/voidReadData(){…}voidDisplay(){…}voidSearch(){…}…從上述學(xué)生信息管理系統(tǒng)的C程序框架可以看出,運用面向過程程序設(shè)計方法所設(shè)計出來的程序。數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)是分離的。所有數(shù)據(jù)都是公用的,一個函數(shù)可以使用任何一組數(shù)據(jù),而一組數(shù)據(jù)又能被多個函數(shù)所使用。用面向過程程序設(shè)計方法所設(shè)計出來的程序模型如圖1-1所示。1.1面向過程程序設(shè)計圖1-1面向過程程序設(shè)計的程序模型1.1面向過程程序設(shè)計
面向過程的結(jié)構(gòu)化程序設(shè)計在20世紀(jì)60年代末、70年代初從一定程度上緩解了當(dāng)時的“軟件危機(jī)”,它在處理較小規(guī)模的程序時比較有效。但是,隨著人們對大規(guī)模軟件需求的增長,面向過程的結(jié)構(gòu)化程序設(shè)計逐漸顯示出它的不足,具體表現(xiàn)在:1.1面向過程程序設(shè)計面向過程的結(jié)構(gòu)化程序設(shè)計的不足:1.程序設(shè)計困難,生產(chǎn)率低下2.?dāng)?shù)據(jù)不安全3.程序修改困難4.代碼重用程度低1.1面向過程程序設(shè)計不足1.2面向?qū)ο蟪绦蛟O(shè)計
1.2.1面向?qū)ο蟮木幊趟枷?.2.2面向?qū)ο蟮幕靖拍?.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點1.2.1面向?qū)ο蟮木幊趟枷刖唧w地講,面向?qū)ο缶幊痰幕舅枷肴缦拢?.客觀世界中的事物都是對象(object),對象之間存在一定的關(guān)系。2.用對象的屬性(attribute)描述事物的靜態(tài)特征,用對象的操作(operation)描述事物的行為(動態(tài)特征)。1.2面向?qū)ο蟪绦蛟O(shè)計1.2面向?qū)ο蟪绦蛟O(shè)計1.2.1面向?qū)ο蟮木幊趟枷耄ɡm(xù))3.對象的屬性和操作結(jié)合為一體,形成一個相對獨立、不可分的實體。對象對外屏蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系。4.通過抽象對對象進(jìn)行分類,把具有相同屬性和相同操作的對象歸為一類.類是這些對象的抽象描述,每個對象是其所屬類的一個實例。1.2面向?qū)ο蟪绦蛟O(shè)計1.2.1面向?qū)ο蟮木幊趟枷耄ɡm(xù))5.復(fù)雜的對象可以用簡單的對象作為其構(gòu)成部分。6.通過在不同程度上運用抽象的原則,可以得到一般類和特殊類。特殊類繼承一般類的屬性與操作,從而簡化系統(tǒng)的構(gòu)造過程。7.對象之間通過傳遞消息進(jìn)行通信,以實現(xiàn)對象之間的動態(tài)聯(lián)系。8.通過關(guān)聯(lián)表達(dá)類之間的靜態(tài)關(guān)系。1.2面向?qū)ο蟪绦蛟O(shè)計
1.2.1面向?qū)ο蟮木幊趟枷?.2.2面向?qū)ο蟮幕靖拍?.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點1.2面向?qū)ο蟪绦蛟O(shè)計1.2.2面向?qū)ο蟮幕靖拍?/p>
基本概念對象類封裝繼承消息關(guān)聯(lián)組合多態(tài)性1.2.2面向?qū)ο蟮幕靖拍?/p>
1.對象
現(xiàn)實世界對象軟件系統(tǒng)現(xiàn)實世界是由千千萬萬個對象(object)。組成的。1.2.2面向?qū)ο蟮幕靖拍?/p>
對象屬性行為描述客觀事物的靜態(tài)特征描述事物的動態(tài)特征personName=“Mary”Sex=femaleAge=20RunSpeakstudy對象的基本元素1.2.2面向?qū)ο蟮幕靖拍顖D1-2現(xiàn)實世界系統(tǒng)對象模型屬性行為對象1屬性行為對象2屬性行為對象3消息消息消息要使某一個對象實現(xiàn)某一個行為,應(yīng)當(dāng)向它傳遞相應(yīng)的消息。1.對象1.2.2面向?qū)ο蟮幕靖拍?.對象在面向?qū)ο蟮能浖到y(tǒng)中,對象是用來描述客觀事物的一個相對獨立體,是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進(jìn)行操縱的一組操作組成。屬性是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項,操作是用來描述對象行為的一個動作序列。1.2.2面向?qū)ο蟮幕靖拍?/p>
軟件系統(tǒng)中的一部分對象是對現(xiàn)實世界中的對象的抽象,但其內(nèi)容不是全盤照搬,這些對象只包含與所解決的現(xiàn)實問題有關(guān)的那些內(nèi)容;系統(tǒng)中的另一部分對象是為了構(gòu)建系統(tǒng)而設(shè)立的。1.2.2面向?qū)ο蟮幕靖拍?.類person類對客觀世界中具有相同屬性和行為的一組對象的抽象,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)容包括屬性和操作。1.2.2面向?qū)ο蟮幕靖拍?.類在尋找類時,要用到一個概念:抽象。抽象忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,找出事物的共性,把具有共性的事物劃分為一類,得出一個抽象的概念。1.2.2面向?qū)ο蟮幕靖拍?.類類和對象的關(guān)系可表述為:
類是對象的抽象,而對象則是類的實例,或者說是類的具體表現(xiàn)形式。1.2.2面向?qū)ο蟮幕靖拍?.封裝所謂“封裝”,指兩方面的含義:一是用對象把屬性和操縱這些屬性的操作包裝起來,形成一個基本單位,各對象之間相對獨立,互不干擾。二是將對象中某些部分對外隱蔽,即隱藏其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對外界隱蔽的做法稱為信息隱蔽(informationhiding)。1.2.2面向?qū)ο蟮幕靖拍?.繼承繼承特殊類自動地?fù)碛谢螂[含地復(fù)制其一般類的全部屬性與操作。1.2.2面向?qū)ο蟮幕靖拍?.繼承繼承具有“是一種”的含義。
汽車卡車轎車圖1-3繼承示例一般類(也稱為基類、父類)特殊類(也稱為派生類、子類)1.2.2面向?qū)ο蟮幕靖拍顖D1-4繼承的層次與抽象原則的運用輪船汽車卡車轎車火車車輛飛機(jī)運輸工具較多地忽略事物之間的差別,
得到較一般的類較多地注意事物之間的差別,
得到較特殊的類4.繼承1.2.2面向?qū)ο蟮幕靖拍顖D1-5多重繼承示例銷售經(jīng)理管理人員兼職技術(shù)人員銷售人員雇員多繼承允許一個特殊類具有一個以上一般類的繼承模式4.繼承1.2.2面向?qū)ο蟮幕靖拍?.消息在面向?qū)ο蠓椒ㄖ?,把向?qū)ο蟀l(fā)出的操作請求稱為消息(message)。對象之間通過消息進(jìn)行通信,實現(xiàn)了對象之間的動態(tài)聯(lián)系。在C++中,消息其實就是函數(shù)調(diào)用。1.2.2面向?qū)ο蟮幕靖拍?.關(guān)聯(lián)關(guān)聯(lián)(association)是兩個或多個類之間的一種靜態(tài)關(guān)系。教師指導(dǎo)畢業(yè)論文學(xué)生1*圖1-6關(guān)聯(lián)示例1.2.2面向?qū)ο蟮幕靖拍?/p>
7.組合組合描述的是類與類之間的整體與部分的關(guān)系。組合是關(guān)聯(lián)的一種,只是它還具有明顯的“整體——部分”含義。1.2.2面向?qū)ο蟮幕靖拍?.多態(tài)性(polymorphism)多態(tài)性由繼承而產(chǎn)生的相關(guān)而不同的類,其對象對同一消息會作出不同的響應(yīng)。1.2面向?qū)ο蟪绦蛟O(shè)計
1.2.1面向?qū)ο蟮木幊趟枷?.2.2面向?qū)ο蟮幕靖拍?.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點1.2面向?qū)ο蟪绦蛟O(shè)計1.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點1.從認(rèn)識論的角度看,面向?qū)ο蟪绦蛟O(shè)計改變了軟件開發(fā)的方式
面向?qū)ο蟪绦蛟O(shè)計強(qiáng)調(diào)從對象出發(fā)認(rèn)識問題域,對象對應(yīng)著問題域中的事物,其屬性和操作分別刻畫了事物的靜態(tài)特征和動態(tài)行為,對象之間的繼承、組合、關(guān)聯(lián)和依賴關(guān)系如實地表達(dá)了問題域中事物實際存在的各種關(guān)系。1.2面向?qū)ο蟪绦蛟O(shè)計數(shù)據(jù)成員成員函數(shù)對象1對象2對象3消息消息消息數(shù)據(jù)成員成員函數(shù)數(shù)據(jù)成員成員函數(shù)圖1-7面向?qū)ο蟮能浖到y(tǒng)分析模型1.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點(續(xù))1.2面向?qū)ο蟪绦蛟O(shè)計1.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點(續(xù))在面向過程的結(jié)構(gòu)化程序設(shè)計中:
程序=算法+數(shù)據(jù)結(jié)構(gòu)
對象=算法+數(shù)據(jù)結(jié)構(gòu)程序=(對象+對象+對象+…)+消息或程序=對象s+消息在面向?qū)ο蟪绦蛟O(shè)計:1.2面向?qū)ο蟪绦蛟O(shè)計1.2.3面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點(續(xù))
2.面向?qū)ο蟪绦蛑械臄?shù)據(jù)的安全性高3.面向?qū)ο蟪绦蛟O(shè)計有助于軟件的維護(hù)與復(fù)用
1.3面向?qū)ο蟮能浖_發(fā)1.3面向?qū)ο蟮能浖_發(fā)1.3面向?qū)ο蟮能浖_發(fā)1.3面向?qū)ο蟮能浖こ贪ㄒ韵聨讉€階段面向?qū)ο蠓治雒嫦驅(qū)ο鬁y試面向?qū)ο缶幊堂嫦驅(qū)ο笤O(shè)計面向?qū)ο缶S護(hù)objectorientedanalysis,OOAobjectorienteddesign,OODobjectorientedprogramming,
OOPobjectorientedtest,OOTobjectorientedsoftmaintenance,OOSM第1章面向?qū)ο蟪绦蛟O(shè)計
1.面向?qū)ο蠓治?/p>
對系統(tǒng)進(jìn)行面向?qū)ο蠓治?,識別出系統(tǒng)中的對象,定義對象的屬性和操作,并抽象出對象類。1.4學(xué)生信息管理系統(tǒng)的面向?qū)ο蠓治雠c設(shè)計第1章面向?qū)ο蟪绦蛟O(shè)計(1)學(xué)生對象與學(xué)生類考慮問題域,識別系統(tǒng)中的對象與類。
該系統(tǒng)是一個學(xué)生信息管理系統(tǒng),每一個被管理的學(xué)生都是該系統(tǒng)中的一個對象,所有學(xué)生對象都具有相同的屬性:學(xué)號、姓名、性別、出生日期、英語成績、數(shù)據(jù)結(jié)構(gòu)成績、C++程序設(shè)計成績、總成績、平均成績,相同的操作:計算總成績、計算平均成績。對所有學(xué)生對象的抽象,形成一個學(xué)生類。第1章面向?qū)ο蟪绦蛟O(shè)計
+計算總成績
+計算平均成績
-學(xué)號
-姓名
-…-平均成績學(xué)生類
+顯示學(xué)生信息
+按學(xué)號查詢學(xué)生信息
+按姓名查詢學(xué)生信息
…+打開文件
+寫文件
+新建文件“順序表”容器類1*
-學(xué)生數(shù)組
-學(xué)生總?cè)藬?shù)圖1-8學(xué)生信息管理系統(tǒng)的類圖第1章面向?qū)ο蟪绦蛟O(shè)計(2)順序表對象與順序表類
考慮系統(tǒng)責(zé)任,把系統(tǒng)責(zé)任所要求的每一項功能都落實到某個或某些對象上。該系統(tǒng)要實現(xiàn)對所有需要管理的學(xué)生對象信息的輸入(從鍵盤輸入)、輸出(輸出到屏幕)、存儲(存儲到外存)、讀取(從外存讀?。⒃黾?、刪除、修改、查詢、排序、統(tǒng)計等操作。假定學(xué)生對象信息在外存中以文件的形式存放,在內(nèi)存中以順序表的形式存放。我們把順序表看作系統(tǒng)中的一個對象,并形象地稱它為“容器”。第1章面向?qū)ο蟪绦蛟O(shè)計(2)順序表對象與順序表類
順序表對象作為用來存儲學(xué)生對象的容器,其數(shù)據(jù)結(jié)構(gòu)可以選擇最簡單的數(shù)組,因此,順序表對象應(yīng)該具有的屬性:以學(xué)生對象為元素的對象數(shù)組、學(xué)生總?cè)藬?shù)。第1章面向?qū)ο蟪绦蛟O(shè)計(2)順序表對
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 親子協(xié)議合同樣本
- 養(yǎng)殖承包合同標(biāo)準(zhǔn)文本
- 公共廁所合同標(biāo)準(zhǔn)文本
- 法律邏輯學(xué)試題集及解題技巧解析
- 買賣車輛糾紛合同樣本
- 交通勸導(dǎo)員合同樣本
- 中日雙語合同樣本
- 公司加盟協(xié)議合同標(biāo)準(zhǔn)文本
- 儲藏物品租賃合同范例
- 上海門面合同樣本
- 長安汽車使用說明書
- 初一英語完形填空練習(xí)(50篇)
- 2024年上海公安機(jī)關(guān)文職輔警招聘筆試參考題庫附帶答案詳解
- 【SRAM電路設(shè)計與版圖實現(xiàn)12000字(論文)】
- 《干簧管基礎(chǔ)知識》課件
- JC-T 2536-2019水泥-水玻璃灌漿材料
- 代碼轉(zhuǎn)交確認(rèn)函
- 平方差公式說課
- 刑事技術(shù)(刑事圖像)課件2
- 髂動脈瘤護(hù)理課件
- 我的家鄉(xiāng)東營廣饒旅游宣傳介紹
評論
0/150
提交評論