《【教学课件】第8讲设计与代码映射.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第8讲设计与代码映射.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系第第8讲讲 设计与代码映射设计与代码映射上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系内容内容w可可见性性w设计类图w代代码映射映射w测试驱动开开发与代与代码重构重构1/9/20232上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系1.对可见性进行设计对可见性进行设计上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系1.1目标目标w确定四种可确定四种可见性性w对设置可置可见性性进行行设计1/9/20234上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系1.2可见性可见性w可可见性性Vis
2、ibility 是是对象看到或引用其它象看到或引用其它对象的能象的能力力w为了使了使发送者送者对象能象能够向接收者向接收者对象象发送消息,送消息,发送者必送者必须具有接收者的可具有接收者的可见性,即性,即发送者必送者必须拥有有对接收者接收者对象的某种引用或指象的某种引用或指针1/9/20235上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getSpecification(itemID)public void enterItem(itemID,qty).spec=cata
3、log.getSpecification(itemID).class Register .private ProductCatalog catalog;.1/9/20236上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系1.3四种可见性四种可见性w实现对象象A到到对象象B的可的可见性通常有四种方式性通常有四种方式:n属性可属性可见性性Attribute Visibility:B是是A的属性的属性n参数可参数可见性性Parameter visibility:B是是A方法中的参数方法中的参数n局部可局部可见性性Local Visibility:B是是A中方法的局部中方法的局部对象象(不
4、是参数)(不是参数)n全局可全局可见性性Global Visibility:B具有某种方式的全局可具有某种方式的全局可见性性w为了使了使对象象A能能够向向对象象B发送消息,送消息,对于于A而言,而言,B必必须是可是可见的的1/9/20237上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系(1)属性可见性属性可见性w这是一种相是一种相对持久地可持久地可见性性:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getSpecification(itemID)public void enterItem(itemID,qty).s
5、pec=catalog.getSpecification(itemID).class Register .private ProductCatalog catalog;.1/9/20238上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系(2)参数可见性参数可见性w这是一种相是一种相对暂时的可的可见性性2:makeLineItem(spec,qty)enterItem(id,qty)1:spec:=getSpecification(id)2.1:create(spec,qty):Register:Sale:ProductCatalogsl:SalesLineItemmakeLineI
6、tem(ProductSpecification spec,int qty).sl=new SalesLineItem(spec,qty);.1/9/20239上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系w将参数可将参数可见性性转化化为属性可属性可见性十分常性十分常见2:makeLineItem(spec,qty)enterItem(id,qty)2:spec:=getSpecification(id)2.1:create(spec,qty):Register:Sale:ProductCatalogsl:SalesLineItem/initializing method(e.g
7、.,a Java constructor)SalesLineItem(ProductSpecification spec,int qty).productSpec=spec;/parameter to attribute visibility.1/9/202310上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系(3)局部可见性局部可见性w实现局部可局部可见性的两种常性的两种常见方式方式:n创建新的局部建新的局部实例并将其分配例并将其分配给局部局部变量量n将方法将方法调用返回的用返回的对象分配象分配给局部局部变量量:RegisterenterItem(itemID,quantity)
8、:ProductCatalogspec:=getSpecification(itemID)enterItem(id,qty)./local visibility via assignment of returning objectProductSpecification spec=catalog.getSpecification(id);.1/9/202311上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系(4)全局可见性全局可见性w这是一种相是一种相对持久的可持久的可见性性w将将实例分配例分配给全局全局变量,量,这在某些在某些语言如言如C+中中是可能的是可能的1/9/202312
9、上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系1.4采用采用UML表示可见性表示可见性:A:B1:msg():C2:msg():D3:msg():E4:msg()is used forattribute visibility1/9/202313上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.生成设计类图生成设计类图上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.1引言引言w交互交互图完成后,有可能来定完成后,有可能来定义软件件类(接口)的(接口)的描述描述w设计类图(Design Class Diagrams,DCD)1/9/202315上海交通大
10、学计算机科学与工程系上海交通大学计算机科学与工程系2.2何时生成何时生成DCDw实践中,交互践中,交互图经常与常与DCD并行并行创建建w为了更清楚地了更清楚地说明明DCD,我,我们选择了在交互了在交互图之之后介后介绍DCD1/9/202316上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.3DCD例子例子RegisterenterItem(.)SaledateisComplete:BooleantimemakeLineItem(.)CapturesNavigability11Three section box forclass definition.methods;there
11、are parameters,but unspecifiedtype information1/9/202317上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.4 DCD 和和 UP 术语术语w设计类图描述了描述了应用中的用中的软件件类和接口和接口n类,关,关联和属性和属性n接口,包括操作和常量接口,包括操作和常量n方法方法n属性属性类型信息型信息n可可见性性n依依赖wUP并没有并没有专门的的“设计类图”wUP定定义了了设计模型,包括交互,包和模型,包括交互,包和类图.w在在UP设计模型中的模型中的类图包含包含“设计类”1/9/202318上海交通大学计算机科学与工程系上海交通
12、大学计算机科学与工程系2.5领域模型领域模型 vs.设计模型类设计模型类Register.endSale()enterItem(.)makePayment(.)SaledateisComplete:BooleantimemakeLineItem(.)CapturesRegisterSaledateisComplete:BooleantimeCapturessoftware class1111Domain ModelDesign ModelConcept;conceptual class1/9/202319上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.6创建创建NextGen
13、POS DCDw确定确定软件件类并展示它并展示它们n检查交互交互图并列出提到的所有并列出提到的所有类RegisterSaleProductCatalogProductSpecificationStoreSalesLineItemPayment1/9/202320上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系w给这些些类画画类图,列出通,列出通过领域模型中域模型中识别出来,出来,并在并在设计中采用的属性中采用的属性The Cashier is not present in the design since for the current iteration it is not ne
14、cessary to model it in software.1/9/202321上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系w添加方法名添加方法名n通通过分析交互分析交互图,每一个,每一个类具有的方法可以确定具有的方法可以确定:Register:Sale2:makeLineItem(spec,qty)Sale.makeLineItem(.)1/9/202322上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系SalesLineItem-quantity+getSubtotal()ProductCatalog.+getSpecification(.)ProductS
15、pecification-description-price-itemID.Store-address-name+addSale(.)Payment-amount.Register.+endSale()+enterItem(.)+makeNewSale()+makePayment(.)Sale-date-isComplete-time+becomeComplete()+makeLineItem(.)+makePayment(.)+getTotal()1/9/202323上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.7方法的命名方法的命名w一些注意点一些注意点ncreate 消
16、息的解消息的解释n访问方法方法n多多对象消息象消息n与与语言无关的言无关的语法法1/9/202324上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系(1)方法名)方法名-createw每一种每一种语言有各自特定的言有各自特定的实例化例化instantiation或或者初始化者初始化initialization的方法的方法n在在C+,它包含了通它包含了通过跟随一个构造函数的跟随一个构造函数的new操作操作进行自行自动内存分配内存分配n在在Java中中,它包含了它包含了对new 运算符的运算符的调用,后面跟构用,后面跟构造函数造函数调用用1/9/202325上海交通大学计算机科学与工程
17、系上海交通大学计算机科学与工程系(2)Accessing 方法方法w获取或者取或者设置属性置属性n我我们可以将所有属性定可以将所有属性定义为私有,并私有,并对它它们定定义accessor和和mutatorw这些方法一般在些方法一般在类图中不中不显示示-1/9/202326上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系(3)多对象)多对象w给多多对象的消息一般解象的消息一般解释为发送送给一个一个container/collection 对象,例如象,例如 Java Map,a C+map 或者或者Smalltalk Dictionary1:spec:=getSpecificatio
18、n(id)1.1:spec:=find(id):ProductCatalog:ProductSpecificationThe find message is to thecontainer object,not to aProductSpecification.1/9/202327上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.8增加更多的类型信息增加更多的类型信息w属性,方法参数和返回属性,方法参数和返回值的的类型可以有型可以有选择的的显示示w什么什么时候候显示示?取决于取决于n目的目的:Code Generation or only Read1/9/202328上海交通大学
19、计算机科学与工程系上海交通大学计算机科学与工程系SalesLineItemquantity:IntegergetSubtotal():MoneyProductCatalog.getSpecification(id:ItemID):ProductSpecificationProductSpecificationdescription:Textprice:MoneyitemID:ItemID.Storeaddress:Addressname:TextaddSale(s:Sale)Paymentamount:Money.Register.endSale()enterItem(id:ItemID,qt
20、y:Integer)makeNewSale()makePayment(cashTendered:Money)Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem(spec:ProdSpecification,qty:Integer)makePayment(cashTendered:Money)getTotal():MoneyReturn type of methodvoid;no return value1/9/202329上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.9添加关联和方向添加关联
21、和方向w关关联的每一端称的每一端称为一个角色,在一个角色,在DCD中,角色可中,角色可以用方向箭以用方向箭头修修饰1/9/202330上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系CapturesRegistercurrentSale:SaleendSale()enterItem(.)makeNewSale()makePayment(.)SaledateisCompletetimebecomeComplete()makeLineItem(.)makePayment(.)getTotal()Navigability arrow indicatesRegister objects a
22、re connecteduni-directionally to Saleobjects.Absence of navigabilityarrow indicates noconnection from Sale toRegister.Register class willhave an attribute pointing to aSale object.11the currentSaleattribute is oftenexcluded,as it isimplied by thenavigableassociation fromRegister to Sale.1/9/202331上海
23、交通大学计算机科学与工程系上海交通大学计算机科学与工程系w关关联上的方上的方向箭向箭头一般解一般解释为从源到目从源到目标类的属的属性可性可见性性w在在OOP中中,它一般被它一般被实现为源源类中有一个指向目中有一个指向目标类对象的属性象的属性1/9/202332上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系w一些需要定一些需要定义从从A指向指向B的方向性修的方向性修饰的情形的情形:nA发送消息送消息给BnA创建建B的的实例例nA 需要保持与需要保持与B的的连接接1/9/202333上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系w方向性方向性Navigability 通
24、通过交互交互图来来识别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:ProductSpecification1/9/202334上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系SalesLineItemquantity:IntegergetSubtotal()ProductCatalog.getSp
25、ecification(.)ProductSpecificationdescription:Textprice:MoneyitemID:ItemID.Storeaddress:Addressname:TextaddSale(.)Paymentamount:Money.Contains1.*Contains1.*RegisterendSale()enterItem(.)makeNewSale()makePayment(.)Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem(.)makePayment(.)get
26、Total()CapturesHousesUsesLooks-inPaid-byDescribes1111111111111*Logs-completed4*11/9/202335上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2.10 添加依赖关系添加依赖关系w依依赖关系表明一个元素(包括关系表明一个元素(包括类,用例,等等),用例,等等)知道另外一个元素知道另外一个元素n用虚用虚线箭箭头表示表示w在在类图中,依中,依赖关系可以表示非属性可关系可以表示非属性可见性,即:性,即:参数,全局或者局部可参数,全局或者局部可见性性1/9/202336上海交通大学计算机科学与工程系上海交通
27、大学计算机科学与工程系SalesLineItemquantity:IntegergetSubtotal()ProductCatalog.getSpecification(.)ProductSpecificationdescription:Textprice:MoneyitemID:ItemID.Storeaddress:Addressname:TextaddSale(.)Paymentamount:Money.Contains1.*Contains1.*Register.endSale()enterItem(.)makeNewSale()makePayment(.)Saledate:Datei
28、sComplete:Booleantime:TimebecomeComplete()makeLineItem(.)makePayment(.)getTotal()CapturesHousesUsesLooks-inPaid-byDescribes1111111111111*A dependency of Register knowing aboutProductSpecification.Recommended when there is parameter,global or locally declared visibility.Logs-completed4*11/9/202337上海交
29、通大学计算机科学与工程系上海交通大学计算机科学与工程系成员细节的表示成员细节的表示SampleClassclassAttribute+publicAttribute-privateAttributeattributeWithVisibilityUnspecifiedattribute1:typeburgers:List of VeggieBurgerattribute2:type=initial valuefinalConstantAttribute:int=5 frozen/derivedAttributeclassMethod()+玞onstructor?SampleClass(int)m
30、ethodWithVisibilityUnspecified()methodReturnsSomething():FooabstractMethod()abstractMethod2()abstract /alternate+publicMethod()-privateMethod()#protectedMethod()packageVisibleMethod()finalMethod()leaf methodWithoutSideEffects()query synchronizedMethod()guarded method1WithParms(in parm1:String,inout
31、parm2:int)method2WithParms(parm1:String,parm2:float)method3WithParms(parm1,parm2)method4WithParms(String,int)methodWithParmsAndReturn(parm1:String):FoomethodWithParmsButUnspecified(.):FoomethodWithParmsAndReturnBothUnspecified()plain:Integer=0 frozen bold:Integer=1 frozen name:Stringstyle:Integer=0.
32、+getFont(name:String):Font+getName():String.or abstract./there are attributes,but not shown#createButton(target:Button):ButtonPeer+getColorModel():ColorModel.FinalClass leaf./there are methods,but not shown玦nterface粆Runnablerun()AlarmClockrun().an emptycompartmentwithout ellipsismeans there isdefini
33、tely nomembers(inthis case,noattributes)1/9/202338上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系DCD中方法体的表示中方法体的表示Register.endSale()enterItem(id,qty)makeNewSale()makePayment(cashTendered)ProductSpecification spec=catalog.getSpecification(id);sale.makeLineItem(spec,qty);public void enterItem(id,qty)ProductSpecificati
34、on spec=catalog.getSpecification(id);sale.makeLineItem(spec,qty);UML notation:A method body implementation may be shown in a UML note box.It should be placed within braces,whichsignifies it is semantic influence(it is more than just a comment).The synax may be pseudo-code,or any language.It is commo
35、n to exclude the method signature(public void.),but it is legal to include it.1/9/202339上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系1/9/202340上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.将设计映射为代码将设计映射为代码上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.1简介简介w交互交互图和和DCD可以作可以作为代代码生成生成过程的程的输入入w实现模型包括源代模型包括源代码,数据,数据库定定义,源代,源代码,JSP/XML/HTML1/9/2023
36、42上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.2 编程和开发过程编程和开发过程w现代方法代方法:Design-while-programmingw但是我但是我们经常在常在编程前程前进行可行可视化建模化建模1/9/202343上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.3在实现时候的创造性和变更在实现时候的创造性和变更w设计中也包括决策和中也包括决策和创新工作新工作w代代码的生成的生成=机械翻机械翻译过程程?n不完全不完全对n需要修改,需要修改,详细的的问题将出将出现并被解决并被解决1/9/202344上海交通大学计算机科学与工程系上海交通大学计算机科学
37、与工程系3.4代码变更和迭代过程代码变更和迭代过程1/9/202345上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.5从从DCD创建类的定义创建类的定义上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系定义带有方法和简单属性的类定义带有方法和简单属性的类public class SalesLineItemprivate int quantity;public SalesLineItem(ProductSpecification spec,int qty).public Money getSubtotal().SalesLineItemquantity:Integer
38、getSubtotal():MoneyProductSpecificationdescription:Textprice:MoneyitemID:ItemID.Described-by1*It is derived from the create(spec,qty)message sent to a SalesLineItem1/9/202347上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系增加引用属性增加引用属性w类的引用属性是依据的引用属性是依据类图中的关中的关联和方向性来的和方向性来的SalesLineItemquantity:IntegergetSubtotal():Mo
39、neyProductSpecificationdescription:Textprice:MoneyitemID:ItemID.Described-bypublic class SalesLineItemprivate int quantity;private ProductSpecification productSpec;public SalesLineItem(ProductSpecification spec,int qty).public Money getSubtotal().*1Simple attributeReference attribute1/9/202348上海交通大学
40、计算机科学与工程系上海交通大学计算机科学与工程系引用属性和角色名字引用属性和角色名字w角色名字是角色的角色名字是角色的标识SalesLineItemquantity:IntegergetSubtotal():MoneyProductSpecificationdescription:Textprice:MoneyitemID:ItemID.Described-bypublic class SalesLineItem.private int quantity;private ProductSpecification productSpec;productSpecRole name used ina
41、ttribute name.*11/9/202349上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系属性映射属性映射Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem()makePayment()getTtotal()public class Saleprivate Date dateTime=new Date();.In Java,the java.util.Date class combines both dateand timestamp information.Therefore,the
42、separateattributes in the design can be collapsed when mappingto Java.1/9/202350上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.6从交互图中创建方法从交互图中创建方法w消息的消息的顺序被翻序被翻译成方法定成方法定义中的一系列声明中的一系列声明2:makeLineItem(spec,qty)enterItem(id,qty)1:spec:=getSpecification(id)2.1:create(spec,qty)1.1:spec:=find(id):Register:Sale:ProductCa
43、talogsl:SalesLineItemSalesLineItem:SalesLineItem:ProductSpecification2.2:add(sl)1/9/202351上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系ProductCatalog.getSpecification(.)Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem(.)makePayment(.)getTotal()CapturesLooks-inRegister.endSale()enterItem(id:Item
44、ID,qty:Integer)makeNewSale()makePayment(cashTendered:Money)public class Registerprivate ProductCatalog catalog;private Sale sale;public Register(ProductCatalog pc).public void endSale().public void enterItem(ItemID id,int qty).public void makeNewSale().public void makePayment(Money cashTendered).111
45、11/9/202352上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2:makeLineItem(spec,qty)enterItem(id,qty)1:spec:=getSpecification(id):Register:Sale:ProductCatalog ProductSpecification spec=catalog.getSpecification(id);sale.makeLineItem(spec,qty);1/9/202353上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系3.7代码中的容器代码中的容器/集合类集合类SalesLineItemqu
46、antity:IntegergetSubtotal()Contains1.*Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem()makePayment()getTtotal()public class Sale.private List lineItems=new ArrayList();A collection class is necessary tomaintain attribute visibility to all theSalesLineItems.11/9/202354上海交通大学计算机科学
47、与工程系上海交通大学计算机科学与工程系3.8小结小结w从从DCD翻翻译类的定的定义、从交互、从交互图翻翻译方法是比方法是比较直接的直接的过程程w但是在但是在编程程阶段依旧有段依旧有许多地方需要做决策,多地方需要做决策,设计修改和探索修改和探索1/9/202355上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系4测试驱动开发和重构测试驱动开发和重构wXP的理念的理念n首先首先编写写测试n不断重构代不断重构代码以改以改进质量量1/9/202356上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系4.1 测试驱动开发测试驱动开发w编写一小段写一小段测试代代码,再,再编写一小段写一小段产品代品代码w优点:点:n保保证编写写单元元测试n使程序使程序员获得得满足感从而更始足感从而更始终如一地如一地坚持持编写写测试n有助于澄清接口和行有助于澄清接口和行为的的细节n可可证明,可再明,可再现,自,自动的的验证n改改变事物的信心事物的信心1/9/202357上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系4.2 重构重构w去去处冗余的代冗余的代码w改善清晰度改善清晰度w使使过长的方法的方法变得得较短短w去去处硬硬编码的字面常量的字面常量1/9/202358