一、本单元两次作业的架构设计

1、第一次作业

整体思路:以class为核心,建立MyInterface、MyAttribute、MyOperation、MyAssociation四个类分别储存每个类的接口、属性、方法、关联的信息,并提供相应的获得基础信息的方法。

架构设计:在MyUmlInteraction中,建立多个hashmap储存每个class的name与id的对应关系、class的可见性、继承关系等,并分别建立每个class与上述四个类对应的hashmap。在需要获取某个class的信息时,通过id为key获得class对应的上述某个类,调用类中的方法以获得相关信息。

具体实现:求关于class个数、class的操作相关信息容易实现,因为不用考虑继承关系;找顶级父类、class的属性的相关信息、class的关联的相关信息时,需要通过储存继承信息的hashmap逐层调用class对应的某个类的方法,最后统一处理;获得class实现接口的列表时,由于接口可以多继承,我写了一个递归方法获取某个class实现的所有接口,然后还是根据继承关系的hashmap逐层调用,以获取class实现的所有接口,最后去除重复id的接口。

2、第二次作业

整体思路:沿用第一次作业的思路,多建立MyStateMachine和MyInteraction分别储存状态图和顺序图的相关信息及提供获取信息的方法。

架构设计:在第一次作业的基础上,将除了获取状态图及顺序图信息的方法的其他方法移到单独一个MyUmlSearch中(主要是行数超了),在MyUmlGeneralInteraction类中建立状态机id与状态机类、顺序图id与顺序图类对应关系的hashmap。检查各项有效性的方法在MyUmlSearch中实现。

具体实现:获取参与对象数量即lifeline的数量,信息数量即message的数量,incomingMessage的数量即target为lifelinename的message的数量;状态机的数量和transtion的数量都容易实现,获取状态的后继状态个数我是用递归实现的;检查有效性,002容易实现,008还是使用递归实现,同时还能得到所有class的顶级父类,将信息储存起来,009使用了第一次作业获取class实现的所有接口的方法,如果获得的列表中有id重复的情况,则就出现了重复继承的情况。

二、自己在四个单元中架构设计及OO方法理解的演进

第一单元

第一单元第一次作业是真的面向过程,只有两个类,那时候对于类的建立与使用还是很陌生。第二三次作业就好起来了,对于每种因子、多项式的求导都建立了单独一个类。

第三次作业当周的课好像讲了父类子类以及继承的一些知识,但是写第三次作业时还没有完全理解,最后摆了一个只有两个空方法的父类在那里,相当于没有使用继承来写代码。在以后的单元里才慢慢熟悉继承的使用。

第二单元

第二单元虽然是第一次接触多线程,但整体还是比较顺利的,因为第一次作业时,在课程ppt里给出了一个很相似的生产消费模式的写法,第一次作业直接沿用了ppt里的方法,而且在对这一模式的深入理解后,第二三次作业也就好写很多。

这一单元还有一点让我印象深刻,我在第一次作业时,并没有发现官方jar包提供的类以及方法,导致我还在手动拆分输入请求。直到第二次作业在跟室友交流时才发现了可以直接调用官方jar包中的方法,而且官方jar包的使用在以后的每一次作业中都用到了。

第三单元

第三单元感觉主要是算法单元了。给出的JML规格不是难点,难点在于算法的实现。后两次作业我都是用floyd算法实现的,印象最深刻的是最后一次作业在讨论区学到了大佬的巧妙处理方法。同时这一单元还让我进一步熟练了hashmap的使用。

第四单元

第四单元的架构在上面也分析过了,这一单元在理论课以及讨论区的学习中,学到了UML中各种元素的组成及每部分的意义。UML对于以后的代码设计及理解还是用处很大的。这一单元我还写了很多递归方法,遥想一年前,那时我对递归的的理解还是处于很低的层次,想要独立写出递归的函数更是难上加难,而现在这对我来说已经容易很多了。

三、自己在四个单元中测试理解与实践的演进

在大一学C语言时,那时自己写的代码很少充分测试,基本都是测试完样例就交,然后面向评测机编程。而这学期的OO,中弱测的一些较难过的点都不公开数据,而强测更是只有一次机会,这时本地测试就尤为重要了。而且几次强测结果出现的我没有预想到的BUG也让我更加重视对代码的自我测试。

