已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,课程案例一,内容9,编程,简介实现类图编程序列图,简介-1,目的这部分的内容不是给你在编程方面的快速课程,而是为了演示我们已经建立的一些模型是如何映射到代码。我们不解释每条指令。代码的讨论涉及它同类图和序列图的关系。对于类图,我们讨论哪些行代码是实现类、类的属性、方法和关系的。我们利用序列图作为线路图来指导我们实现程序指令被执行的序列。其它的代码讨论局限于解释没有在早期模型中表示的定义特性。,简介-2,内容系统用Java语言实现。它也被我们已经在建立UML模型时使用的CASE工具支持。为了简洁,产生的代码仅仅是Wheels系统实现的部分:Issuebike用例的一个场景。代码局限于处理一位顾客租借一辆自行车。这意味着一些方法,例如Payment的方法calculateTotalPayment()似乎是无用的,因为它是设计用来处理多辆自行车租赁的。因为我们要求代码是为了表述的目的,因而简单代码比全部功能的代码更重要。,简介-3,方法诸如引用其它类的细节已经添加到类。因此,我们忽略了在分析模型中表示的一些属性和方法。这允许我们保持图表在可管理的大小内。从现在起我们称方法methods而不是操作operations;这在此阶段是合适的,因为程序员是关注实现一个过程的代码部分。在早期我们谈论操作而不是方法,因为分析和设计活动更关注过程的界面,而不是它的实现。,实现类图-1,类图实现在图9.1中的实现类图最初是根据代码由CASE工具产生的。它表示了完整的实现细节,即属性、方法参数(带类型和返回值)、以及方法返还类型的可见性、类型和初始值。为了生成类图的目的,即忽略gets和sets方法,简单地设置或返回属性的值。例如,Customer有三个get方法,getCustomerNumber()、getName()和getPostcode(),它们都没有在类图中显示。,实现类图-2,起始类(StartUp)类StartUp是一个新类。Java应用必须总有一个main()方法;当Java应用运行时,它总是第一个执行的方法。在包括main()的Java每个方法必须在一个类中;因此,我们建立StartUp类的原因部分是为了放置main()。StartUp建立的另一个原因是模拟,如果这部分代码是带有欢迎菜单和其它显示界面层的整个可执行系统的一部分时,它模拟将会发生什么。这个类有效地模拟了在图9.2中序列图建模的接待员的功能。四个方法调用,showBikeDetails()、calculateCost()、newCust()和calcTotals(),原来由Receptionist发送到:IssueBikeUI,现在由StartUp发送。,实现类图-3,IssueBikeUI类这个类结合了控制类和界面类的功能。它的前四个属性chosenBike、customer、payment和hire都被用来存放IssueBikeUI需要交互的对象的对象标识符(或引用)。这些属性被用来实现在类图中表示的由IssueBikeUI发出的单向导航路径。最后的属性numberOfDays存放租借的时间长短。当calculateCost(numDays)被调用时它被设置,随后被用作Hire产生的参数。,实现类图-4,Payment类这是同分析模型中建立的Payment类相同的实体类,仅仅是为了简单,省略了一些属性。属性:Customer用来存放对一个Customer对象的引用;这允许每一个Payment对象被联接到正确的Customer对象。它实现了在类图中表示的到Customer类的单向导航。paymentId被用来存放惟一标识每个:Payment的数字。这个数字是一个整数,不像一个引用(或对象标识符)仅被计算机使用,该数字能被人阅读和理解。,实现类图-5,Payment类(续)属性:(续)paymentCount是一个类变量,其允许应用赋值一个数字,该数字惟一标识每个:Payment(paymentId)。每次一个新的Payment对象产生,它就被更新。Payment(cust:Customer)是一个构造器。当调用时,它产生一个新的Payment对象,并将其关联到:Customer引用,该引用被作为参数传递。calculateTotalPayment(hire:Hire)设计用于为一位租借多辆自行车的顾客计算出总的费用。因为在这个实现中,仅有一位顾客租借一辆自行车的情况,因此,本方法仅部分实现;calculateTotalPayment()调用私有方法issueReceipt()。issueReceipt(hire:Hire)打印一张收据。注意在类图中这个方法前面是一个负号,表示其是一个私有方法。这意味着它仅能被Payment类的实例所使用。,实现类图-6,Bike类Bike类结合了Bike实体类,以及一个有所有:Bike标识符的清单的集合类。为了简化,我们已经限制了Bike属性仅有deposit、rate和bikeNumber。方法Methods:Bike(dep:int,rat:int,num:int)是一个构造器。当调用时,它产生一个新的Bike对象,并将其属性设置成传递的参数值。findBikeByNumber(bikeNum:int)是集合类功能的一部分;它在表:Bikes中搜寻,直到找到一个带有相同自行车编号的自行车。showDetail()用来显示由findBikeByNumber()发现的自行车的细节calculateCost(numberOfDays:int)计算出自行车租借一段时间的费用。,实现类图-7,Customer类Customer类是同分析模型中定义相同的实体类。同Payment对象类似,每一个:Customer有一个惟一的customerId,其是由类变量customerCount产生的。为了简单,我们利用邮政编码代替完整的地址。虽然在代码中有三个get方法,但在这个模型中仅表示的方法是一个构造器。Hire类Hire类是同分析模型中定义相同的实体类。同Payment和Customer对象类似,每一个:Hire有一个惟一的hireId,其是由类变量hireCount产生的。属性customer和bike被用来存放对Customer和Bike对象的引用。虽然在它有四个get方法,但在图中仅表示的方法是一个构造器。,编程-1,StartUp类StartUp类的类图在图9.3中表示,StartUp类的代码在图9.4中表示。代码的行01声明StartUp是在一个名称为bikeshop的包内(如同在代码中所有的类一样)。StartUp类声明是在行05。在类中的每一内容必须用波形括号括起来,这个括号告诉编译器类的开始和结束的地方。左括号在行05,右括号在行27。main()方法是在行07声明。这个方法的所有程序指令被放在第二个波形括号中,左括号在行07,右括号在行26。在main()中的第一条指令产生一个IssueBikeUI对象ui(行13),其后四条指令是对IssueBikeUI对象的调用。这四条指令实现在Issuebike用例场景中的主要步骤。,编程-2,IssueBikeUI类IssueBikeUI类的类图在图9.5中表示,其代码在图9.6中表示。IssueBikeUI类在行34声明属性(也被称为方法的变量)37-41声明。showBikeDetails(bikeNum:int):void方法在行42声明,这个方法调用在Bike类中的findBikeByNumber(bikeNum)。findBikeByNumber(bikeNum)反复搜寻它的bike对象数组,直到它发现一个匹配的自行车编号(一个同参数值bikeNum匹配的)。匹配自行车的引用(对象标识符)被返回,并被赋给属性chosenBike。这个引用然后被用来传送消息showDetails()到匹配的自行车。,编程-3,IssueBikeUI类(续)其余的方法声明是:+calculateCost(numDays:int):void在行50+createCustomer(name:String,postcode:String,tel:int):void在行57+calculateTotalPayment():void在行64注意所有这些方法是公有的(public),即它们能被任何对象调用。方法createCustomer()实际上产生一个Hire对象、一个Customer对象和一个Payment对象。,编程-4,Bike类Bike类的类图在图9.7中表示,其代码在图9.8中表示。Bike类在行71中声明一个五个Bike对象的数组bikeList在行74中声明。属性(也被称作成员变量)在行76-78中声明Bike构造器在行91中声明;在行93-95中,成员变量被设置成传递给构造器的参数值。有三个get方法:getDeposit()在行98声明getRate()在行102中声明getBikeNumber()在行106中声明,编程-5,Bike类(续)方法findBikeByNumber()在行110中声明。这个方法在数组:Bikes中搜寻直到发现一个自行车带有同bikeNum(作为参数传递的)相匹配的值。当一个匹配发现后,该:Bike被返回到调用的方法。注意这个方法+findBikeByNumber(bikeNum:int):Bike的定义,其定义了必须返回一个Bike引用。方法showDetails()在行128声明。这个方法显示传送给它的:Bike的bike编号、押金和每天的租金。calculateCost()在行135中声明。这个方法计算租借传送给它的:Bike的总费用。,序列图-1,序列图在编程中的作用对于新手,试图追寻面向对象程序中执行序列是非常困惑的。代码的结构式用类来表示,但执行的序列是由用例来表示。这一结果是执行序列在整个代码清单中跳转。现在我们将Issuebike用例场景的序列图同实现它的代码进行比较。我们将序列图中的消息同实现它的代码行进行映射。按这种方式,我们遵循计算机执行代码的序列。这证明了序列图作为引导我们阅读代码的线路图的用处。,序列图-2,序列图在编程中的作用(续1)我们将要使用的序列图在图9.9中表示。完整的代码在图9.10中列出。表9.1将每一序列的代码消息映射到实现它的代码行。表9.1表示:栏1,序列图中的消息栏2,实现消息的代码行的行号栏3,发送消息的对象或类栏4,接受消息的对象或类,序列图-3,序列图在编程中的作用(续2)Java应用总是从main()方法的执行开始main()方法在StartUp类中,代码行07序列图从main()方法发送的第一个消息开始,在行13,即IssueBikeUIui=newIssueBikeUII)。这产生一个新的:IssueBikeUI。下一条消息showBikeDetails(bikeNum),在行16,是由StartUp发送到新的:IssueBikeUI。为了找出下一步发生什么,我们需要找到在IssueBikeUI类中的方法showBikeDetails(bikeNum)(行42)然后跟随实现这个方法的代码直到我们发现下一条消息(或方法调用)。下一条消息是findBikeByNumber(bikeNum),在44行的指令chosenBike=Bike.findBikeByNumber(bikeNum)中。这个调用是从:IssueBikeUI到Bike类。,序列图-4,序列图在编程中的作用(续3)然后我们到Bike类,发现方法findBikeByNumber(bikeNum)并跟随实现它的代码行,直到我们遇到下一个方法调用。这个方法findBikeByNumber(bikeNum)是在110行。下一个方法调用时在116行,在那里getBikeNumber()消息被传送到在bikeList数组中的每一个:Bikes,这是一个反射或自引用消息。每一:Bike的编号依次同bikeNum的值比较。当一个匹配的:Bike被发现,对该:Bike的引用被返回给:IssueBikeUI。,序列图-5,序列图在编程中的作用(续4)随着返回语句,控制被返回给调用的方法,在方法调用的下一条指令。这意味着下一行将要执行的是行45。行45是一个if语句,其检查是否发现匹配的自行车(如果没有发现,则返回一个空引用)。如果发现一辆自行车,它的引用被返回,然后赋值给变量chosenBike。然后,一个showDetails()消息(行47)被传送到适当的:Bike。showDetails()显示:Bike的细节,然后在48行将控制返回给:IssueBikeUI。行48有波形括号表示if语句的结束。行49包含有表示showBikeDetails()方法结束的波形括号,所以在行19控制被返回到StartUp。,图9.1实施类图,图9.1-1实施类图(1),图9.1-2实施类图(2),图9.2“Issuebike”用例成功场景的设计序列图,图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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖北随州人才集团劳务外包人员招聘考试参考试题及答案解析
- 2026年上半年四川绵阳市北川县考核招聘北川中学教师8人考试备考题库及答案解析
- 2026湖南益阳沅江市卫生事业单位编外临聘人员招聘9人考试备考试题及答案解析
- 2026福建晋江兆瑞建设有限公司招聘2人考试参考题库及答案解析
- 2026北京航空航天大学飞行学院聘用编教务助理F岗招聘1人考试备考题库及答案解析
- 2024年江苏省苏州市常熟市小升初数学试卷(含答案解析)
- 2026广东广州生物医药与健康研究院细胞命运研究组招聘博士后(表观遗传与细胞命运调控方向)考试备考试题及答案解析
- 2026广东东莞市厚街镇第一次招聘编外聘用人员12人考试参考题库及答案解析
- 2026年保山市图书馆城镇公益性岗位招聘(8人)笔试备考试题及答案解析
- 2026晴隆县安粮储备有限公司招聘考试参考题库及答案解析
- 陕西能源职业技术学院招聘笔试真题2023
- 高考语文复习【知识精研】鉴赏古代诗歌抒情方式 课件
- 春运志愿者培训
- 养猪企业新员工职业规划
- 施工机械设备施工技术方案
- 人教版六年级上册数学解方程练习100道及答案
- DL∕T 2447-2021 水电站防水淹厂房安全检查技术规程
- 必修一实验复习+期末复习 高一上学期物理人教版(2019)必修第一册
- 人工费合同简易版
- JT∕T 795-2023 事故汽车修复技术规范
- 九年级上册英语英语阅读理解汇编含解析
评论
0/150
提交评论