2022 OO 第四单元个人总结
一、本单元架构设计
-
下图为整体架构,按照给定接口将
Implementation
类分为ClassModelApi
、CollaborationApi
与StateMachineApi
三个类分别解决问题,另外设BasicType
、CheckName
、IdToName
与NameToId
为工具类供Api下实现的所有类使用。
-
以下为
ClassModelApi
的架构:
-
以下为
CollaborationApi
的架构:
-
以下为
StateMachineApi
的架构:
其中我们关注到CPU时间为10s,并且对于所有算法尽在初始化时运行一次即可,所以我们可以dfs暴力解决不考虑时间复杂度。
二、架构设计思维及OO方法理解的演进
课程最大收获就是面向对象的思维看待问题。
从第一单元每个类的每个属性都设置为private
后创建get
方法,在类外面实现功能;到第四单元基本不使用get
对每个功能实现方法;从第一单元类混乱在一个文件夹,到第四单元各个类井然有序;从最初不知道什么是设计模式,到现在理解设计模式为更好的实现架构的一种模型。
在一学期的学习中,我真正的学习到了面向对象的思维。
面向对象是一种看待世界的思维方式,没有了上帝视角,组成系统的每个基本元素管好自己的事情,整个系统将井然有序,能够实现非常复杂的功能。
在第一单元的表达式运算中,我学会的大量的java语法与递归下降的思想,但架构有些混乱,鲁棒性极差多次重构;在第二单元的电梯调度中,我学会了初级的多线程编程,熟练使用继承避免重复造轮子,架构清晰,可以完成迭代;在第三单元的JML学习中,我感受到了JML语言的清晰,但其复杂的表达是制约应用的一大问题;在第四单元的UML的学习中,我对于架构的理解更加深刻。
三、测试理解与实践的演进
-
第一单元:通过正则表达式生成测试样例,并测试边界数据;
-
第二单元:由于解决多线程问题花费了大量心力,主要进行了随意测试点的对拍;
-
第三单元:主要对CPU时间进行测试;
-
第四单元:由于具有有限的功能,所以对所有功能进行测试;
四、课程收获
课内最大的收获在于OO思想的学习,并提高了我的架构能力、模型设计能力;另外在课程中对于java也有了基础的应用,对于其多线程编程、数据结构等有了一定的了解;同时也提高了我测试与debug的能力,做出一次作业对于自己也有很大的满足感。
另外课上测试是我上过最快乐的机。
五、改进建议
-
希望上机能安排在一周变成的前半段,因为上机会为我们提供很大的思路,在前两单元尤为明显。如果多线程没有理解上机的思路,在线下自己coding时会走很多弯路。
-
虽然java语法不是重点,但希望能设置一些java语法、数据结构的tips或者链接。
-