面向对象分析和设计讲座8设计与代码映射课件.ppt

上传人:牧羊曲112 文档编号:3729361 上传时间:2023-03-18 格式:PPT 页数:57 大小:589KB
返回 下载 相关 举报
面向对象分析和设计讲座8设计与代码映射课件.ppt_第1页
第1页 / 共57页
面向对象分析和设计讲座8设计与代码映射课件.ppt_第2页
第2页 / 共57页
面向对象分析和设计讲座8设计与代码映射课件.ppt_第3页
第3页 / 共57页
面向对象分析和设计讲座8设计与代码映射课件.ppt_第4页
第4页 / 共57页
面向对象分析和设计讲座8设计与代码映射课件.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《面向对象分析和设计讲座8设计与代码映射课件.ppt》由会员分享,可在线阅读,更多相关《面向对象分析和设计讲座8设计与代码映射课件.ppt(57页珍藏版)》请在三一办公上搜索。

1、第8讲 设计与代码映射,2023/3/18,2,内容,可见性设计类图代码映射测试驱动开发与代码重构,1.对可见性进行设计,2023/3/18,4,1.1目标,确定四种可见性对设置可见性进行设计,2023/3/18,5,1.2可见性,可见性Visibility 是对象看到或引用其它对象的能力为了使发送者对象能够向接收者对象发送消息,发送者必须具有接收者的可见性,即发送者必须拥有对接收者对象的某种引用或指针,2023/3/18,6,:Register,enterItem,(itemID,quantity),:ProductCatalog,spec:=getSpecification(itemID)

2、,public void enterItem(itemID,qty),.,spec=catalog.getSpecification(itemID),.,class Register,.,private ProductCatalog catalog;,.,2023/3/18,7,1.3四种可见性,实现对象A到对象B的可见性通常有四种方式:属性可见性Attribute Visibility:B是A的属性参数可见性Parameter visibility:B是A方法中的参数局部可见性Local Visibility:B是A中方法的局部对象(不是参数)全局可见性Global Visibility:B

3、具有某种方式的全局可见性为了使对象A能够向对象B发送消息,对于A而言,B必须是可见的,2023/3/18,8,(1)属性可见性,这是一种相对持久地可见性,:Register,enterItem,(itemID,quantity),:ProductCatalog,spec:=getSpecification(itemID),public void enterItem(itemID,qty),.,spec=catalog.getSpecification(itemID),.,class Register,.,private ProductCatalog catalog;,.,2023/3/18,9

4、,(2)参数可见性,这是一种相对暂时的可见性,2:makeLineItem(spec,qty),enterItem(id,qty),1:spec:=getSpecification(id),2.1:create(spec,qty),:Register,:Sale,:Product,Catalog,sl:SalesLineItem,makeLineItem(ProductSpecification spec,int qty),.,sl=new SalesLineItem(spec,qty);,.,2023/3/18,10,将参数可见性转化为属性可见性十分常见,2:makeLineItem(spe

5、c,qty),enterItem(id,qty),2:spec:=getSpecification(id),2.1:create(spec,qty),:Register,:Sale,:Product,Catalog,sl:SalesLineItem,/initializing method(e.g.,a Java constructor),SalesLineItem(ProductSpecification spec,int qty),.,productSpec=spec;/parameter to attribute visibility,.,2023/3/18,11,(3)局部可见性,实现

6、局部可见性的两种常见方式:创建新的局部实例并将其分配给局部变量将方法调用返回的对象分配给局部变量,2023/3/18,12,(4)全局可见性,这是一种相对持久的可见性将实例分配给全局变量,这在某些语言如C+中是可能的,2023/3/18,13,1.4采用UML表示可见性,:A,:B,1:msg(),:C,2:msg(),:D,3:msg(),:E,4:msg(),is used for,attribute visibility,2.生成设计类图,2023/3/18,15,2.1引言,交互图完成后,有可能来定义软件类(接口)的描述设计类图(Design Class Diagrams,DCD),2

