版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8講設(shè)計與代碼映射第8講設(shè)計與代碼映射內(nèi)容可見性設(shè)計類圖代碼映射測試驅(qū)動開發(fā)與代碼重構(gòu)9/4/20232內(nèi)容可見性8/3/202321.對可見性進行設(shè)計1.對可見性進行設(shè)計1.1目標確定四種可見性對設(shè)置可見性進行設(shè)計9/4/202341.1目標確定四種可見性8/3/202341.2可見性可見性Visibility是對象看到或引用其它對象的能力為了使發(fā)送者對象能夠向接收者對象發(fā)送消息,發(fā)送者必須具有接收者的可見性,即發(fā)送者必須擁有對接收者對象的某種引用或指針9/4/202351.2可見性可見性Visibility是對象看到或引用其它:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getSpecification(itemID){publicvoidenterItem(itemID,qty){...spec=catalog.getSpecification(itemID)...}}classRegister{...
privateProductCatalogcatalog;...}9/4/20236:RegisterenterItem(itemID,qu1.3四種可見性實現(xiàn)對象A到對象B的可見性通常有四種方式:屬性可見性AttributeVisibility:B是A的屬性參數(shù)可見性Parametervisibility:B是A方法中的參數(shù)局部可見性LocalVisibility:B是A中方法的局部對象(不是參數(shù))全局可見性GlobalVisibility:B具有某種方式的全局可見性為了使對象A能夠向?qū)ο驜發(fā)送消息,對于A而言,B必須是可見的9/4/202371.3四種可見性實現(xiàn)對象A到對象B的可見性通常有四種方式:8(1)屬性可見性這是一種相對持久地可見性:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getSpecification(itemID){publicvoidenterItem(itemID,qty){...spec=catalog.getSpecification(itemID)...}}classRegister{...
privateProductCatalogcatalog;...}9/4/20238(1)屬性可見性這是一種相對持久地可見性:Register(2)參數(shù)可見性這是一種相對暫時的可見性2:makeLineItem(spec,qty)enterItem(id,qty)1:spec:=getSpecification(id)2.1:create(spec,qty):Register:Sale:ProductCatalogsl:SalesLineItem{makeLineItem(ProductSpecification
spec,intqty){...sl=newSalesLineItem(spec,qty);...}}9/4/20239(2)參數(shù)可見性這是一種相對暫時的可見性2:makeLin將參數(shù)可見性轉(zhuǎn)化為屬性可見性十分常見2:makeLineItem(spec,qty)enterItem(id,qty)2:spec:=getSpecification(id)2.1:create(spec,qty):Register:Sale:ProductCatalogsl:SalesLineItem//initializingmethod(e.g.,aJavaconstructor){SalesLineItem(ProductSpecificationspec,intqty){...productSpec=spec;//parametertoattributevisibility...}}9/4/202310將參數(shù)可見性轉(zhuǎn)化為屬性可見性十分常見2:makeLineI(3)局部可見性實現(xiàn)局部可見性的兩種常見方式:創(chuàng)建新的局部實例并將其分配給局部變量將方法調(diào)用返回的對象分配給局部變量:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getSpecification(itemID){enterItem(id,qty){...//localvisibilityviaassignmentofreturningobjectProductSpecificationspec=catalog.getSpecification(id);...}}9/4/202311(3)局部可見性實現(xiàn)局部可見性的兩種常見方式::Regis(4)全局可見性這是一種相對持久的可見性將實例分配給全局變量,這在某些語言如C++中是可能的9/4/202312(4)全局可見性這是一種相對持久的可見性8/3/2023121.4采用UML表示可見性:A:B1:msg():C2:msg():D3:msg()<<association>><<parameter>><<local>>:E4:msg()<<global>><<association>>isusedforattributevisibility9/4/2023131.4采用UML表示可見性:A:B1:msg():C2:2.生成設(shè)計類圖2.生成設(shè)計類圖2.1引言交互圖完成后,有可能來定義軟件類(接口)的描述設(shè)計類圖(DesignClassDiagrams,DCD)9/4/2023152.1引言交互圖完成后,有可能來定義軟件類(接口)的描述8/2.2何時生成DCD實踐中,交互圖經(jīng)常與DCD并行創(chuàng)建為了更清楚地說明DCD,我們選擇了在交互圖之后介紹DCD9/4/2023162.2何時生成DCD實踐中,交互圖經(jīng)常與DCD并行創(chuàng)建8/32.3DCD例子RegisterenterItem(...)SaledateisComplete:BooleantimemakeLineItem(...)CapturesNavigability11Threesectionboxforclassdefinition.methods;thereareparameters,butunspecifiedtypeinformation9/4/2023172.3DCD例子RegisterenterItem(...)2.4DCD和UP術(shù)語設(shè)計類圖描述了應(yīng)用中的軟件類和接口類,關(guān)聯(lián)和屬性接口,包括操作和常量方法屬性類型信息可見性依賴UP并沒有專門的“設(shè)計類圖”UP定義了設(shè)計模型,包括交互,包和類圖.在UP設(shè)計模型中的類圖包含“設(shè)計類”9/4/2023182.4DCD和UP術(shù)語設(shè)計類圖描述了應(yīng)用中的軟件類和2.5領(lǐng)域模型vs.設(shè)計模型類Register...endSale()enterItem(...)makePayment(...)SaledateisComplete:BooleantimemakeLineItem(...)CapturesRegisterSaledateisComplete:BooleantimeCapturessoftwareclass1111DomainModelDesignModelConcept;conceptualclass9/4/2023192.5領(lǐng)域模型vs.設(shè)計模型類Register...en2.6創(chuàng)建NextGenPOSDCD確定軟件類并展示它們檢查交互圖并列出提到的所有類RegisterSaleProductCatalogProductSpecificationStoreSalesLineItemPayment9/4/2023202.6創(chuàng)建NextGenPOSDCD確定軟件類并展示它們給這些類畫類圖,列出通過領(lǐng)域模型中識別出來,并在設(shè)計中采用的屬性TheCashierisnotpresentinthedesignsinceforthecurrentiterationitisnotnecessarytomodelitinsoftware.9/4/202321給這些類畫類圖,列出通過領(lǐng)域模型中識別出來,并在設(shè)計中采用的添加方法名通過分析交互圖,每一個類具有的方法可以確定:Register:Sale2:makeLineItem(spec,qty)Sale...makeLineItem(...)9/4/202322添加方法名:Register:Sale2:makeLineSalesLineItem-quantity+getSubtotal()ProductCatalog...+getSpecification(...)ProductSpecification-description-price-itemID...Store-address-name+addSale(...)Payment-amount...Register...+endSale()+enterItem(...)+makeNewSale()+makePayment(...)Sale-date-isComplete-time+becomeComplete()+makeLineItem(...)+makePayment(...)+getTotal()9/4/202323SalesLineItem-quantity+getSu2.7方法的命名一些注意點create消息的解釋訪問方法多對象消息與語言無關(guān)的語法9/4/2023242.7方法的命名一些注意點8/3/202324(1)方法名-create每一種語言有各自特定的實例化instantiation或者初始化initialization的方法在C++,它包含了通過跟隨一個構(gòu)造函數(shù)的new操作進行自動內(nèi)存分配在Java中,它包含了對new運算符的調(diào)用,后面跟構(gòu)造函數(shù)調(diào)用9/4/202325(1)方法名-create每一種語言有各自特定的實例化ins(2)Accessing方法獲取或者設(shè)置屬性我們可以將所有屬性定義為私有,并對它們定義accessor和mutator這些方法一般在類圖中不顯示-9/4/202326(2)Accessing方法獲取或者設(shè)置屬性8/3/202(3)多對象給多對象的消息一般解釋為發(fā)送給一個container/collection對象,例如JavaMap,aC++map或者SmalltalkDictionary1:spec:=getSpecification(id)1.1:spec:=find(id):ProductCatalog:ProductSpecificationThefindmessageistothecontainerobject,nottoaProductSpecification.9/4/202327(3)多對象給多對象的消息一般解釋為發(fā)送給一個contain2.8增加更多的類型信息屬性,方法參數(shù)和返回值的類型可以有選擇的顯示什么時候顯示?取決于目的:CodeGenerationoronlyRead9/4/2023282.8增加更多的類型信息屬性,方法參數(shù)和返回值的類型可以有選SalesLineItemquantity:IntegergetSubtotal():MoneyProductCatalog...getSpecification(id:ItemID):ProductSpecificationProductSpecificationdescription:Textprice:MoneyitemID:ItemID...Storeaddress:Addressname:TextaddSale(s:Sale)Paymentamount:Money...Register...endSale()enterItem(id:ItemID,qty:Integer)makeNewSale()makePayment(cashTendered:Money)Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem(spec:ProdSpecification,qty:Integer)makePayment(cashTendered:Money)getTotal():MoneyReturntypeofmethodvoid;noreturnvalue9/4/202329SalesLineItemquantity:Intege2.9添加關(guān)聯(lián)和方向關(guān)聯(lián)的每一端稱為一個角色,在DCD中,角色可以用方向箭頭修飾9/4/2023302.9添加關(guān)聯(lián)和方向關(guān)聯(lián)的每一端稱為一個角色,在DCD中,角CapturesRegistercurrentSale:SaleendSale()enterItem(...)makeNewSale()makePayment(...)SaledateisCompletetimebecomeComplete()makeLineItem(...)makePayment(...)getTotal()NavigabilityarrowindicatesRegisterobjectsareconnecteduni-directionallytoSaleobjects.AbsenceofnavigabilityarrowindicatesnoconnectionfromSaletoRegister.RegisterclasswillhaveanattributepointingtoaSaleobject.11thecurrentSaleattributeisoftenexcluded,asitisimpliedbythenavigableassociationfromRegistertoSale.9/4/202331CapturesRegistercurrentSale:關(guān)聯(lián)上的方向箭頭一般解釋為從源到目標類的屬性可見性在OOP中,它一般被實現(xiàn)為源類中有一個指向目標類對象的屬性9/4/202332關(guān)聯(lián)上的方向箭頭一般解釋為從源到目標類的屬性可見性8/3/2一些需要定義從A指向B的方向性修飾的情形:A發(fā)送消息給BA創(chuàng)建B的實例A需要保持與B的連接9/4/202333一些需要定義從A指向B的方向性修飾的情形:8/3/20233方向性Navigability通過交互圖來識別i:Store:Registerpc:ProductCatalogcreate()2:create(pc)1:create()1.2:loadProdSpecs():ProductSpecification1.1:create()1.2.2*:add(ps)1.2.1*:create(id,price,description)ps:ProductSpecification9/4/202334方向性Navigability通過交互圖來識別i:StorSalesLineItemquantity:IntegergetSubtotal()ProductCatalog...getSpecification(...)ProductSpecificationdescription:Textprice:MoneyitemID:ItemID...Storeaddress:Addressname:TextaddSale(...)Paymentamount:Money...Contains1..*Contains1..*RegisterendSale()enterItem(...)makeNewSale()makePayment(...)Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem(...)makePayment(...)getTotal()CapturesHousesUsesLooks-inPaid-byDescribes1111111111111*Logs-completed4*19/4/202335SalesLineItemquantity:Intege2.10添加依賴關(guān)系依賴關(guān)系表明一個元素(包括類,用例,等等)知道另外一個元素用虛線箭頭表示在類圖中,依賴關(guān)系可以表示非屬性可見性,即:參數(shù),全局或者局部可見性9/4/2023362.10添加依賴關(guān)系依賴關(guān)系表明一個元素(包括類,用例,等SalesLineItemquantity:IntegergetSubtotal()ProductCatalog...getSpecification(...)ProductSpecificationdescription:Textprice:MoneyitemID:ItemID...Storeaddress:Addressname:TextaddSale(...)Paymentamount:Money...Contains1..*Contains1..*Register...endSale()enterItem(...)makeNewSale()makePayment(...)Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem(...)makePayment(...)getTotal()CapturesHousesUsesLooks-inPaid-byDescribes1111111111111*AdependencyofRegisterknowingaboutProductSpecification.Recommendedwhenthereisparameter,globalorlocallydeclaredvisibility.Logs-completed4*19/4/202337SalesLineItemquantity:Intege成員細節(jié)的表示SampleClassclassAttribute+publicAttribute-privateAttributeattributeWithVisibilityUnspecifiedattribute1:typeburgers:ListofVeggieBurgerattribute2:type=initialvaluefinalConstantAttribute:int=5{frozen}/derivedAttributeclassMethod()+玞onstructor?SampleClass(int)methodWithVisibilityUnspecified()methodReturnsSomething():FooabstractMethod()abstractMethod2(){abstract}//alternate+publicMethod()-privateMethod()#protectedMethod()~packageVisibleMethod()finalMethod(){leaf}methodWithoutSideEffects(){query}synchronizedMethod(){guarded}method1WithParms(inparm1:String,inoutparm2:int)method2WithParms(parm1:String,parm2:float)method3WithParms(parm1,parm2)method4WithParms(String,int)methodWithParmsAndReturn(parm1:String):FoomethodWithParmsButUnspecified(...):FoomethodWithParmsAndReturnBothUnspecified()java.awt.Fontplain:Integer=0{frozen}bold:Integer=1{frozen}name:Stringstyle:Integer=0...+getFont(name:String):Font+getName():String...java.awt.Toolkitorjava.awt.Toolkit{abstract}...//thereareattributes,butnotshown#createButton(target:Button):ButtonPeer+getColorModel():ColorModel...FinalClass{leaf}...//therearemethods,butnotshown玦nterface粆Runnablerun()AlarmClockrun()...anemptycompartmentwithoutellipsismeansthereisdefinitelynomembers(inthiscase,noattributes)9/4/202338成員細節(jié)的表示SampleClassclassAttribuDCD中方法體的表示Register...endSale()enterItem(id,qty)makeNewSale()makePayment(cashTendered){ProductSpecificationspec=catalog.getSpecification(id);sale.makeLineItem(spec,qty);}{publicvoidenterItem(id,qty){ProductSpecificationspec=catalog.getSpecification(id);sale.makeLineItem(spec,qty);}}UMLnotation:AmethodbodyimplementationmaybeshowninaUMLnotebox.Itshouldbeplacedwithinbraces,whichsignifiesitissemanticinfluence(itismorethanjustacomment).Thesynaxmaybepseudo-code,oranylanguage.Itiscommontoexcludethemethodsignature(publicvoid...),butitislegaltoincludeit.9/4/202339DCD中方法體的表示Register...endSale()9/4/2023408/3/2023403.將設(shè)計映射為代碼3.將設(shè)計映射為代碼3.1簡介交互圖和DCD可以作為代碼生成過程的輸入實現(xiàn)模型包括源代碼,數(shù)據(jù)庫定義,源代碼,JSP/XML/HTML9/4/2023423.1簡介交互圖和DCD可以作為代碼生成過程的輸入8/3/23.2編程和開發(fā)過程現(xiàn)代方法:Design-while-programming但是我們經(jīng)常在編程前進行可視化建模9/4/2023433.2編程和開發(fā)過程現(xiàn)代方法:Design-while-3.3在實現(xiàn)時候的創(chuàng)造性和變更設(shè)計中也包括決策和創(chuàng)新工作代碼的生成=機械翻譯過程?不完全對需要修改,詳細的問題將出現(xiàn)并被解決9/4/2023443.3在實現(xiàn)時候的創(chuàng)造性和變更設(shè)計中也包括決策和創(chuàng)新工作8/3.4代碼變更和迭代過程9/4/2023453.4代碼變更和迭代過程8/3/2023453.5從DCD創(chuàng)建類的定義3.5從DCD創(chuàng)建類的定義定義帶有方法和簡單屬性的類publicclassSalesLineItem{privateintquantity;publicSalesLineItem(ProductSpecificationspec,intqty){...}publicMoneygetSubtotal(){...}}SalesLineItemquantity:IntegergetSubtotal():MoneyProductSpecificationdescription:Textprice:MoneyitemID:ItemID...Described-by1*Itisderivedfromthecreate(spec,qty)messagesenttoaSalesLineItem9/4/202347定義帶有方法和簡單屬性的類publicclassSale增加引用屬性類的引用屬性是依據(jù)類圖中的關(guān)聯(lián)和方向性來的SalesLineItemquantity:IntegergetSubtotal():MoneyProductSpecificationdescription:Textprice:MoneyitemID:ItemID...Described-bypublicclassSalesLineItem{privateintquantity;privateProductSpecificationproductSpec;publicSalesLineItem(ProductSpecificationspec,intqty){...}publicMoneygetSubtotal(){...}}*1SimpleattributeReferenceattribute9/4/202348增加引用屬性類的引用屬性是依據(jù)類圖中的關(guān)聯(lián)和方向性來的Sal引用屬性和角色名字角色名字是角色的標識SalesLineItemquantity:IntegergetSubtotal():MoneyProductSpecificationdescription:Textprice:MoneyitemID:ItemID...Described-bypublicclassSalesLineItem{...privateintquantity;privateProductSpecificationproductSpec;}productSpecRolenameusedinattributename.*19/4/202349引用屬性和角色名字角色名字是角色的標識SalesLineIt屬性映射Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem()makePayment()getTtotal()publicclassSale{privateDatedateTime=newDate();...}InJava,thejava.util.Dateclasscombinesbothdateandtimestampinformation.Therefore,theseparateattributesinthedesigncanbecollapsedwhenmappingtoJava.9/4/202350屬性映射Saledate:DateisComplete3.6從交互圖中創(chuàng)建方法消息的順序被翻譯成方法定義中的一系列聲明2:makeLineItem(spec,qty)enterItem(id,qty)1:spec:=getSpecification(id)2.1:create(spec,qty)1.1:spec:=find(id):Register:Sale:ProductCatalogsl:SalesLineItemSalesLineItem:SalesLineItem:ProductSpecification2.2:add(sl)9/4/2023513.6從交互圖中創(chuàng)建方法消息的順序被翻譯成方法定義中的一系列Pro
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘭州信息科技學(xué)院《親子教育活動設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西農(nóng)業(yè)大學(xué)南昌商學(xué)院《稅收》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南藝術(shù)職業(yè)學(xué)院《誤差理論與測繪平差基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 衡水學(xué)院《有機化學(xué)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶交通大學(xué)《元典閱讀與筆記2》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江商業(yè)職業(yè)技術(shù)學(xué)院《形體與舞蹈(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國戲曲學(xué)院《小企業(yè)會計準則》2023-2024學(xué)年第一學(xué)期期末試卷
- 長春汽車工業(yè)高等??茖W(xué)?!蹲匀坏乩韺W(xué)理論與方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江紡織服裝職業(yè)技術(shù)學(xué)院《數(shù)據(jù)分析與SPSS實現(xiàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 食品衛(wèi)生安全監(jiān)管技術(shù)應(yīng)用
- 農(nóng)業(yè)昆蟲學(xué)實驗5蔬菜害蟲課件
- 大學(xué)研究生赴境內(nèi)外高校學(xué)習(xí)課程學(xué)分認定管理辦法
- 非標設(shè)計最強自動計算-壓入力計算
- 銀行客戶經(jīng)理個人履職總結(jié)銀行客戶經(jīng)理個人工作總結(jié)
- 人教版七年級數(shù)學(xué)下冊計算類專項訓(xùn)練卷【含答案】
- 化學(xué)元素周期表口訣化學(xué)元素周期表口訣
- 詩詞接龍(飛花令)PPT
- 子宮內(nèi)膜癌(課堂PPT)
- 澳大利亞公司法1-30
- 海上試油測試技術(shù)0327
- 中國地圖標準版(可編輯顏色)
評論
0/150
提交評論