OO第四单元作业总结

第四次博客作业

本单元架构设计

第一次作业

在自己尝试画了第一次作业的类图后,发现自己作业的架构依旧混乱不堪。第一次作业中,我总共建了四个类,除去MyUmlInteraction类外,ClassRelevance类是储存与类有关的相关信息,如类的属性,方法,直接父类,顶级父类等;ClassifyFactory类用于处理输入,将输入进行分类,储存到对应的区域;ComputeFactory虽然取了一个工厂模式的名字,但实际只是一个简单的在输入完成后,对输入进行对应计算和处理,如通过直接父类得到顶级父类等。从上次作业的工厂模式中感觉到了架构的优美,但是自己在实现时一堆毫无关联的计算又不知如何处理,只能将其堆叠在一个类中。

第二次作业

第二次作业其实和第一次并无太大区别,只是增加了StatusDiagramSequenceDiagram两个类,这两个类与ClassRelevance类的作用相同,分别用来储存状态图的相关信息与顺序图的相关信息。因此这两个类和ClassRelevance与其他类的组合依赖关系相同,不过在尝试加上去以后图过于混乱于是省略。 
状态图,顺序图以及三个UML检查都放在了ClassifyFactory类中,类略显臃肿。

 

架构设计及OO方法理解的演进

第一单元

第一单元是我第一次接触面向对象与OO这一门课--多项式求导。整个作业由输入类和集求导,储存,输出为一体的类构成。当然这种情况在第三次作业中有所改进,在第三次作业中,将输入的多项式拆分为了简单因子多项式因子两种,通过递归下降求解。
而对于OO方法的理解只是简单的,需要实现什么,就在一个类下面新构建一个方法,仅此而已,甚至对构造方法都没有什么概念。

第二单元

第二单元主要学习多线程和各类之间的交互,因此第二次作业主要重心放在了如何处理调度,互斥资源的处理上,架构方面对于架构的理解只是从一股脑一个类的堆叠变为了每个类有自己的任务。 
因此在第二单元的作业中,输入线程为单独的一类,电梯为单独的一类,调度器为一类,调度器是输入线程与电梯之间的桥梁,负责将输入进行分配调度给各个电梯。
但也仅限于此,接口实现,继承等概念依旧显得很陌生,不知道如何运用这些面向对象的独特知识来优化自己的代码。
因为电梯、调度器等实体的出现,以及二者的交互,逐渐对构造方法,get,set等方法有了更深的理解,同样,方法的重写也在优化架构,减少代码重复方面起到了很大的作用。

第三单元

第三单元表面是JML的练习,我觉得更多的反而是架构和数据结构的练习。
第三单元作业中,(特别是第三次),作业正式进化为地铁系统,需要提供最短路径计算,最低票价,不满意度等计算。我也第一次在例程中感受到了架构的优美,相比于自己写的代码实在是感叹例程极高的可读性和优美的架构设计,也是第一次接触到工厂模式,第一次理解和体会到接口,继承等的作用,之前一直认为这些东西可有可无,也从未去尝试这些,失败...希望自己在以后接触面向对象中能多多优化思考自己的架构,让自己的代码也具备可读性,易扩展性等。
第三单元由于次次作业间进行了继承,对方法的理解突然有了继承这一概念的加入而深入。子类重写父类的方法,子类中调用子类的方法或属于父类的方法等等,super()的应用等。

 

与实践的演进

在四次作业中,我的强测十分悲惨的炸过三次,可以说是十分高的比例。在这三次强测的错误中,十分低级的错误占了两次,分别是equals的使用和多项式中‘+-’的化简问题;以及第一次JML作业中由于优化不当的超时问题。
可以说我在测试方面的长进并不是很大,但是对于测试的态度有所变化。
第一单元作业中,我只是简单的通过手动输入一些能想到的输入进行测试,于是就导致了碰到负号整个符号化简结果就为负号的极端愚蠢的错误,如果或许只是能多尝试几组测试或许这个问题就能被发现。
第二单元作业中,由于多线程测试较为困难,于是我就成为了一个甩手掌柜,代码完成并通过弱中测后就不管不问,于是又顺理成章的又炸了一次,或者说万幸只炸了一次。
到了第三单元作业,我开始自动生成一些测试数据进行大规模的测试,但是又忽略了运行时间的问题。边界测试和压力测试的重要性又给了我当头一棒,在后两次的作业中也进行了一些极端情况的压力测试和边界测试,于是顺利度过后两次作业。
OO这门课程还教会了我Junit进行单元测试,但是对这个测试理解的并不是很深,觉得犹如鸡肋食之无味弃之可惜。还有并没有搞懂如何进行自动化测试,也就是各位大佬手写的测评机,差距如鸿沟一般。

 

课程收获

通过一学期的OO课程,我觉得我的收获主要分为以下几个方面

  • 对面向对象这一概念的初步理解和对面向对象这一概念的精髓内容的初步理解和尝试。如对象,继承,接口,架构等方面的理解,优化和尝试。使用面向对象思想来实现某一需求,在这之前只有面向过程的思维从未尝试过面向对象进行实际问题的解决。
  • 代码之外的东西,如checkstyleJMLUML,通过这些来规范自己的代码风格,保证代码的准确性以及优化自己的代码架构等。
  • 编程能力应该也是自己的一个收获,能够较为快速的实现每次作业的需求,实现OO这个课程的目标。

但收获总是与遗憾并存的,对架构的实现只是止步于基础,没有实现过如同例程所给的优美架构;没有尝试过自动化测试,对于测试只是停留在自动生成测试样例,手动进行测试和对拍;许多Java编程语法也没有尝试过,如泛型等。这些遗憾希望自己能在今后的锻炼中去完善,改进。

 

课程改进建议

  • 希望OO课的上课讲的内容能稍微的贴近大众一些。OO课的内容毫无疑问都是OO领域的精华,但是自己在听课的过程中总是感觉到云里雾里,无法从一个小白的角度去理解这些较为高深的知识。导致后期的OO课无法从中获取很多有用的信息,只是觉得难以消化。
  • 建议能强制对架构进行要求或者对架构能多一些讲解和指导。总是觉得自己的架构很烂,但是又无从下手去优化;总是想尝试去优化自己的结构又总是为了实现需求而放弃部分可能的架构优化。希望课程能对架构方面有更直接的要求和更深入的讲解指导。
  • 建议JML单元能进行优化。总是觉得这一单元与JML的关系实在不大,可能架构和数据结构的优化的比重更大一些,或者说大家的重心也只是放在了这个方面,这单元最终的学习并不是很深入。

最后,感谢一学期以来各位老师和助教的付出,为我们面向对象的学习提供了一个体系化,渐进的过程。衷心的感谢各位老师和助教对着门课的付出!

posted on 2019-06-23 17:38  tsfis  阅读(129)  评论(0编辑  收藏  举报

导航