[BUAA OO Unit 4 HW16] 第四单元总结
前言
本单元主要是学习 UML 建模语言,与往年实现 UML 解析器不同,今年要求我们实现图书馆模拟系统,并且使用类图、状态图和顺序图描述自己的设计,练习基于模型的设计。
正向建模和开发
本单元要求先进行建模设计架构,再根据设计进行实现,从而减少由于实现过程中架构不明导致的重构,设计主要分为三类
- 类图设计,需要使用名词法等抽象出各个类,然后思考类之间的关联、依赖和继承关系等
- 状态图设计,对于某些可能有多个维度状态的对象,比如图书设计出其各个状态以及之间的转移,从而理清图书相关的逻辑
- 顺序图设计,对于每个动作需要设计出顺序图,显示出各个类之间的协作流程
同时上面三种设计需要相互对应,从关联关系和可见性等方面。先设计再实现的流程也让我们能够积累对架构设计的经验,好的架构有事半功倍的效果。
架构设计
通过LibraryManager
对各个学校的Library
进行及其之间的运输进行统筹管理,Library
下有4个管理员进行执行相应的功能,但Library
还是进行调度的核心,为了图看着简洁,管理员之间没有协作,这也是有些功能实现和题目所述流程不同甚至有些别扭的原因,第一次作业还可以使用单例模式进行操作,后两次就没办法了。
写代码的过程中总会发现架构设计的不足,然后需要进行重新思考设计并修改。(有些时候总会忘记同步 UML 图,就像忘记更新注释一样)
架构设计思维的演进
第一单元几乎没有什么设计,主打一个everything is expression
,一些类的设计很鸡肋,核心代码都聚集在一起,也并没有使用什么设计模式,导致最后代码十分臃肿,耦合程度很高,和面向对象也没什么关系。
第二单元使用了生产者-消费者模式、单例模式等,让各个类的职责更加清晰和单一了,在第二次作业由自由竞争重构为调度器调度时的改动也不是很大,也算是高内聚、低耦合。
第三单元自己的架构设计主要是异常抛出部分,使用了工厂模式,让后续的异常迭代相对简单一点。
第四单元通过 UML 图的设计,架构设计的能力得到了一定的提升,如何抽象出类和方法,如何设计它们之间的练习等;同时也了解了提前设计的重要性,一个优秀的架构能让代码的可维护性和扩展性更高。
测试思维的演进
主要是通过随机构造数据加评测机的方式进行测试,但一个很明显的缺点就是——测不全,随机数据可能并没有涉及到错误或者过程错误答案正确也是可能的,同时对于某些要求性能的程序,随机数据强度可能不够,所以并不能保证程序的可靠性,某些时候需要自己构造边界数据或者有强度的数据进行压力测试。
在第三单元的时候,还提到了诸如单元测试和回归测试等,在需要保证程序绝对正确的时候,这些测试可以让正确性得到进一步保证。
收获
- 学习到了面向对象的思想和一些高效的设计模式以及多线程的实现。
- 代码能力和代码风格都得到了不小的提升。
- 在互测的压力下学会了不同的测试方法确保代码正确性。
- 养成了先设计再实现的习惯,遵循 SOLID 原则设计架构让后续的实现过程避免了很多没必要的卡顿和调整。
- 研讨课上和同学的交流沟通也让我积累了一些有用的技巧。