面向对象第四单元总结
简介
UML ( U n i f i e d M o d e l i n g L a n g u a g e ) ( Unified Modeling Language) (UnifiedModelingLanguage) 是一种为面向对象的产品进行说明、可视化和编制文档的一种标准化语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体的程序设计语言。经过第四单元的训练,我充分的体会到了UML在帮助设计,整理架构方面的作用。
正向建模与开发
所谓正向建模与开发,我理解为首先读取题意,设计相关的UML类图、状态图等来帮助自己捋顺思路,然后再进行相关程序的编写。这种思想我认为对于小规模的程序而言不是非常必要,但是对于大规模的程序来说,因为自己难以从全局的视角来开发代码,所以必须有这样的一个工具来帮助自己逐个模块的开发以及理解模块之间的关系。
单元的任务是模拟一个图书馆管理系统,而且结束的流程给的很完善,有哪些部门也是非常的清楚的,可以根据题目描述中的名词建立相应的类,以动词建立相关的方法和类之间的关联,完成类图的设计。同时也可以抓住某些对象的状态的变化,建立状态图,如书本的状态可以分为在架、借出、扣留、损毁、在运等状态,状态之间的转化条件由相关的动作可以确定。
架构设计
本单元中,我以Library
类为一个处理系统,负责完成本单元相关的借书事物,同时针对每一个图书馆的角色设计了相关的类,并将其完成的业务作为其方法处理。此次图书馆的各个角色之间是有很多的交互的,我通过将其他对象的引用作为另一个对象的属性来完成这个操作。设计的UML类图如下:
从左向右,逻辑层次递减。可以看到图书馆内部各个人物之间的耦合程度还是很高的!
代码实现和UML模型设计之间的追踪关系
实际上,UML模型和具体代码实现上来说应该是相辅相成的关系,很难一次画好UML图然后根据此图一步到底完成最终代码,并保证UML图和代码的一致性。
我在设计的时候是先设计了一个简略的UML图,然后在开发过程中发现了相关的问题后再进行完善,两者不断磨合,最终实现一致性。
架构设计思维的演进
-
第一单元我的架构的特点就是层次性,从表达式、项到因子,各个类的层次性明显下降;还有就是设计了大量的继承关系来进行统一的处理,这是其他单元所没有的。
-
第二单元的设计架构最突出的就是过程性,一直是围绕电梯的开门、放人、进人、关门、移动的逻辑来展开开发的。
-
第三单元主要就是JML和程序的严格一致性,架构不需要自己设计,自己只需要将具体的实现完成即可!
-
第四单元的话,就是之前说的,抽象层次不断提高。
测试思维的演进
-
第一单元就是大量构造数据,查看正确性
-
第二单元由于多线程的不可复现性,有时需要对一个测试点进行多次测试。
-
第三单元依然是构造数据对拍运行结果。
-
第四单元就是构造借书还书场景,考虑极端情况,场景性比较强。
课程收获
毫无疑问,一学期OO课下来自己的收获还是满满的,虽然它占用了我平时生活中大量的学习时间,虽然学分没有OS多,但是我花在OO上的时间是OS的几乎两倍。它中间带给了我很多痛苦的经历,好多次debug到凌晨一点,好多次互测被刀感到惴惴不安,但同时好多次自己强测安全着陆感到非常高兴,最后也如愿当上了OO的助教。
能力方面,毫无疑问自己开始在写程序时习惯用面向对象的思维方式了,然后代码的码量也是有很大提升的。大一写C语言,300行就觉得很多了,OO第一单元自己的程序直接突破1500行,这么多行的代码,给了我调试能力以及架构设计能力上的突飞猛进。多次被hack的经历也告诉我,测试是开发的不可或缺的一环,切不可大意!
感谢课程组,感谢助教,感谢OO!