




已阅读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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度储藏室出售及仓储配送与售后服务合同
- 2025版企业合规风险防范法律顾问聘用合同
- 2025年度文化产业融资租赁担保合同范本
- 红酒知识与健康培训课件
- 2025水利管道工程合同条款及格式
- 红酒白酒香槟知识培训课件
- 2025保温材料采购协议
- 会议纪要标准化撰写模板清晰明了
- 专业咨询公司与房产开发商合作开发办公区协议
- 人工智能助手产品合作协议
- 2025年四川省成都市中考生物真题(解析版)
- 保险执业登记管理制度
- 2025-2030中国电子墨水屏幕行业市场发展趋势与前景展望战略分析研究报告
- 口腔数字化技术课件
- 2025年安徽省农业职业技能大赛(动物检疫检验员)备赛试题库(含答案)
- 2024年重庆市中考英语试卷(A卷)(含答案与解析)
- 种子购买协议合同书
- 《小学美术开学第一课》课件
- 汽车行业售后
- 直播电商数据分析教学计划
- DBJ-T13-483-2025 预拌流态固化土技术标准
评论
0/150
提交评论