2024春 BUAA-OO-Unit4&课程总结

目录

          正向建模与开发

正向建模与反向建模

基于UML的正向建模

架构设计

UML图展示

类图

状态图

顺序图

迭代思路

UML追踪关系

四个单元中架构设计思维的演进

四个单元中测试思维的演进

课程收获


正向建模与开发

正向建模与反向建模

正向建模是指在软件系统开发的早期阶段,基于需求和设计文档等资料,使用建模工具进行系统的设计和建模,根据需求、设计和代码之间的关系来构建模型和图形化展示系统结构和行为。

正向建模是模型代码

反向建模是指对已有的软件系统进行分析和建模,在没有或少有文档的情况下,通过代码对系统进行解析,生成模型来理解系统的现有结构和行为。

反向建模是代码模型

基于UML的正向建模

UML是由一整套图表组成的标准化统一建模语言。通过使用UML,在软件开发之前我们可以对整个软件设计有更好的可读性,可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流。

本单元中,我们用到的UML图主要有类图状态图顺序图

  • 类图是UML模型中的静态视图,它用来描述系统中的有意义的概念。通过类图可以清晰反映一个类的属性、操作以及类之间的关系。

  • 状态图由对象的各个状态和连接这些状态的转换组成, 是展示状态与状态转换的图。状态图清晰地描述了状态之间的转换顺序及状态转换时所必需的触发事件、监护条件等影响转换的因素。

  • 顺序图是描述对象行为的一种交互视图,重点关注对象之间消息传送的时间顺序。通过顺序图我们能够全貌的了解到系统的工作流程。

架构设计

UML图展示

类图

状态图

顺序图

迭代思路

本单元与生活实际联系较为紧密。每进行一次迭代,仿佛就是在为我们的图书馆“装修”一个新的区域或者增添一个功能。

  • 第二次作业中的漂流角,我们可以添加一个DriftLibrarian类来管理漂流角的图书

  • 第三次作业中的信用分,我们可以为每个学生准备一个Credit属性

这样既符合需求的增加,又体现了面向对象的思想,写起来逻辑清晰,即使在迭代时出现问题也便于排查。

UML追踪关系

在设计过程中,我发现不同的UML图有自己的优势所在。

  • 类图适合完成整体的架构,确定需设置的类及类的主要方法。

  • 状态图适合在编写“开馆闭馆整理”功能的时候使用,因为需要描述图书放置状态的转移。

  • 顺序图适合在梳理一个请求发出到处理完毕的全流程时使用,比如对于“预约新书”请求,从接收请求到学生取书,整个流程涉及到时序关系与各个类之间的密切合作。

以类图为例,UML模型与代码设计之间的追踪关系可表现为:

简版UML->代码设计->修改补全UML

可以看出,类图开始领先于代码设计,最终落后于代码得到完善。因为UML作为建模方法更适合于全局上的把控,而具体的细节问题还是需要在写代码时才容易显露出来。所以一开始也没有必要画出一幅十分详细的UML类图。

四个单元中架构设计思维的演进

第一单元的主题是“表达式展开”。这一单元完全自行进行架构设计难度较大,我们要做的更多是充分理解递归下降的思想并把它应用到架构设计中。将表达式拆分成项,将项拆分成因子。把复杂的问题提炼成若干个简化的子问题并逐个描述和解决,这体现了面向对象的魅力。

第二单元的主题是“电梯与多线程”。由于多线程的存在,第二单元在架构设计上有了更大的挑战,混乱的架构设计很有可能导致线程安全问题。这一单元需要我们考虑多个对象在时序上的交互,比如如何准确告诉调度器线程所有请求已处理完毕,可结束运行,这涉及到电梯线程与调度器线程间的交互。

第三单元的主题是“JML规格”。这一单元可以说是架构设计最简单的一个单元,因为规格提供了所有属性和方法的描述。然而,我却经常在看一个规格时由于不知它在全局中的作用而产生疑惑,可见我已经习惯了在最开始不管以什么方式进行一遍架构设计。

第四单元的主题是“UML建模语言”。这一单元是一次很好的锻炼架构设计的机会,不同于第一单元几乎人人使用的递归下降和第二单元几乎都会使用的生产者消费者模型,这一单元有了更多发挥的空间。并且这一单元的主题就是建模语言,所以用UML辅助做好了架构设计这一单元就可以较为轻松地完成。

四个单元中测试思维的演进

第一单元的测试重点是边缘数据的测试。鉴于表达式有各种各样的特殊情况,所以手动构造边缘数据是针对这一单元测试的好方法。

第二单元的测试更多使用白盒方法进行。由于多线程的无法复现性,很多情况下即使拿到了数据也很难找到问题。所以阅读源码,特别是阅读与临界资源有关的代码成为了本单元进行测试的一种方法。

第三单元测试重点是忠于规格。因为规格是我们编写各种方法的唯一标准,最后再用规格检验自然是最好的办法。并且在本单元中我还学会了用Junit传入数据做单元测试,掌握了一种很有效的测试手段。

第四单元的测试主要用自动化的方法实现,因为这一单元有交互性的特点,再辅助以手动构造特殊样例,本单元的测试几乎都是轻松愉快地完成。

课程收获

行文至此,忽觉岁短。横跨16周的OO课程今天也到了告别的时候。

在这门课中,我领悟了面向对象思想,学习了Java语言。

在这门课中,我熟练掌握了juit,starUML等工具。

在这门课中,我通过一次次架构设计和迭代提高了工程能力。

……

总之,使我越来越像一个计算机专业的学生。

  • 38
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值