这学期的互测,除了第一单元代码量较小,可以阅读代码寻找BUG外,其他单元的作业我基本都是构造易错数据来对屋内其他人的代码进行测试。另外在研讨课上,我也学到了不用python写对拍器,也可以用JAVA写出自动生成数据以及自动测试的方法。

四、自己的课程收获

最基本的收获就是JAVA语言和面向对象的思想了。课程虽然不主要讲解JAVA语言,但是通过自学已经掌握了基本的JAVA语法。对于面向对象的思想,从寒假pre和第一次作业时的懵懂,到现在也逐渐熟练。

还有就是对于本地测试的重视程度的提升。对于自己写的代码,都要进行充分的测试以提高正确性。

五、立足于自己的体会给课程提三个具体改进建议

1、实验课还是希望不要安排在每周理论课当天的下午,虽然实验课不是考试,但是对于刚学的知识没有先实践过,上机的时候还是有些吃力。

2、我们这学期有JML单元和UML单元,我觉得也可以给JUNIT或者其他代码测试的工具也开一个单元。

3、稍微提升一下中测点的难度。

OO第四单元作业小结的更多相关文章

  1. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  2. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  3. OO第四单元作业总结以及课程总结

    第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...

  4. 北航OO第四单元作业总结(4.1~4.3)及课程总结

    前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...

  5. OO第四单元作业总结及课程总结

    一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...

  6. oo第四单元作业总结

    一.本单元两次作业的架构: 本单元两次作业的架构基本是一致的,所以两次作业的架构就一起说了. 为了避免查询时出现同一个结果反复计算的情况(连续两次查询一个类的顶级父类,如果我们在查询的指令中来计算其父 ...

  7. UML结构与解析——BUAA OO第四单元作业总结

    UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...

  8. OO第三单元作业小结

    一.JML理论基础及应用工具链情况 理论基础 1.JML表达式 \result:表示方法执行后的返回值. \old(expr):表示一个表达式expr在相应方法执行前的取值. \foall:全称量词修 ...

  9. BUAA OO 2019 第四单元作业总结

    目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...

随机推荐

  1. TensorFlow GPU版本的安装与调试

    笔者采用python3.6.7+TensorFlow1.12.0+CUDA10.0+CUDNN7.3.1构建环境 PC端配置为GTX 1050+Intel i7 7700HQ 4核心8线程@2.8GH ...

  2. JAVAWEB复习-JS

    1.概述 JavaScript是基于对象和事件的脚本语言,主要应用在客户端 特点:信息动态交互,不可直接访问本地磁盘,只要是可以解析js的浏览器都可以跨平台执行 2.JS和JAVA比较 a:JS是面向 ...

  3. 初识v4l2(四)-------v4l2_open、v4l2_read、v4l2_write浅析

    原文:https://blog.csdn.net/leesagacious/article/details/49995729 1.app:     open("/dev/video0&quo ...

  4. 201871010131-张兴盼《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  5. http中get,post,put,delete方法的用法以及区别

    http协议是一种在网络中进行文件传送遵循的协议.一种无状态的协议.http协议服务器端不跟浏览器端建立长久的通信连接. 建立http通信之后,服务端将文件内容传送给浏览器端接收就完成一次请求.当然一 ...

  6. SpringBoot使用@Value来获取properties的值

    今天在项目中想使用@Value来获取Springboot中properties中属性值.场景:定义了一个工具类,想要获取一些配置参数,使用了@value来获取,但是死活也获取不到.如何解决:在使用这个 ...

  7. 【Spring IoC】IoC容器初始化(二)

    Ioc容器的初始化是由refresh()方法来启动的,这个方法标志着Ioc容器的正式启动. 具体来说这个启动过程包括三个基本过程: BeanDefinition的Resource定位 BeanDefi ...

  8. LeetCode3-Longest_Substring_Without_Repeating_Characters

    参考思路 https://github.com/azl397985856/leetcode/blob/master/problems/3.longestSubstringWithoutRepeatin ...

  9. python3对urllib和urllib2进行了重构

    python3对urllib和urllib2进行了重构,拆分成了urllib.request,urllib.response, urllib.parse, urllib.error等几个子模块,这样的 ...

  10. 如何禁用Antimalware Service Executable

    有时发现风扇呼呼地转,查看任务管理器,发现其中antimalware service executable占用了大量的CPU和内存. 这是由于Windows Defender软件导致的,可以用如下方法 ...