2024-BUAA-OO Unit 4

2024-BUAA-OO Unit 4

主要内容:

  • 总结本单元所实践的正向建模与开发
  • 总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系
  • 总结自己在四个单元中架构设计思维的演进
  • 总结自己在四个单元中测试思维的演进
  • 总结自己的课程收获

U4正向建模与开发

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

本单元课程中,课程组鼓励我们先根据指导书要求绘制相关UML图进行初步设计再实现代码。三次作业中我们先后接触学习了类图、状态图、时序图,在每次作业开始建模绘制的过程中,整体的逻辑、方法、关系清晰可控,能够对系统进行彻底的分析设计,使系统各个方面得到充分考虑。尤其在进行一次次的迭代开发时,如果盲目地在代码上直接更改添加往往很容易错过很多细节。

  • 类图是描述系统中的类,以及各个类之间的关系的静态视图,也是定义其他图的基础。

  • 状态图描述类的对象所有可能的状态,以及事件发生时状态的转移条件,状态图是对类图的补充。

  • 顺序图可以用来展示对象之间是如何进行交互的。序列图将显示的重点放在消息序列上,强调消息是如何在对象之间被发送和接收的。

但像UML这样建模工具的价值在短短的一个单元中远远不能完全彰显,一方面,还有很多设计建模的工具(比如rwg老师课堂上强烈安利的“小人图”(即用例图))在课程学习中没有机会深入学习;一方面,它在更大的开发场景(如对大规模复杂系统进行建模)更有效用。

U4架构设计

本单元最终类图如下,整体框架历次作业并没有很大的改动。

在这里插入图片描述

  1. Library管理了appointmentOffice(预约处)、bookshelf(书架)、circulationDesk(借还处)、bookDriftCorner(捐献角),所有的指令都在Library中进行分发处理,是整个图书馆管理系统中的controller。
  2. 图书馆中相关的用户信息采取单例模式,便于获取处理。

但是,确实在细节设计上还有一些有待改进让设计更优雅的地方:比如在最后一次迭代之后,不允许对一本书重复多次预约,也便没有了先前存在的“取书时,对于用户要取的这本书,如果预约处存在多本,默认取走最早送达预约处的一本”这样的考量。面对诸如此类的问题由于它对正确性并没有影响,也就得过且过了,但确实让代码看上去丑丑的。

架构设计思维

U1的主要内容是通过对数学意义上的表达式结构进行建模,完成多项式的括号展开与函数调用、化简。在这个单元学习接触了词法分析和语法分析,在表达式、项、因子这样的关系中第一次如此清晰地感受到层次化设计的思想,也学习到递归下降这样“在高层次的代码编写中忽视局部问题的解决过程,假设其已经被某个方法解决,从而直接调用该方法”的逻辑简化思想。

U2的主要内容是模拟多线程实时电梯系统。第一次接触学习多线程(是很痛苦的电梯月),纷繁复杂的调度策略参杂着线程不安全的种种隐患,设计上的复杂性和潜在的并发问题需要反复思考琢磨。多线程还是没有学的很会,还是需要时间反复参悟明白啊。。

U3的主要内容是学习JML的语法进行规格化的设计。规格化的设计一定程度上解决避免了自然语言的二义性问题。除此之外,感受颇深的是规格告诉我们应该做什么但并没有说应该怎么做(规格和实现分离)。针对同一个方法的规格,可以有多种实现方式,并带来不同的性能提升,我们更应该在阅读规格理解设计要求后,自己考虑选择用什么样的数据结构储存、用什么算法优化等实现上的问题。

U4也就是这单元,主要内容是学习UML中很典型常用的三类图,以及图形化建模的相关内容。通过图形化建模设计系统结构,与具体的工程代码相分离,在前期对系统进行设计与评估,这种方式也便于迭代时的修改与扩充。

测试思维

代码写完只是作业完成的第一步,在这之后还有漫长的测试-发现bug-修正-再测试这样无穷无尽的过程,在课程中我曾

  • 自己捏数据进行压力测试,比如高并发、高复杂度、大数据

  • 使用多方大佬的评测机评测进行黑箱测试

  • 一步步排查代码及其实现逻辑的白箱测试

  • 利用规格信息设计进行参数化的Junit测试(U3),实现一次性测试多个场景

课程收获

至此,oo课程进入了尾声。时间过得好快啊。。。

课程中并没有在Java知识上教授很多(好的几乎没有,还是只会oop学到的那一点点),更多的是在架构设计思维上的引导和锻炼。虽然有的地方没有做得特别特别好,但也是有所收获不是吗,不论是看着学长学姐的博客一点点模仿探索好的设计好的代码应该是什么样,还是身边同学所迸发的闪亮的思维,以及在一学期课程结束后多多少少有些许进步的设计能力。唯一特别遗憾的应该是rwg老师在课堂上所讲,对oo方面的理论还不清楚,只是会用,堪堪是只会敲(不漂亮的)代码的水平。

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值