北航OO(2020)第四单元博客做业暨课程总结博客

北航OO(2020)第四单元博客做业暨课程总结博客

本单元做业的架构设计

在本单元中,因为UML图具备比较清晰的树形结构,所以我对其中须要进行查询操做的元素进行了包装,在树的父节点中存储全部孩子的引用。考虑到性能问题,我采用了缓存机制,一次查询后尽量缓存已经遍历过的信息,以减小遍历次数。设计模式

本单元我对架构没有作出修改,只是进行了增量开发。所以,下面展现本单元第三次做业的UML类图并进行分析:缓存

在本单元做业中,我采用Main类做为主控类,MyUmlGeneralInteraction类实现相应的接口,并将UML元素分派给三种图类进行构造,同时调用三种图类中的相应方法进行查询和验证。ClassModelDiagiam、CollaborationDiagram和StateChartDiagram三个类分别对应类图、顺序图和状态图,它们管理相应的Elements并处理查询和验证操做。多线程

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

在四个单元的做业中,个人架构设计从最初的按照数据简单拆分类,并将相应的方法封装到类中,演进到如今的结合数据特色、类之间的关联关系以及一些OO原则和设计模式进行类的构建,并由此设计出类中的属性和方法。架构

经过一学期OO课程的学习,我对面向对象的理解从简单拆分类演进到各类设计模式和设计原则,并看到了OO带来的好处:模块化、层次化、可扩展性和隐藏实现细节等。在做业开发的过程当中,我从最开始的直接编码,逐渐演进成如今的先进行架构设计,肯定每一个类中的属性和方法,以及类之间如何进行交互。这样,在最后只须要对方法进行填充便可。这也体现了一些设计和实现分开的思想。模块化

四个单元中测试理解与实践的演进

测试是我在本学期中比较薄弱的环节。在前两个单元中,我主要依靠人工构造一些数据对程序进行测试。虽然人工构造能够覆盖一些极端的边界状况,但仍不及自动化的对拍测试高效全面。这致使我在第一单元第三次做业中出现了Wrong Format判断错误的状况。并且对于多线程程序来讲,人工构造数据并进行验证的效率更为低下。性能

在第三单元中,我主要依靠JUnit进行单元测试,并与他人程序进行对拍。因为JUnit能够查看覆盖率数据,并能够方便地进行回归测试,在开发阶段的测试仍是比较方便的。对拍测试经过大量数据的生成来达到覆盖测试的目的,实际效果也十分不错,帮助我发现了一些bug。在这两种测试手段的帮助下,我无伤通关了本单元的测试。单元测试

在第四单元中,因为须要画图,个人测试手段又回归了人工构造数据。果不其然,在最后一次做业中再次出现了循环继承判断错误的状况。因而可知,必定程度上的自动化测试仍是十分必要的。学习

课程收获

经过OO课程的学习,我了解了面向对象的基本原则和一些设计模式,掌握了Java中小型程序设计,入门了多线程程序设计以及规格化和模型化设计。测试

在第一单元中,我接触了层次化设计的思想以及抽象、封装、继承和多态等基本OO特性,并在三次做业的训练中,逐步使得本身的程序有了一些OO的特色。编码

在第二单元中,我接触了多线程程序的设计,并学习了线程同步的一些方法和经典的生产者-消费者设计模式。经过三次电梯做业的训练,我初步掌握了多线程程序的同步方法。

在第三单元中,我接触了规格化程序设计,并了解了JML这种建模语言。虽然在现在的互联网软件开发中,如此严格的形式化规格表述并不常见,但形式化的规格方便进行严格的正确性验证,能够应用在高可靠性领域。

在第四单元中,我接触了模型化设计,并了解了UML这种建模语言。经过做业训练和实验训练,我从结构层次和应用两方面认识了UML。

经过12次代码做业的训练,个人Java代码量达到了数千行。在这个过程当中,我也逐步上手了Java中小型程序设计的一些基本方法。

关于课程的一些建议

  1. 建议控制课程时长,尽可能不要在临近考期时布置大量任务;
  2. 建议互换第二单元与第三单元的顺序,在平衡难度的同时能够与OS课程进行更好的衔接(这样能够在OS介绍完进程同步后再开始接触多线程程序设计,下降同窗们的上手难度);
  3. 建议UML部分将讨论区的文件结构介绍整合成参考手册下发给你们,能够下降你们第一次做业的上手难度。

OO线上学习体会

OO课程受线上教学带来的影响较小,仅仅是理论课部分再也不能进行现场交互了。这一点经过课堂讨论和课后问卷获得了必定程度上的弥补。可是我认为一些课堂讨论题难度较大,不适合在课后马上进行讨论,所以必定程度上影响了讨论的效果。

相关文章
相关标签/搜索