7、023/3/18,16,2.2何时生成DCD,实践中,交互图经常与DCD并行创建为了更清楚地说明DCD,我们选择了在交互图之后介绍DCD,2023/3/18,17,2.3DCD例子,Register,enterItem(.),Sale,date,isComplete:Boolean,time,makeLineItem(.),Captures,Navigability,1,1,Three section box for,class definition.,methods;there are parameters,but unspecified,type information,2023/3/18

8、,18,2.4 DCD 和 UP 术语,设计类图描述了应用中的软件类和接口类,关联和属性接口,包括操作和常量方法属性类型信息可见性依赖UP并没有专门的“设计类图”UP定义了设计模型,包括交互,包和类图.在UP设计模型中的类图包含“设计类”,2023/3/18,19,2.5领域模型 vs.设计模型类,Register,.,endSale(),enterItem(.),makePayment(.),Sale,date,isComplete:Boolean,time,makeLineItem(.),Captures,Register,Sale,date,isComplete:Boolean,time

9、,Captures,software class,1,1,1,1,Domain Model,Design Model,Concept;conceptual class,2023/3/18,20,2.6创建NextGen POS DCD,确定软件类并展示它们检查交互图并列出提到的所有类,2023/3/18,21,给这些类画类图,列出通过领域模型中识别出来,并在设计中采用的属性,The Cashier is not present in the design since for the current iteration it is not necessary to model it in sof

10、tware.,2023/3/18,22,添加方法名通过分析交互图,每一个类具有的方法可以确定,:Register,:Sale,2:makeLineItem(spec,qty),Sale,.,makeLineItem(.),2023/3/18,23,SalesLineItem,-quantity,+getSubtotal(),ProductCatalog,.,+getSpecification(.),ProductSpecification,-description,-price,-itemID,.,Store,-address,-name,+addSale(.),Payment,-amount

11、,.,Register,.,+endSale(),+enterItem(.),+makeNewSale(),+makePayment(.),Sale,-date,-isComplete,-time,+becomeComplete(),+makeLineItem(.),+makePayment(.),+getTotal(),2023/3/18,24,2.7方法的命名,一些注意点create 消息的解释访问方法多对象消息与语言无关的语法,2023/3/18,25,(1)方法名-create,每一种语言有各自特定的实例化instantiation或者初始化initialization的方法在C+,它

12、包含了通过跟随一个构造函数的new操作进行自动内存分配在Java中,它包含了对new 运算符的调用,后面跟构造函数调用,2023/3/18,26,(2)Accessing 方法,获取或者设置属性我们可以将所有属性定义为私有,并对它们定义accessor和mutator这些方法一般在类图中不显示-,2023/3/18,27,(3)多对象,给多对象的消息一般解释为发送给一个container/collection 对象,例如 Java Map,a C+map 或者Smalltalk Dictionary,1:spec:=getSpecification(id),1.1:spec:=find(id)

13、,:Product,Catalog,:Product,Specification,The,find,message is to the,container object,not to a,ProductSpecification.,2023/3/18,28,2.8增加更多的类型信息,属性,方法参数和返回值的类型可以有选择的显示什么时候显示?取决于目的:Code Generation or only Read,2023/3/18,29,SalesLineItem,quantity:Integer,getSubtotal():Money,ProductCatalog,.,getSpecificat

14、ion(id:ItemID):ProductSpecification,ProductSpecification,description:Text,price:Money,itemID:ItemID,.,Store,address:Address,name:Text,addSale(s:Sale),Payment,amount:Money,.,Register,.,endSale(),enterItem(id:ItemID,qty:Integer),makeNewSale(),makePayment(cashTendered:Money),Sale,date:Date,isComplete:B

