301
社区成员
发帖
与我相关
我的任务
分享作为2024年OO课程最后一个单元,UML建模单元秉承让同学们初步掌握使用UML进行正向建模再进行编程的流程。在难度上本单元也非常适中,同时也是四个单元里唯一一个几乎完全让我们自行设计架构的单元。因此在本单元我的收获也颇丰,基本围绕着需求分析、建模设计、编程实现的流程完整地过了一遍。
关于正向建模,其实很好理解。我们大多数人其实已经习惯了拿到需求便立马进行程序实现,但在这个过程中往往会遭遇很多小插曲,或是自己已经实现的地方不合理,或是发现有更好的架构……于是边实现代码边进行修改,这种磕磕绊绊的过程又往往会在完成后带来意想不到的bug。
这便是正向建模诞生的原因。即先建模设计,再编程实现。而UML统一建模语言正式为我们提供了这样一个建模工具,让我们能够通过图形可视化的方式直观地设计自己的架构,并在后续实现中能够同步方便地做修改。
UML建模常用的三个图分别是类图、状态图、以及顺序图。在我的实践中,建模阶段最常用的应是类图。类图是我们在初步了解客户需求后所设想的架构的第一个展现,可以直观的表达出自己的架构,所设计的类以及方法等。在这个过程中,能逐步掌握各个类之间的关系,数据所适合的容器以及所需要的方法等等。
在基本设计好类图后,便可以开始着手实现代码了。因为有了模型以及类图的直观表示,在实现代码时就显得从容,同时能在编码过程检查架构的合理性,及时作出调整。
本单元最终的UML类图如下:

本单元要求我们所设计的图书馆管理系统,结合需求,其实很容易想到这样一个合理的架构:书架、借还处、预约处、漂流角各成一类,各司其职,而互相又能传递信息。它们共同使用图书馆数据。
事实上,在确定好类图后,对于大部分代码设计基本完全是按照类图进行的。少有的一些地方在代码实现时做了部分修改。从这里也可以看出,虽然正向建模过程有先建模再编码的确定顺序,但是它们始终也是相辅相成的。
对于第一个单元,主要注重的是层次化设计,以及递归下降法的一个理解。在表达式化简的主题下,我体会了从项—因子—表达式,单项式—多项式的层次化结构设计对于程序的极大好处。
在测试方面,第一单元主要采取了自行构造数据以及随机生成数据多人对拍的思路。
第二单元聚焦于多线程,在这个单元里我逐渐体会到架构设计对程序的重要性。由于多线程的一个极大的问题是因线程冲突而带来死锁且本地可能无法复现。所以在架构设计上就需要考虑如何实现高内聚与低耦合,避免因大量访问共享数据造成线程冲突的问题。
在测试方面,主要是采取自行构造极端数据的方式。
第三单元主要是学习JML的阅读和理解,并在此基础上体会契约式编程的流程。所以本单元其实并无架构的考虑。更多的或许是图论方面的问题,如何使用更好更优的算法以避免强测超时可能是这个单元比较头疼的问题了。
在测试方面,主要还是自行构造极端数据。
在集前几个单元的经验教训,在本单元里着重设计了架构。并按正向建模的思路,很好地完成了三次作业。
测试方面,主要以自行构造数据为主。
写到这里,2024年的OO之旅基本就全部结束啦。OO课应该是进入6系以来第二门感觉收获颇丰的一门课程。经过这么多次作业的洗礼,我实实在在提高了自己的架构设计以及编程能力。在这个过程中,有AC的喜悦,也有强测分不尽如人意以及互测被Hack的难受。但当课程全部结束,回头再看时,发现自己已经提升了很多很多。最后的最后,感谢在OO课程中帮助过我的助教和同学们,感谢老师和助教们对于这门课程的认真讲授以及作业设计。