OO Unit4 总结
前言
第四单元是运用UML,在写代码之前对整体的思路框架进行构图,分为类图,状态图和顺序图。优先构建UML图相比于直接编写代码能帮助我们有效降低出错成本,通过观察UML能够让别人也快速理解整体的代码逻辑,提高团队的合作效率,在团队协作构建大项目时能够发挥关键作用。而在这个单元中,UML建模帮助我们减少了很多不必要的debug开销,提前构建逻辑框架,让我们在编写代码时逻辑更加清晰,整体代码的结构更加明了,是一个很实用的工具。
正向建模与开发
在Java开发的前三个单元作业中,已经初步涉及正向建模,主要是在编写代码之前构思一个可扩展的架构。然而,在当前单元中,正向建模的要求更加突出和明确。
1. 架构草图与功能梳理
开始本单元作业时,首先在草稿纸上绘制程序的架构草图,列出要实现的核心功能和潜在的扩展功能。这一步涉及将某些功能或属性封装成类,初步确定类的数量及其基本功能和属性。例如:
- 图书馆类:管理各种书籍、借书处等功能。
- 书籍:无需单独建类,因为官方包的
BookId
已足够完善。
这一步帮助在开发前形成一个初步架构,为后续的UML图绘制提供了基础。
2. UML图绘制
接下来,在StarUML上绘制详细的类图、状态图和顺序图。然而,由于对UML的熟悉度不足,绘图进程较慢且容易出错。同时,初步架构在实现过程中经常需要调整,导致需要频繁修改UML图的属性和方法。在此过程中,以下UML图的绘制尤为重要:
- 类图:展示类的属性、方法及类之间的关系,包括泛化、实现、依赖、关联、聚合和组合。
- 状态图:描述对象状态及其转换。
- 顺序图:显示对象之间的消息传递顺序及时序关系。
3. 对照UML编写代码
在绘制完UML图后,即可对照图开始编码。由于架构、属性和方法已经在UML图中确定,实际编码时大部分是按图填充实现细节。需要注意的是,在编码过程中如果对类的返回值或方法调用做了更改,需同步更新UML图以保持一致性。
架构设计
状态图最终稿
顺序图最终稿
UML类图最终稿
通过对最初稿的不断优化与完善,形成了这版最终稿,每次完成代码之后都要对初稿进行优化改进,不断迭代加深。归功于最开始高拓展性和高兼容性的设计架构,在后续的迭代中,基本框架几乎没有改变,只是新添加了一些方法和属性。
最终代码设计和UML模型设计之间的追随关系体现在,在写代码的过程中,根据类图梳理代码整体结构,然后在编写代码时在一些细节上不断完善类图,以方便下一次作业的框架设计。
OO课程架构设计思维
在第一单元中,通过递归下降解析表达式的实现,掌握了层次化设计的核心思想。通过单元训练,深入理解了递归下降解析表达式的架构,将表达式解析的逻辑分层,简化了复杂表达式的处理。在第二次作业的重构中,成功运用了这一设计思想,显著提升了代码的可读性和维护性。
第二单元中,通过开发模拟多线程的实时电梯系统,全面学习了多线程的设计方法,自己构思优化出了属于自己的影子电梯,以较少的代码复杂度构建出了一个优秀的影子电梯,并且优化出了影子电梯井,只是很遗憾的是,因为测试的不充分导致出现了一些bug。在第五次作业中,掌握了多线程的基本编写技术。在随后的第六、七次作业中,深入学习了电梯调度算法和死锁处理方法,从而提升了在复杂系统中管理和协调多线程的能力。
在第三单元中,通过学习Java Modeling Language(JML),理解了如何使用JML进行接口的规范化描述和约束条件定义。在实践中,运用了Junit等测试工具,结合JML规格进行测试,从而提升了简单社交关系系统的实现质量和可靠性。
在第四单元中,通过学习UML中类图、状态图和顺序图的制作方法,掌握了如何使用UML进行全面的系统设计。在设计图书馆系统时,应用正向建模方法,先行绘制UML图,再对照图实现代码,显著提高了较大代码量程序的设计效率和一致性。
OO课程测试思维的演进
在静态分析过程中,我主要通过逐条比对指导书、逐行分析代码、以及白箱测试来确保代码质量。首先,逐条比对指导书的做法帮助我确保代码完全符合要求,避免功能遗漏或错误实现。其次,逐行分析代码的方式使我能够发现细小的逻辑错误和潜在问题。最后,通过白箱测试分析他人代码,我不仅发现了他人代码中的bug,也从中学习了不同的实现技巧和思路。
在动态测试方面,主要依赖cxc_god写的DPO来进行黑箱测试和压力测试。首先,通过黑箱测试,根据指导书的数据限制,生成覆盖全面的测试数据,确保代码的功能性。其次,通过压力测试,构造边界条件和特殊情况的数据,检验代码在极端条件下的性能和稳定性。此外,开发和使用评测机,不仅加深了对指导书的理解,还提升了测试效率,确保测试覆盖全面并且能够快速发现问题。
课程收获
面向对象,架构设计,逻辑框架,多线程,JML,UML,这只是冰山一角,但也是步入殿堂的开端。