15、oolean,time:Time,becomeComplete(),makeLineItem(spec:ProdSpecification,qty:Integer),makePayment(cashTendered:Money),getTotal():Money,Return type of method,void;no return value,2023/3/18,30,2.9添加关联和方向,关联的每一端称为一个角色,在DCD中,角色可以用方向箭头修饰,2023/3/18,31,2023/3/18,32,关联上的方向箭头一般解释为从源到目标类的属性可见性在OOP中,它一般被实现为源类中有一个

16、指向目标类对象的属性,2023/3/18,33,一些需要定义从A指向B的方向性修饰的情形:A发送消息给BA创建B的实例A 需要保持与B的连接,2023/3/18,34,方向性Navigability 通过交互图来识别i,2023/3/18,35,SalesLineItem,quantity:Integer,getSubtotal(),ProductCatalog,.,getSpecification(.),ProductSpecification,description:Text,price:Money,itemID:ItemID,.,Store,address:Address,name:Te

17、xt,addSale(.),Payment,amount:Money,.,Contains,1.,*,Contains,1.,*,Register,endSale(),enterItem(.),makeNewSale(),makePayment(.),Sale,date:Date,isComplete:Boolean,time:Time,becomeComplete(),makeLineItem(.),makePayment(.),getTotal(),Captures,Houses,Uses,Looks-in,Paid-by,Describes,1,1,1,1,1,1,1,1,1,1,1,1

18、,1,*,Logs-completed,4,*,1,2023/3/18,36,2.10 添加依赖关系,依赖关系表明一个元素(包括类,用例,等等)知道另外一个元素用虚线箭头表示在类图中,依赖关系可以表示非属性可见性,即:参数,全局或者局部可见性,2023/3/18,37,A dependency of Register knowing about,ProductSpecification.,Recommended when there is parameter,global or locally declared visibility.,Logs-completed,4,*,1,2023/3/1

19、8,38,成员细节的表示,SampleClass,classAttribute,+publicAttribute,-privateAttribute,attributeWithVisibilityUnspecified,attribute1:type,burgers:List of VeggieBurger,attribute2:type=initial value,finalConstantAttribute:int=5 frozen,/derivedAttribute,classMethod(),+玞onstructor?SampleClass(int),methodWithVisibil

20、ityUnspecified(),methodReturnsSomething():Foo,abstractMethod(),abstractMethod2()abstract/alternate,+publicMethod(),-privateMethod(),#protectedMethod(),packageVisibleMethod(),finalMethod()leaf,methodWithoutSideEffects()query,synchronizedMethod()guarded,method1WithParms(in parm1:String,inout parm2:int

21、),method2WithParms(parm1:String,parm2:float),method3WithParms(parm1,parm2),method4WithParms(String,int),methodWithParmsAndReturn(parm1:String):Foo,methodWithParmsButUnspecified(.):Foo,methodWithParmsAndReturnBothUnspecified(),java.awt.Font,plain:Integer=0,frozen,bold:Integer=1,frozen,name:String,sty

22、le:Integer=0,.,+getFont(name:String):Font,+getName():String,.,java.awt.Toolkit,or,java.awt.Toolkit abstract,./there are attributes,but not shown,#createButton(target:Button):ButtonPeer,+getColorModel():ColorModel,.,FinalClass leaf,./there are methods,but not shown,玦nterface粆,Runnable,run(),AlarmCloc

23、k,run(),.,an empty,compartment,without ellipsis,means there is,definitely no,members(in,this case,no,attributes),2023/3/18,39,DCD中方法体的表示,Register,.,endSale(),enterItem(id,qty),makeNewSale(),makePayment(cashTendered),ProductSpecification spec=catalog.getSpecification(id);,sale.makeLineItem(spec,qty);

24、,public void enterItem(id,qty),ProductSpecification 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,which,signifies it is semantic influence(it is more than just a comment).,T

