BUAA_OO_Unit4 UML
一、正向建模与开发
正向建模与开发是指在软件开发过程中,根据需求和设计文档,按照一定的规范和方法进行系统的设计、编码和测试的过程。正向建模与开发的主要步骤包括需求分析、系统设计、编码、测试和发布等阶段。正向建模与开发的优点是能够按照需求和设计文档进行系统的开发,确保软件的功能和性能达到预期。然而,正向建模与开发也存在一些挑战,例如需求变更、设计不完善等问题,需要开发者及时调整和优化。
在之前的代码经历中,其实大部分同学都是手绘简易的部分架构然后边开发边设计或者直接进行开发。但本单元的课程实际上是希望我们能通过先绘制UML图,再实现提前设计好的功能,这其实也就是正向建模与开发的体现。在本单元中,我们接收到的功能需求是复杂甚至繁琐的,同时会受到诸多状态转移情况的影响,在这样的情况下进行正向建模与开发是有一定困难的。因为我们在绘制UML图的过程中实际上是要将各种细节都考虑好,从而清晰完整的设计出自己的架构并以UML图的形式体现。同时在这三次作业中我也十分直接的感受到了正向建模与开发存在的挑战(或许也是面向对象编程存在的挑战),我们设计的代码架构实际上是建立在我们对功能需求和设计对象的认识上的,一旦最基本的功能需求和设计对象出现了变更,极有可能使我们之前的架构产生系统性问题,比如有的同学在本单元设计了非常复杂的架构以应对后续的迭代,但最后的迭代方向却并未体现出这种迭代可能性最丰富的架构的优势,也有同学未对后续迭代进行想象、直接根据当前需求进行架构设计,其实也可以将迭代进行的十分简单。所以其实这也体现出了在进行软件开发时正向建模的必要性,在正向建模这个环节打好基础,后续的开发自然会水到渠成。
二、架构设计与UML
本单元最终实现了一个包含若干个图书馆的图书管理系统,其次针对读者、指令、书等各自设计了类,此外我也将所有输出封装成了Output类。总体来说这样的架构遵守了“高内聚低耦合”的原则,并由良好的迭代更新空间,在后续的两次迭代中均未对已有的代码部分进行重构。
关于代码设计和UML模型设计之间的追踪关系,我认为最直接的就是我们先根据设计好的UML图进行功能的代码实现,在代码实现的过程中我们可能发现这个功能需要更多数据等问题,会与UML图产生差异,所以在设计完代码后,我们需要再次修改UML图,令UML图与代码设计始终保持一致。
三、四个单元中架构设计思维的演进
在这四个单元的设计中,我经历了从毫无头绪、只能根据往年博客找灵感,到后来的有自己的想法并和朋友讨论完善自己的想法,在之后可以自己设计出比较简洁成熟的架构,可以说是在架构设计思维的方面学习到了很多。
在第一单元时,考察了解析表达式的问题,这部分算是初入面向对象编程与设计的门,在最初和同学们的交流中我意识到不能通过自己的一些小设计小算法去替代有更多元可能性的架构,所以在第一次作业中我便在我的架构设计中采用了递归下降法,因而在后续的迭代更新中没有经历重构,但这也确实对我这门课程的学习在开头就敲响了警钟,只有好的架构设计才能支持未知的迭代更新。
在第二单元,我们实现了多线程的电梯系统,在这部分由于初次接触到多线程,所以代码架构的设计一旦过于繁琐,就会导致后续的debug阶段无从下手,在这一单元我更加注重了架构设计对程序正确性与测试的便利程度的影响。
在第三单元,我们学习了规格化设计并以JML为例进行了代码实现,本单元其实并未由我们进行架构设计,但却对我们的代码性能提出了较高的要求,本单元相较其他单元让我更加注重的是在代码设计中自己所采用的算法的复杂度是否已达到最佳。
在第四单元,我们通过对UML的学习,先设计UML再实现代码,在这一部分确实对我产生了很大的影响,因为面对如此复杂繁琐的设计需求时,按照之前的代码习惯我很难在实现功能的同时注重细节、也很难保证完成代码的速度和效率,但通过先设计UML的方式,我在本单元顺利完成了每次的设计需求,我想这将让我未来更倾向于先设计架构再实现代码。
四、四个单元中测试思维的演进
第一单元:我根据指导书设计了一些边界数据。
第二单元:我设计了考察性能是否满足时间限制的数据,并使用了同学分享的评测机。
第三单元:使用了同学分享的评测机。
第四单元:使用了同学分享的评测机。
在四个单元的过程中我其实从最初满足于程序通过中测到后来即使中测通过也会继续充满怀疑地反复考验自己的程序,可能是因为中测的测试点随着作业的进行而逐渐变弱,所以大家的测试意识也明显增强。本课程已结束,让我感触最深的就是自动化测评的便利与高效。
五、课程收获
文行至此,OO课程已是迎来尾声,在这一学期的学习中,我的代码能力有了前所未有的提升,同时也可以说自己学到了一些面向对象编程与设计的思维,此外,并发、规格、建模等技术和思想也一定会在未来在软件设计方面对我产生极大的帮助。所以我想在这里感谢与我交流过的老师、给予我鼓励和帮助的助教、和我讨论思路并帮助我共同寻找问题的朋友,你们是我在这门课程的学习中能一直走下来的动力。
收获满满,挑战满满。除了对于知识学习方面的收获,本课程的学习对于我个人的其他方面也令我收获颇多,正如吴老师在课程最后的颁奖典礼上说的那样,“本学期这门课程治好了很多同学的拖延症”,这门课紧凑、固定的以每周为周期的课程环节设计push着我改掉了拖延的习惯。此外,这门课程也很好的锻炼了我的意志力,尤其是第二单元多线程debug是的一头雾水、第四单元面对繁琐的设计需求的无从下手,会给我深深的无力感,但最后我都成功完成了自己的程序,整个过程充分锻炼了我的意志力,这对于我之后的学习有着很大的帮助。
课程结束之际,感慨万分,有遗憾,但更多的是收获。比较遗憾在几次作业中因为细节处理导致强测和性能分差强人意,但也比较幸运,在互测环节我拿到了“狼人奖”。回想起这学期许多个写代码、debug熬过的夜,最后以一段歌词结束这篇博客。
I’ll rise up like a giant
So don’t you doubt me
When I’m fighting my lonely nights
Standing tall like a giant