




已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
,課程案例一,內(nèi)容9,編程,簡介實現(xiàn)類圖編程序列圖,簡介-1,目的這部分的內(nèi)容不是給你在編程方面的快速課程,而是為了演示我們已經(jīng)建立的一些模型是如何映射到代碼。我們不解釋每條指令。代碼的討論涉及它同類圖和序列圖的關(guān)系。對于類圖,我們討論哪些行代碼是實現(xiàn)類、類的屬性、方法和關(guān)系的。我們利用序列圖作為線路圖來指導我們實現(xiàn)程序指令被執(zhí)行的序列。其它的代碼討論局限于解釋沒有在早期模型中表示的定義特性。,簡介-2,內(nèi)容系統(tǒng)用Java語言實現(xiàn)。它也被我們已經(jīng)在建立UML模型時使用的CASE工具支持。為了簡潔,產(chǎn)生的代碼僅僅是Wheels系統(tǒng)實現(xiàn)的部分:Issuebike用例的一個場景。代碼局限于處理一位顧客租借一輛自行車。這意味著一些方法,例如Payment的方法calculateTotalPayment()似乎是無用的,因為它是設(shè)計用來處理多輛自行車租賃的。因為我們要求代碼是為了表述的目的,因而簡單代碼比全部功能的代碼更重要。,簡介-3,方法諸如引用其它類的細節(jié)已經(jīng)添加到類。因此,我們忽略了在分析模型中表示的一些屬性和方法。這允許我們保持圖表在可管理的大小內(nèi)。從現(xiàn)在起我們稱方法methods而不是操作operations;這在此階段是合適的,因為程序員是關(guān)注實現(xiàn)一個過程的代碼部分。在早期我們談論操作而不是方法,因為分析和設(shè)計活動更關(guān)注過程的界面,而不是它的實現(xiàn)。,實現(xiàn)類圖-1,類圖實現(xiàn)在圖9.1中的實現(xiàn)類圖最初是根據(jù)代碼由CASE工具產(chǎn)生的。它表示了完整的實現(xiàn)細節(jié),即屬性、方法參數(shù)(帶類型和返回值)、以及方法返還類型的可見性、類型和初始值。為了生成類圖的目的,即忽略gets和sets方法,簡單地設(shè)置或返回屬性的值。例如,Customer有三個get方法,getCustomerNumber()、getName()和getPostcode(),它們都沒有在類圖中顯示。,實現(xiàn)類圖-2,起始類(StartUp)類StartUp是一個新類。Java應用必須總有一個main()方法;當Java應用運行時,它總是第一個執(zhí)行的方法。在包括main()的Java每個方法必須在一個類中;因此,我們建立StartUp類的原因部分是為了放置main()。StartUp建立的另一個原因是模擬,如果這部分代碼是帶有歡迎菜單和其它顯示界面層的整個可執(zhí)行系統(tǒng)的一部分時,它模擬將會發(fā)生什么。這個類有效地模擬了在圖9.2中序列圖建模的接待員的功能。四個方法調(diào)用,showBikeDetails()、calculateCost()、newCust()和calcTotals(),原來由Receptionist發(fā)送到:IssueBikeUI,現(xiàn)在由StartUp發(fā)送。,實現(xiàn)類圖-3,IssueBikeUI類這個類結(jié)合了控制類和界面類的功能。它的前四個屬性chosenBike、customer、payment和hire都被用來存放IssueBikeUI需要交互的對象的對象標識符(或引用)。這些屬性被用來實現(xiàn)在類圖中表示的由IssueBikeUI發(fā)出的單向?qū)Ш铰窂?。最后的屬性numberOfDays存放租借的時間長短。當calculateCost(numDays)被調(diào)用時它被設(shè)置,隨后被用作Hire產(chǎn)生的參數(shù)。,實現(xiàn)類圖-4,Payment類這是同分析模型中建立的Payment類相同的實體類,僅僅是為了簡單,省略了一些屬性。屬性:Customer用來存放對一個Customer對象的引用;這允許每一個Payment對象被聯(lián)接到正確的Customer對象。它實現(xiàn)了在類圖中表示的到Customer類的單向?qū)Ш?。paymentId被用來存放惟一標識每個:Payment的數(shù)字。這個數(shù)字是一個整數(shù),不像一個引用(或?qū)ο髽俗R符)僅被計算機使用,該數(shù)字能被人閱讀和理解。,實現(xiàn)類圖-5,Payment類(續(xù))屬性:(續(xù))paymentCount是一個類變量,其允許應用賦值一個數(shù)字,該數(shù)字惟一標識每個:Payment(paymentId)。每次一個新的Payment對象產(chǎn)生,它就被更新。Payment(cust:Customer)是一個構(gòu)造器。當調(diào)用時,它產(chǎn)生一個新的Payment對象,并將其關(guān)聯(lián)到:Customer引用,該引用被作為參數(shù)傳遞。calculateTotalPayment(hire:Hire)設(shè)計用于為一位租借多輛自行車的顧客計算出總的費用。因為在這個實現(xiàn)中,僅有一位顧客租借一輛自行車的情況,因此,本方法僅部分實現(xiàn);calculateTotalPayment()調(diào)用私有方法issueReceipt()。issueReceipt(hire:Hire)打印一張收據(jù)。注意在類圖中這個方法前面是一個負號,表示其是一個私有方法。這意味著它僅能被Payment類的實例所使用。,實現(xiàn)類圖-6,Bike類Bike類結(jié)合了Bike實體類,以及一個有所有:Bike標識符的清單的集合類。為了簡化,我們已經(jīng)限制了Bike屬性僅有deposit、rate和bikeNumber。方法Methods:Bike(dep:int,rat:int,num:int)是一個構(gòu)造器。當調(diào)用時,它產(chǎn)生一個新的Bike對象,并將其屬性設(shè)置成傳遞的參數(shù)值。findBikeByNumber(bikeNum:int)是集合類功能的一部分;它在表:Bikes中搜尋,直到找到一個帶有相同自行車編號的自行車。showDetail()用來顯示由findBikeByNumber()發(fā)現(xiàn)的自行車的細節(jié)calculateCost(numberOfDays:int)計算出自行車租借一段時間的費用。,實現(xiàn)類圖-7,Customer類Customer類是同分析模型中定義相同的實體類。同Payment對象類似,每一個:Customer有一個惟一的customerId,其是由類變量customerCount產(chǎn)生的。為了簡單,我們利用郵政編碼代替完整的地址。雖然在代碼中有三個get方法,但在這個模型中僅表示的方法是一個構(gòu)造器。Hire類Hire類是同分析模型中定義相同的實體類。同Payment和Customer對象類似,每一個:Hire有一個惟一的hireId,其是由類變量hireCount產(chǎn)生的。屬性customer和bike被用來存放對Customer和Bike對象的引用。雖然在它有四個get方法,但在圖中僅表示的方法是一個構(gòu)造器。,編程-1,StartUp類StartUp類的類圖在圖9.3中表示,StartUp類的代碼在圖9.4中表示。代碼的行01聲明StartUp是在一個名稱為bikeshop的包內(nèi)(如同在代碼中所有的類一樣)。StartUp類聲明是在行05。在類中的每一內(nèi)容必須用波形括號括起來,這個括號告訴編譯器類的開始和結(jié)束的地方。左括號在行05,右括號在行27。main()方法是在行07聲明。這個方法的所有程序指令被放在第二個波形括號中,左括號在行07,右括號在行26。在main()中的第一條指令產(chǎn)生一個IssueBikeUI對象ui(行13),其后四條指令是對IssueBikeUI對象的調(diào)用。這四條指令實現(xiàn)在Issuebike用例場景中的主要步驟。,編程-2,IssueBikeUI類IssueBikeUI類的類圖在圖9.5中表示,其代碼在圖9.6中表示。IssueBikeUI類在行34聲明屬性(也被稱為方法的變量)37-41聲明。showBikeDetails(bikeNum:int):void方法在行42聲明,這個方法調(diào)用在Bike類中的findBikeByNumber(bikeNum)。findBikeByNumber(bikeNum)反復搜尋它的bike對象數(shù)組,直到它發(fā)現(xiàn)一個匹配的自行車編號(一個同參數(shù)值bikeNum匹配的)。匹配自行車的引用(對象標識符)被返回,并被賦給屬性chosenBike。這個引用然后被用來傳送消息showDetails()到匹配的自行車。,編程-3,IssueBikeUI類(續(xù))其余的方法聲明是:+calculateCost(numDays:int):void在行50+createCustomer(name:String,postcode:String,tel:int):void在行57+calculateTotalPayment():void在行64注意所有這些方法是公有的(public),即它們能被任何對象調(diào)用。方法createCustomer()實際上產(chǎn)生一個Hire對象、一個Customer對象和一個Payment對象。,編程-4,Bike類Bike類的類圖在圖9.7中表示,其代碼在圖9.8中表示。Bike類在行71中聲明一個五個Bike對象的數(shù)組bikeList在行74中聲明。屬性(也被稱作成員變量)在行76-78中聲明Bike構(gòu)造器在行91中聲明;在行93-95中,成員變量被設(shè)置成傳遞給構(gòu)造器的參數(shù)值。有三個get方法:getDeposit()在行98聲明getRate()在行102中聲明getBikeNumber()在行106中聲明,編程-5,Bike類(續(xù))方法findBikeByNumber()在行110中聲明。這個方法在數(shù)組:Bikes中搜尋直到發(fā)現(xiàn)一個自行車帶有同bikeNum(作為參數(shù)傳遞的)相匹配的值。當一個匹配發(fā)現(xiàn)后,該:Bike被返回到調(diào)用的方法。注意這個方法+findBikeByNumber(bikeNum:int):Bike的定義,其定義了必須返回一個Bike引用。方法showDetails()在行128聲明。這個方法顯示傳送給它的:Bike的bike編號、押金和每天的租金。calculateCost()在行135中聲明。這個方法計算租借傳送給它的:Bike的總費用。,序列圖-1,序列圖在編程中的作用對于新手,試圖追尋面向?qū)ο蟪绦蛑袌?zhí)行序列是非常困惑的。代碼的結(jié)構(gòu)式用類來表示,但執(zhí)行的序列是由用例來表示。這一結(jié)果是執(zhí)行序列在整個代碼清單中跳轉(zhuǎn)?,F(xiàn)在我們將Issuebike用例場景的序列圖同實現(xiàn)它的代碼進行比較。我們將序列圖中的消息同實現(xiàn)它的代碼行進行映射。按這種方式,我們遵循計算機執(zhí)行代碼的序列。這證明了序列圖作為引導我們閱讀代碼的線路圖的用處。,序列圖-2,序列圖在編程中的作用(續(xù)1)我們將要使用的序列圖在圖9.9中表示。完整的代碼在圖9.10中列出。表9.1將每一序列的代碼消息映射到實現(xiàn)它的代碼行。表9.1表示:欄1,序列圖中的消息欄2,實現(xiàn)消息的代碼行的行號欄3,發(fā)送消息的對象或類欄4,接受消息的對象或類,序列圖-3,序列圖在編程中的作用(續(xù)2)Java應用總是從main()方法的執(zhí)行開始main()方法在StartUp類中,代碼行07序列圖從main()方法發(fā)送的第一個消息開始,在行13,即IssueBikeUIui=newIssueBikeUII)。這產(chǎn)生一個新的:IssueBikeUI。下一條消息showBikeDetails(bikeNum),在行16,是由StartUp發(fā)送到新的:IssueBikeUI。為了找出下一步發(fā)生什么,我們需要找到在IssueBikeUI類中的方法showBikeDetails(bikeNum)(行42)然后跟隨實現(xiàn)這個方法的代碼直到我們發(fā)現(xiàn)下一條消息(或方法調(diào)用)。下一條消息是findBikeByNumber(bikeNum),在44行的指令chosenBike=Bike.findBikeByNumber(bikeNum)中。這個調(diào)用是從:IssueBikeUI到Bike類。,序列圖-4,序列圖在編程中的作用(續(xù)3)然后我們到Bike類,發(fā)現(xiàn)方法findBikeByNumber(bikeNum)并跟隨實現(xiàn)它的代碼行,直到我們遇到下一個方法調(diào)用。這個方法findBikeByNumber(bikeNum)是在110行。下一個方法調(diào)用時在116行,在那里getBikeNumber()消息被傳送到在bikeList數(shù)組中的每一個:Bikes,這是一個反射或自引用消息。每一:Bike的編號依次同bikeNum的值比較。當一個匹配的:Bike被發(fā)現(xiàn),對該:Bike的引用被返回給:IssueBikeUI。,序列圖-5,序列圖在編程中的作用(續(xù)4)隨著返回語句,控制被返回給調(diào)用的方法,在方法調(diào)用的下一條指令。這意味著下一行將要執(zhí)行的是行45。行45是一個if語句,其檢查是否發(fā)現(xiàn)匹配的自行車(如果沒有發(fā)現(xiàn),則返回一個空引用)。如果發(fā)現(xiàn)一輛自行車,它的引用被返回,然后賦值給變量chosenBike。然后,一個showDetails()消息(行47)被傳送到適當?shù)?Bike。showDetails()顯示:Bike的細節(jié),然后在48行將控制返回給:IssueBikeUI。行48有波形括號表示if語句的結(jié)束。行49包含有表示showBikeDetails()方法結(jié)束的波形括號,所以在行19控制被返回到StartUp。,圖9.1實施類圖,圖9.1-1實施類圖(1),圖9.1-2實施類圖(2),圖9.2“Issuebike”用例成功場景的設(shè)計序列圖,圖9.3起始類的類圖,圖9.4起始類的代碼,圖9.5IssueBikeUI類的類圖,圖9.6IssueBikeUI類的代碼,圖9.6-1IssueBikeUI類的代碼(1),圖9.6-2IssueBikeUI類的代碼(2),圖9.7Bike類的類圖,圖9.8Bike類的代碼,圖9.8-1Bike類的代碼(1),圖9.8-2Bike類的代碼(2),圖9.8-3Bik
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南海區(qū)課題申報書
- 護理課題申報書范本
- 教學課題的申報書
- 合作購銷產(chǎn)品合同范例
- 商法學課題申報書
- 眼科課題申報書范文
- 江西省中醫(yī)課題申報書
- 【復習大串講】【中職專用】高二語文上學期期末綜合測試題(五)(職業(yè)模塊)(解析版)
- 做廣告物料合同范本
- 合作加工木炭合同范本
- 咨詢公司項目風險控制方案
- 2024年初一英語閱讀理解專項練習及答案
- 污水處理廠防水防腐工程施工方案
- 幕墻作業(yè)安全技術(shù)交底
- 食堂晨午檢制度
- 23J916-1 住宅排氣道(一)
- 《邊緣計算與人工智能應用開發(fā)技術(shù)》全套教學課件
- 病例報告表(CRF)模板
- 2024年云南昆明市教育體育局直屬學校(單位)選調(diào)10人易考易錯模擬試題(共500題)試卷后附參考答案
- (完整版)建筑工程項目精益建造實施計劃書
- 幼兒園大班社會《服裝的由來》課件
評論
0/150
提交評論