本单元的第一次做业中,涉及到了类图的解析。在着手作这单元做业的时候,须要将每一种 UmlElement 再封装,并在解析时,用 helper 单例来进行查询处理(能够附带记忆化查询)。
这里能够再细致地说明一下,实际上,在本次做业中,我只再封装如下几类:web
UmlClass UmlInterface UmlOperation
对于其余的元素,仅提取必要信息 id 并将其加入到相应再封装类的数据结构中,供后续统计使用。
另外一方面,因为 Class 和 Interface 的行为很接近,因而我将 Interface设置为Class的继承类。因为Class为单继承,所以须要在子类中改变相应逻辑, 将 Interface的 继承类型改变为“多继承”。算法
//接口继承“类”,由于 接口对于op和attr的逻辑与 class 几乎相同 public class ExtInter extends ExtEle { private ArrayList<String> interFathers; ... }
第二次做业中新增了状态图和顺序图的查询,所以,将helper拆分为三个,并将对应的查询指令分配给对应的 helper 。
须要注意的是,对于三个查询规则,他们属于 类图helper 的负责范畴,应交给类图helper处理。编程
循环继承和后继State的逻辑:
判断时,从一个状态(类、接口)出发,查找他们的后继(father),并将全部当次已遍历过的结点序列做为参数传入。若是当前结点已经在序列中,说明已经出现“回环”,此时搜索结束,返回。这保证了不会产生死循环。设计模式
检查重复继承(类) //接口检查时逻辑相似 public boolean rotate(String id, ArrayList<String> idList) { if (getId().equals(id)) { return true; } else if (idList != null && idList.contains(getId())) { return false; } ArrayList<String> tmp = new ArrayList<>(); if (idList != null) { tmp.addAll(idList); } tmp.add(getId()); if (fatherFlag) { return father.rotate(id, tmp); } return false; }
类图:数组
第一单元的表达式,第一次接触Java 和面向对象的模式。将factor/term 封装成类,重载相应的求导函数,最终实现了程序。数据结构
在这个过程当中:多线程
本系列做业中尽量地下降各个线程所在类之间的耦合(事实上这么作也更方便编程,减小了线程间共享对象),对于泛型和接口的使用(虽然接口最后没用上),简化了不一样类型共享队列重复编码。每次增量开发也更加顺手,总的来看,相比第一单元有了很大进步。架构
本系列做业中重视设计模式和可扩展性,所以没有重构的状况发生,都是“增量式开发”。用了单例模式、生产者消费者、两阶段终止模式,进一步增强了接口和集成的训练。函数
第三单元系列做业开始,从“数据”和“处理”两个方向出发,分别按照 “设计数据结构” 和 “查询实现类helper” 互相促进设计。写代码时先实现查询接口,后根据查询的数据需求实现解析输入。
相似于电梯实现,将路径查询算法独立封装,并实现了算法的复用。
注意到时间复杂度的要求,经历了从 静态数组-> 优雅的“hashmap"-> 结点再映射的静态数组 的架构变化,避免了复杂度超时。学习
第四单元则是对第三单元的“经验”的充分使用:将全部的查询分配给对应的helper,将全部的数据封装成合适的数据结构方便helper调用。(很好很清晰)
从这一点看,第四单元的做业其实和第三单元很相似。
针对压力测试,因为第一单元做业中强测的BUG, 从第二单元起,对每一次做业的测试都用Jprofiler监测CPU时间,在后面很好地避免了相应的问题。
做为一头大三的咸鱼,本学期的OO课,更多的是对本身进入大学来学得的计算机知识的“应用”。面对每一个单元不一样的做业,在学习新的面向对象思想的同时,实际上相应地复习了学过的知识。
学习了一些测试的方法,黑盒白盒测试,对于之前学过的web开发(rails),理解了其设计的理念。
学习了一些面向对象模式,将其与C++结合起来。
对多线程有了更深的理解,回顾了OS课程。
将一些算法运用到“实际”中,学着去写算法的变式。
将一些思考到的东西应用到本身作OS助教的实际中
实现最后一次做业时,感受指导书说明不是很详细,对于细则说明缺失不少,给人一种强烈的"出题人摸了"的感受。相应的,对于测试样例的设计方向,应当在理论课上提供得更明确一些。
理论课的课上重点有时不是很明确,听完一节课有时不知道重点所在,与做业联系不是很紧(前两单元)
上机难度变化略大,前几回上机难度过大。
都结束了!
压力马斯内! 2019.6.19 16231213 By:DorMouse