在本单元中,因为UML图具备比较清晰的树形结构,所以我对其中须要进行查询操做的元素进行了包装,在树的父节点中存储全部孩子的引用。考虑到性能问题,我采用了缓存机制,一次查询后尽量缓存已经遍历过的信息,以减小遍历次数。设计模式
本单元我对架构没有作出修改,只是进行了增量开发。所以,下面展现本单元第三次做业的UML类图并进行分析:缓存
在本单元做业中,我采用Main类做为主控类,MyUmlGeneralInteraction类实现相应的接口,并将UML元素分派给三种图类进行构造,同时调用三种图类中的相应方法进行查询和验证。ClassModelDiagiam、CollaborationDiagram和StateChartDiagram三个类分别对应类图、顺序图和状态图,它们管理相应的Elements并处理查询和验证操做。多线程
在四个单元的做业中,个人架构设计从最初的按照数据简单拆分类,并将相应的方法封装到类中,演进到如今的结合数据特色、类之间的关联关系以及一些OO原则和设计模式进行类的构建,并由此设计出类中的属性和方法。架构
经过一学期OO课程的学习,我对面向对象的理解从简单拆分类演进到各类设计模式和设计原则,并看到了OO带来的好处:模块化、层次化、可扩展性和隐藏实现细节等。在做业开发的过程当中,我从最开始的直接编码,逐渐演进成如今的先进行架构设计,肯定每一个类中的属性和方法,以及类之间如何进行交互。这样,在最后只须要对方法进行填充便可。这也体现了一些设计和实现分开的思想。模块化
测试是我在本学期中比较薄弱的环节。在前两个单元中,我主要依靠人工构造一些数据对程序进行测试。虽然人工构造能够覆盖一些极端的边界状况,但仍不及自动化的对拍测试高效全面。这致使我在第一单元第三次做业中出现了Wrong Format判断错误的状况。并且对于多线程程序来讲,人工构造数据并进行验证的效率更为低下。性能
在第三单元中,我主要依靠JUnit进行单元测试,并与他人程序进行对拍。因为JUnit能够查看覆盖率数据,并能够方便地进行回归测试,在开发阶段的测试仍是比较方便的。对拍测试经过大量数据的生成来达到覆盖测试的目的,实际效果也十分不错,帮助我发现了一些bug。在这两种测试手段的帮助下,我无伤通关了本单元的测试。单元测试
在第四单元中,因为须要画图,个人测试手段又回归了人工构造数据。果不其然,在最后一次做业中再次出现了循环继承判断错误的状况。因而可知,必定程度上的自动化测试仍是十分必要的。学习
经过OO课程的学习,我了解了面向对象的基本原则和一些设计模式,掌握了Java中小型程序设计,入门了多线程程序设计以及规格化和模型化设计。测试
在第一单元中,我接触了层次化设计的思想以及抽象、封装、继承和多态等基本OO特性,并在三次做业的训练中,逐步使得本身的程序有了一些OO的特色。编码
在第二单元中,我接触了多线程程序的设计,并学习了线程同步的一些方法和经典的生产者-消费者设计模式。经过三次电梯做业的训练,我初步掌握了多线程程序的同步方法。
在第三单元中,我接触了规格化程序设计,并了解了JML这种建模语言。虽然在现在的互联网软件开发中,如此严格的形式化规格表述并不常见,但形式化的规格方便进行严格的正确性验证,能够应用在高可靠性领域。
在第四单元中,我接触了模型化设计,并了解了UML这种建模语言。经过做业训练和实验训练,我从结构层次和应用两方面认识了UML。
经过12次代码做业的训练,个人Java代码量达到了数千行。在这个过程当中,我也逐步上手了Java中小型程序设计的一些基本方法。
OO课程受线上教学带来的影响较小,仅仅是理论课部分再也不能进行现场交互了。这一点经过课堂讨论和课后问卷获得了必定程度上的弥补。可是我认为一些课堂讨论题难度较大,不适合在课后马上进行讨论,所以必定程度上影响了讨论的效果。