




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、對(duì)象與對(duì)象化編程(上)2014吳際內(nèi)容提要 課程介紹 過程式程序回顧 為什么引入對(duì)象 對(duì)象化程序的構(gòu)成 對(duì)象是什么 作業(yè)課程介紹 面向?qū)ο蟮暮诵母拍?對(duì)象的運(yùn)行時(shí)機(jī)理 基于規(guī)約的面向?qū)ο蟪绦蛟O(shè)計(jì)方法 如何使用UML語言來分析面向?qū)ο蟪绦虻慕Y(jié)構(gòu) 如何測(cè)試面向?qū)ο蟪绦?基于UML和規(guī)約的面向?qū)ο笤O(shè)計(jì) 交互式OO程序的設(shè)計(jì)與實(shí)現(xiàn)課程介紹 24個(gè)授課學(xué)時(shí) 每周要完成一個(gè)作業(yè) 每個(gè)人獨(dú)立提交一個(gè)程序 每個(gè)人獨(dú)立測(cè)試一個(gè)程序 6個(gè)上機(jī)學(xué)時(shí) 熟悉開發(fā)環(huán)境(Eclipse)和程序調(diào)試 使用相關(guān)工具觀察Java程序運(yùn)行時(shí)的對(duì)象行為 使用相關(guān)工具對(duì)Java代碼進(jìn)行分析提取類結(jié)構(gòu)關(guān)系 使用Junit對(duì)編寫的Java
2、程序進(jìn)行測(cè)試和分析課程介紹 采用Java語言 OO概念支持 類型安全 (編譯器)強(qiáng)大的靜態(tài)檢查能力 跨平臺(tái) 不會(huì)Java語言? 使用C+/C#,會(huì)有一定的副作用 學(xué)習(xí)使用Java 成績(jī)?cè)u(píng)定 期末考試:50% 作業(yè)成績(jī):40% 出勤成績(jī):10%課程介紹 參考書目程序程序開發(fā)原理開發(fā)原理抽象、規(guī)格與面向?qū)ο笤O(shè)計(jì)抽象、規(guī)格與面向?qū)ο笤O(shè)計(jì)(Barbara Liskov, John Guttag, Program Development in Java: Abstraction, Specification, and Object-Oriented Design) 其他有關(guān)Java編程的書目課程介紹 作
3、業(yè)抄襲? 一定要獨(dú)立完成程序,發(fā)現(xiàn)抄襲就相當(dāng)于作業(yè)無效,累積發(fā)現(xiàn)三次無效無效作業(yè)作業(yè),取消作業(yè)成績(jī)! 作業(yè)任務(wù) 根據(jù)給定的作業(yè)要求完成程序:編譯通過、可以運(yùn)行! 無法運(yùn)行,將視為一次無效作業(yè)無效作業(yè)! 提交程序到課程郵箱 平常與我的交流請(qǐng)發(fā)郵箱,請(qǐng)不要把作業(yè)發(fā)到我個(gè)人郵箱! 隨機(jī)分配一份程序進(jìn)行測(cè)試 提交測(cè)試結(jié)果到課程介紹 程序提交的注意事項(xiàng) 郵件標(biāo)題清楚寫明你的姓名、學(xué)號(hào)和作業(yè)次數(shù) 如“張三120603*作業(yè)1” 郵件正文是否寫內(nèi)容都沒關(guān)系,千萬不要源代碼貼在郵件正文中 把Java程序打包成一個(gè)壓縮文件(千萬別加密碼)放在郵件附件中 不要在代碼中出現(xiàn)任何關(guān)于你個(gè)人的信息課程介紹 程序測(cè)試與結(jié)
4、果提交注意事項(xiàng) 任何測(cè)試手段都可以使用,目的只有一個(gè),看你能發(fā)現(xiàn)多少錯(cuò)誤! 每次發(fā)現(xiàn)一個(gè)錯(cuò)誤,一定要把程序的輸入和輸出結(jié)果記錄下來,確保錯(cuò)誤能夠重現(xiàn) 測(cè)試結(jié)果:輸入+錯(cuò)誤分類+錯(cuò)誤信息 錯(cuò)誤分類:Crash(觸發(fā)異常,程序崩潰);Wrong(錯(cuò)誤輸出結(jié)果);Incomplete(不完整或部分正確的輸出結(jié)果) 錯(cuò)誤信息:把程序崩潰時(shí)的異常信息,或者輸出結(jié)果拷貝下來 測(cè)試結(jié)果提交方式 郵件標(biāo)題寫清楚姓名學(xué)號(hào)測(cè)試作業(yè)次數(shù):如“張三120603*測(cè)試1” 在郵件正文寫上測(cè)試結(jié)果 每行一個(gè)結(jié)果:輸入;錯(cuò)誤類別;錯(cuò)誤信息課程介紹 如何評(píng)定一次作業(yè)的成績(jī)? 你的程序被發(fā)現(xiàn)了多少bug? 你發(fā)現(xiàn)了別人程序的多
5、少bug? 如何開展有效的測(cè)試? 閱讀程序代碼,進(jìn)行邏輯分析 根據(jù)輸入規(guī)格,設(shè)計(jì)相應(yīng)的輸入運(yùn)行程序 技巧 正常值 邊界值 異常值每個(gè)人在拿到別人所做的測(cè)試結(jié)果后,建議對(duì)bug進(jìn)行分析和調(diào)試,如果有確鑿證據(jù)表明有誤報(bào)bug的情況,提交復(fù)查郵件,我們會(huì)讓相應(yīng)測(cè)試同學(xué)來解決。課程介紹 請(qǐng)推選4名課代表 有權(quán)訪問郵箱 務(wù)必確保郵箱密碼不外泄,不得下載附件到本地 課代表工作職責(zé) 協(xié)助完成測(cè)試作業(yè)分配、郵件處理等 協(xié)助整理作業(yè)情況報(bào)告 提交情況 有效性情況 被發(fā)現(xiàn)了多少bug 發(fā)現(xiàn)了多少bug 課代表待遇 學(xué)期末的成績(jī)計(jì)算時(shí),卷面成績(jī)*120%課程介紹 作業(yè)提交時(shí)間 周三中午前提交程序作業(yè) 晚上10點(diǎn)前課
6、代表完成測(cè)試作業(yè)分配 周四晚上9點(diǎn)前提交測(cè)試作業(yè)結(jié)果 周五上課時(shí)課代表用10分鐘時(shí)間簡(jiǎn)述作業(yè)統(tǒng)計(jì)情況 沒按時(shí)提交? 程序作業(yè)沒按時(shí)提交導(dǎo)致無法進(jìn)行測(cè)試:無效作業(yè)! 測(cè)試作業(yè)沒按時(shí)提交:導(dǎo)致對(duì)測(cè)試人進(jìn)行扣分! 時(shí)間太緊怎么辦? 抓緊! 自己寫程序時(shí)就要思考如何測(cè)試,并準(zhǔn)備測(cè)試數(shù)據(jù)!過程式程序回顧 “結(jié)構(gòu)化” 模塊 函數(shù)、調(diào)用、參數(shù)傳遞 全局變量、局部變量、臨時(shí)變量 豐富的類型構(gòu)造 面向過程(procedure) 過程分解 提取公共過程過程式程序回顧 模塊表現(xiàn)形式 物理意義上的模塊:exe或lib或dll文件 邏輯意義上的模塊:多個(gè)相關(guān)函數(shù)的集合體(c文件+h文件) 函數(shù) 具有一定計(jì)算能力、相對(duì)獨(dú)
7、立的編程單位 公共功能函數(shù):圍繞數(shù)據(jù)結(jié)構(gòu)進(jìn)行所需的計(jì)算,如字符串處理、棧和隊(duì)列處理函數(shù)等 特定功能函數(shù):直接源自于軟件功能分解得到的函數(shù),如學(xué)生注冊(cè)、輸入/輸出函數(shù)等過程式程序回顧 函數(shù)調(diào)用 形參與實(shí)參的匹配 返回值的處理 變量 全局變量:多個(gè)函數(shù)需要使用和處理的變量,如電梯系統(tǒng)的電梯狀態(tài)變量。 局部變量:函數(shù)內(nèi)部需要處理的數(shù)據(jù)表示。 臨時(shí)變量:便于代碼編寫的一些臨時(shí)變量,如循環(huán)變量、中間計(jì)算結(jié)果存儲(chǔ)等過程式程序回顧 豐富的類型 原子類型 結(jié)構(gòu)類型(struct) 聯(lián)合類型(union) 豐富的數(shù)據(jù)組織與使用方式 數(shù)組、列表 樹與圖 指針為什么引入對(duì)象 編碼視角 為什么多個(gè)函數(shù)需要使用相同的變
8、量? 這些函數(shù)之間具有邏輯“聚合”的特性 如何處理一個(gè)函數(shù)需要使用之前運(yùn)行所產(chǎn)生的一些中間數(shù)據(jù)? 增加全局變量 或者,使用外部存儲(chǔ) 如何管理邏輯相關(guān)的函數(shù)+變量?為什么引入對(duì)象 程序設(shè)計(jì)視角 需要一種手段來封裝邏輯相關(guān)的函數(shù)和數(shù)據(jù) 需要整合了處理的類型層次 盡可能避免使用全局變量面向?qū)ο蟪绦虻臉?gòu)成 類 屬性數(shù)據(jù) 操作及其實(shí)現(xiàn) 作用域 接口 抽象操作 關(guān)系 繼承:類型層次+重用 關(guān)聯(lián):數(shù)據(jù)聚合+調(diào)用 實(shí)現(xiàn):為多種數(shù)據(jù)抽象提供統(tǒng)一接口 包 模塊層次 作用域 入口類 提供入口函數(shù)main(靜態(tài)函數(shù))面向?qū)ο蟪绦虻臉?gòu)成面向?qū)ο蟪绦虻臉?gòu)成 以類作為基本的編程單位 類封裝了數(shù)據(jù)和函數(shù) 類之間的協(xié)作完成程序
9、的功能對(duì)象與類 在面向?qū)ο蟪绦蛑?,我們稱對(duì)象是類的實(shí)例化結(jié)果 對(duì)象是運(yùn)行時(shí)概念運(yùn)行時(shí)概念 類是規(guī)格概念規(guī)格概念 簡(jiǎn)言之 類是通過關(guān)鍵詞class定義的一個(gè)程序單位:public class A 對(duì)象是方法中定義的變量(類型為某個(gè)類)A a = new A(); 一個(gè)對(duì)象可以通過多個(gè)變量來引用 A b = a;23對(duì)象與類class Time private int hour, minute;public Time (int h, int m) hour = h;minute = m;public void addMinutes (int m) int totalMinutes =(60*hou
10、r) + minute + m) % (24*60); if (totalMinutes0)totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60;24對(duì)象與類hourminutevoid addMinutes( int m )TimeinTimeAttributes: hour = 8 minute = 30Methods: void addMinutes(int m)outTimeAttributes: hour = 17 minute = 35Methods:
11、void addMinutes(int m)classobjects對(duì)象與類類是一個(gè)用于構(gòu)造對(duì)象的模板 規(guī)定了對(duì)象擁有的數(shù)據(jù)及其類型 規(guī)定了對(duì)象能夠執(zhí)行的動(dòng)作如果在Java程序中定義了類,就意味著一定在某個(gè)地方通過該類來構(gòu)造相關(guān)變量以實(shí)現(xiàn)相應(yīng)的函數(shù)每個(gè)類都應(yīng)該提供相應(yīng)的構(gòu)造器,用來在構(gòu)造對(duì)象時(shí)初始化和設(shè)置對(duì)象的狀態(tài)2526class Time private int hour, minute;public Time (int h, int m) hour = h;minute = m;public void addMinutes (int m) int totalMinutes =(60*ho
12、ur) + minute + m) % (24*60); if (totalMinutes0)totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60;對(duì)象與類-構(gòu)造器constructor for Time對(duì)象與類l對(duì)象是一個(gè)具有計(jì)算能力的實(shí)體:l封裝(Encapsulate) 其狀態(tài),對(duì)外部屏蔽細(xì)節(jié)l狀態(tài)由對(duì)象所有屬性變量的取值聯(lián)合確定l例如Time類中的hour和minute屬性,(22,10)表示晚上時(shí)間狀態(tài),(11,30)則表示白天時(shí)間狀態(tài)l能夠在相應(yīng)狀態(tài)上執(zhí)
13、行動(dòng)作即方法 (method)l在不同狀態(tài)下執(zhí)行方法的效果可能會(huì)不同l通過消息傳遞機(jī)制與其他對(duì)象交互(message passing)l消息:object.method(p1,p2,pm)l和函數(shù)調(diào)用存在本質(zhì)上的不同(后面會(huì)解釋)2728對(duì)象與類-構(gòu)造對(duì)象class Time private int hour, minute;public Time (int h, int m) hour = h;minute = m;Time inToWork = Time inToWork = newnew Time(8, 30); Time(8, 30);Time outFromWork = Time o
14、utFromWork = newnew Time(17, 35); Time(17, 35);29class Time private int hour, minute;public Time (int h, int m) hour = h;minute = m;public void addMinutes (int m) int totalMinutes =(60*hour) + minute + m) % (24*60); if (totalMinutes0)totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; m
15、inute = totalMinutes % 60;對(duì)象與類-執(zhí)行方法該方法能夠根據(jù)對(duì)象狀態(tài)來進(jìn)行相應(yīng)的計(jì)算30對(duì)象與類-對(duì)象交互void31對(duì)象與類-對(duì)象交互billAttributes: Methods: 32對(duì)象與類-對(duì)象交互billAttributes: Methods: 假設(shè)在bill的某個(gè)方法中有下面的代碼:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);33對(duì)象與類-對(duì)象交互inToWorkAttributes: hour = 8 minute = 30Methods: void addMinutes(int m)b
16、illAttributes: Methods: 假設(shè)在bill的某個(gè)方法中有下面的代碼:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);34對(duì)象與類-對(duì)象交互inToWorkAttributes: hour = 8 minute = 30Methods: void addMinutes(int m)inToWork.addMinutes(15)billAttributes: Methods: 假設(shè)在bill的某個(gè)方法中有下面的代碼:Time inToWork = new Time(8, 30);inToWork.addMinute
17、s(15);35對(duì)象與類-對(duì)象交互inToWorkAttributes: hour = 8 minute = 45Methods: void addMinutes(int m)billAttributes: Methods: 假設(shè)在bill的某個(gè)方法中有下面的代碼:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);36對(duì)象與類-類的結(jié)構(gòu)classclass name extendsextends * declarationsconstructor definition(s)method definitions 屬性和枚舉常量對(duì)象構(gòu)造
18、和初始化手段對(duì)象狀態(tài)查詢與控制手段這三部分之間沒有次序規(guī)定對(duì)象與類 從程序語法上看,似乎面向?qū)ο蟪绦蚺c過程式程序差別并不大 都有數(shù)據(jù)結(jié)構(gòu) 都有過程式函數(shù) 都有變量 都有唯一的入口點(diǎn)main 差別在于 過程式程序通常按照流程分解來設(shè)計(jì)開發(fā) 面向?qū)ο蟪绦虬凑諗?shù)據(jù)抽象與處理來設(shè)計(jì)開發(fā)過程式程序與面向?qū)ο蟪绦虻谋容^分析 假設(shè)要設(shè)計(jì)實(shí)現(xiàn)一個(gè)多項(xiàng)式加減運(yùn)算程序 多項(xiàng)式:c0+c1x+c2x2+cmxm c2x2為一個(gè)項(xiàng),其2為該項(xiàng)的階(degree) 多項(xiàng)式的階為其所有項(xiàng)中的最高階 多項(xiàng)式加減運(yùn)算對(duì)應(yīng)為階數(shù)相同的項(xiàng)的系數(shù)加減 我們分別按照過程式程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)來實(shí)現(xiàn)過程式程序設(shè)計(jì)實(shí)現(xiàn) (1)首先
19、定義數(shù)據(jù)結(jié)構(gòu)來表示多項(xiàng)式 (2)然后設(shè)計(jì)實(shí)現(xiàn)多項(xiàng)式加法和減法運(yùn)算函數(shù)struct Poly int coeff ; int degree ;struct Poly Term pTerm ;struct Term int coeff; int degree;void PolyAdd(Poly *p1, Poly *p2)/p1+p2 p1 void PolySub(Poly *p1, Poly *p2)/p1-p2 p1 過程式程序設(shè)計(jì)實(shí)現(xiàn) (3) 設(shè)計(jì)主函數(shù)main (3.1)讀取多項(xiàng)式運(yùn)算式,并構(gòu)造多項(xiàng)式變量 (3.2) 調(diào)用加減法函數(shù)進(jìn)行預(yù)算 (3.3) 輸出計(jì)算結(jié)果/suppose us
20、er inputs poly in (c1,n1),(c2,n2)while () scanf(“(%d,%d)”, &c, &n); Poly p1 = malloc (sizeof(Poly); /為p1中的coeff和degree申請(qǐng)內(nèi)存,但是不知道輸入的多項(xiàng)式的階是多少?/suppose here we have two polys: p1 and p2對(duì)象式程序設(shè)計(jì)實(shí)現(xiàn) (1)數(shù)據(jù)抽象 多項(xiàng)式如何表示?如何構(gòu)造?外部關(guān)心它哪些狀態(tài)?該軟件需要對(duì)它進(jìn)行什么處理?public class Poly private int terms; private int deg; p
21、ublic Poly() public Poly(int c, int n) public int degree()return deg; public int coeff(int d) public Poly add(Poly q) public Poly sub(Poly q)對(duì)象式程序設(shè)計(jì)實(shí)現(xiàn) (2)設(shè)計(jì)主類和實(shí)現(xiàn)入口函數(shù)main (2.1)主類管理多項(xiàng)式對(duì)象 (2.2)主類main必須是public static void main (2.3)在main中構(gòu)造主類對(duì)象來管理相關(guān)對(duì)象 (2.4)主類提供讀取多項(xiàng)式操作,通過Poly構(gòu)造多項(xiàng)式對(duì)象,并提供多項(xiàng)式計(jì)算操作public clas
22、s ComputePoly private Poly polyList; private Operator opList; private int num; enum OperatorADD, SUB; public ComputePoly() private void parsePoly(String s) private void compute()Poly p = polyList0; Poly p1,p2; for(int i=1;inum; i+)p2 = polyListi;Operator op=opListi-1; if(op=ADD)p1=p.add(p2); if(op=S
23、UB) p1=p.sub(p2); p=p1; private void parseOperator(String s) public static void main(String args) /從console獲取用戶輸入的多項(xiàng)式計(jì)算表達(dá)式:String ComputePoly cp = new ComputePoly(); cp.parsePoly(s); cp.parseOperator(s);pute(); 對(duì)比分析 過程式程序 每個(gè)函數(shù)都必須了解數(shù)據(jù)結(jié)構(gòu)的全部細(xì)節(jié)。一旦Poly數(shù)據(jù)結(jié)構(gòu)修改怎么辦? main函數(shù)的工作量非常大 main函數(shù)中的變量非常多,難以管理 對(duì)象式程序 每個(gè)類管理著它應(yīng)該管理的數(shù)據(jù),外部無法訪
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年解除終止勞動(dòng)合同證明書模板8號(hào)
- 三年級(jí)上冊(cè)數(shù)學(xué)教案-第七單元第1課時(shí) 認(rèn)識(shí)周長(zhǎng)-西師大版
- 五年級(jí)上冊(cè)數(shù)學(xué)教案 - 平行四邊形的面積 北師大版
- 譯林版(三起)三年級(jí)上冊(cè)期中檢測(cè)英語試卷(含解析)
- 第一單元第2課《小小工程師》教學(xué)設(shè)計(jì)-2024-2025學(xué)年科學(xué)新蘇教版一年級(jí)上冊(cè)
- 蘇教版數(shù)學(xué)三年級(jí)上冊(cè)單元測(cè)試卷-第二單元-千克和克(含答案)-
- 人教版三年級(jí)上冊(cè)期末模擬考試數(shù)學(xué)試卷(二)
- 《行軍九日思長(zhǎng)安故園》歷年中考古詩欣賞試題匯編(截至2024年)
- 第8單元 26 我的“長(zhǎng)生果”名師版2024-2025學(xué)年五年級(jí)語文上冊(cè)同步教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 2024年陶瓷制零件相關(guān)陶瓷制品項(xiàng)目資金籌措計(jì)劃書
- 社會(huì)企業(yè)參與養(yǎng)老服務(wù)的模式與效果
- 2025年執(zhí)業(yè)醫(yī)師定期考核題庫及參考答案
- 2025年北京交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 心理健康七個(gè)一主題活動(dòng)方案
- 多元化票務(wù)系統(tǒng)設(shè)計(jì)-深度研究
- 2024年菏澤職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- GB/T 22180-2024速凍裹衣魚
- 《公路施工組織設(shè)計(jì)》課件
- 人教版地理七年級(jí)下冊(cè)7.1.1 亞洲的自然環(huán)境(課件33張)
- 中醫(yī)藥防疫課件
- 統(tǒng)編版(2024新版)七年級(jí)下冊(cè)歷史教材習(xí)題答案
評(píng)論
0/150
提交評(píng)論