25、he synax may be pseudo-code,or any language.,It is common to exclude the method signature(public void.),but it is legal to include it.,2023/3/18,40,3.将设计映射为代码,2023/3/18,42,3.1简介,交互图和DCD可以作为代码生成过程的输入实现模型包括源代码,数据库定义,源代码,JSP/XML/HTML,2023/3/18,43,3.2 编程和开发过程,现代方法:Design-while-programming但是我们经常在编程前进行可视化

26、建模,2023/3/18,44,3.3在实现时候的创造性和变更,设计中也包括决策和创新工作代码的生成=机械翻译过程?不完全对需要修改,详细的问题将出现并被解决,2023/3/18,45,3.4代码变更和迭代过程,3.5从DCD创建类的定义,2023/3/18,47,定义带有方法和简单属性的类,It is derived from the create(spec,qty)message sent to a SalesLineItem,2023/3/18,48,增加引用属性,类的引用属性是依据类图中的关联和方向性来的,SalesLineItem,quantity:Integer,getSubtot

27、al():Money,ProductSpecification,description:Text,price:Money,itemID:ItemID,.,Described-by,public class SalesLineItem,private int quantity;,private ProductSpecification productSpec;,public SalesLineItem(ProductSpecification spec,int qty).,public Money getSubtotal().,*,1,Simple attribute,Reference att

28、ribute,2023/3/18,49,引用属性和角色名字,角色名字是角色的标识,SalesLineItem,quantity:Integer,getSubtotal():Money,ProductSpecification,description:Text,price:Money,itemID:ItemID,.,Described-by,public class SalesLineItem,.,private int quantity;,private ProductSpecification productSpec;,productSpec,Role name used in,attrib

29、ute name.,*,1,2023/3/18,50,属性映射,Sale,date:Date,isComplete:Boolean,time:Time,becomeComplete(),makeLineItem(),makePayment(),getTtotal(),public class Sale,private Date dateTime=new Date();,.,In Java,the java.util.Date class combines both date,and timestamp information.Therefore,the separate,attributes

30、in the design can be collapsed when mapping,to Java.,2023/3/18,51,3.6从交互图中创建方法,消息的顺序被翻译成方法定义中的一系列声明,2:makeLineItem(spec,qty),enterItem(id,qty),1:spec:=getSpecification(id),2.1:create(spec,qty),1.1:spec:=find(id),:Register,:Sale,:Product,Catalog,sl:SalesLineItem,SalesLineItem,:SalesLineItem,:Product,

31、Specification,2.2:add(sl),2023/3/18,52,ProductCatalog,.,getSpecification(.),Sale,date:Date,isComplete:Boolean,time:Time,becomeComplete(),makeLineItem(.),makePayment(.),getTotal(),Captures,Looks-in,Register,.,endSale(),enterItem(id:ItemID,qty:Integer),makeNewSale(),makePayment(cashTendered:Money),pub

32、lic class Register,private 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).,1,1,1,1,2023/3/18,53,2:makeLineItem(spec,qty),enterItem(i

33、d,qty),1:spec:=getSpecification(id),:Register,:Sale,:Product,Catalog,ProductSpecification spec=catalog.getSpecification(id);,sale.makeLineItem(spec,qty);,2023/3/18,54,3.7代码中的容器/集合类,SalesLineItem,quantity:Integer,getSubtotal(),Contains,1.,*,Sale,date:Date,isComplete:Boolean,time:Time,becomeComplete()

34、,makeLineItem(),makePayment(),getTtotal(),public class Sale,.,private List lineItems=new ArrayList();,A collection class is necessary to,maintain attribute visibility to all the,SalesLineItems.,1,2023/3/18,55,3.8小结,从DCD翻译类的定义、从交互图翻译方法是比较直接的过程但是在编程阶段依旧有许多地方需要做决策,设计修改和探索,2023/3/18,56,4测试驱动开发和重构,XP的理念首先编写测试不断重构代码以改进质量,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号