302
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
正向建模是指从需求或功能规格开始,逐步推进设计、开发、测试等阶段的软件开发过程。在正向建模中,设计师在开发过程的早期就产生一个初步的系统模型,然后逐步完善和细化这个模型,直到达到最终的系统设计和实现。正向建模在软件开发中被广泛的采用,可以有更清晰的需求、高质量的代码和更好的可维护性。
本单元中,我们通过作业指导书中所展现的“图书馆“需求,利用 UML 构建一个模拟的图书馆模型,并在 Java 中对应实现。
Library:作为系统的核心,接受请求并协调各个子系统的工作。
AppointmentOffice 和 BorrowReturnOffice:分别处理预约和借还业务。
BookShelf:管理书架上的图书。
User 和 Order:代表用户和他们的预约订单。
做第一单元作业时刚刚接触这门课,对面向对象思维甚至是java的语法都不熟悉,所以最开始能用面向过程就用面向过程。通过一个单元的学习我才慢慢从面向过程的思维方式中走出来,开始理解什么是面向对象编程以及面型对象的好处。、
第二单元的学习最为痛苦,我前期花了大量的时间了解多线程的相关概念,通过不停地问同学舍友才慢慢构建起自己的逻辑。虽然有了一点自己的理解,但写代码还是完全不够的,这个时候第五周的上机课救了我,第二单元的作业的架构基本上就是从第五周的实验代码上扒下来的。这一单元我学会了多线程之间的协调调度,也学会了一个从那之后一直沿用的基本架构:一个调度器类,多个被调度的执行类。
第三单元对我来说最简单,花的时间也最少,主要原因在于要求都在JML规格中写好,不需要我们去题目中抠字眼,也不用思考架构、边写边改架构。但还是有困难的,比如规格的阅读理解,OKTest方法的编写等等。这一单元我学到了很多算法,比如维护并查集等,也学会了如何根据“甲方”JML规格的要求编写代码。
最后一单元重点在于UML图的绘制,我们需要根据题目自己画图自己建构模型。这一单元我才真正做到了先设计再上手写代码,并用UML图的形式将架构设计比较清晰地呈现出来。
四个单元中,我也很多次和同学对拍,或用一些评测机生成的测试点测试,但大部分的bug是我用一些自己造的针对性的特殊测试点找出来的。
第一单元我自己造了很多特殊边界数据用于测试,比如几个负号相连,多个括号嵌套等等。
第二单元我开始借用测评生成的测试点来测试。但发现输出有问题之后还是需要自己来造针对性的测试点才能发现具体的bug,具体哪一步有问题。
第三单元的测试主要面向OKTest方法的测试,我还是用测评机和手动相结合生成数据,一个点一个点进行排查,找出所有bug。
最后一个单元我测试的比较少,主要是沿用了上几个单元的方式。这一单元由于测试的不够,出现的bug比较多。
通过这一学期OO课程的学习,我学到了很多,包括面向对象思维、多线程的协调合作、根据JML规格写代码、画UML图等等知识。
尽管过程中遇到了很多困难和挑战,但每一次克服它们都让我的设计能力更进一步。我感到非常庆幸能够在这样的课程中学习和成长,我相信这些经验将对我的未来职业生涯产生深远的影响。