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

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. django学习-视图练习

    写一个真正有用的视图 每个视图必须要做的只有两件事: 返回一个包含被请求页面内容的HttpResponse对象,或抛出一个异常,比如Http404. 至于你还想干些什么,随便你. 你的视图可以从数据库 ...

  2. oracle查看被锁的表及解除锁

    -- 查看被锁对象 select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session ...

  3. Leetcode142 环形链表

    很多题解没有讲清楚非环部分的长度与相遇点到环起点那部分环之间为何是相等的这个数学关系.这里我就补充下为何他们是相等的.假设非环部分的长度是x,从环起点到相遇点的长度是y.环的长度是c.现在走的慢的那个 ...

  4. 在树莓派上配置MariaDB

    在树莓派上配置MariaDB 前言 MariaDB是由原本开发MySQL的一些原始开发者领导,他们担心Oracle收购MySQL后会有一些隐患.MariaDB与MySQL保持这高度兼容性,并使用了一个 ...

  5. ASP.NET CoreMVC 中的视图

    ASP.NET Core MVC 中的视图 MVC 中的视图 用于显示Controller提供给它的 Model 的业务数据. 视图是带有嵌入 Razor 标记的 HTML 模板. 如果编程语言是 C ...

  6. Newcoder 小白月赛20 H 好点

    Newcoder 小白月赛20 H 好点 自我感觉不错然后就拿出来了. 读读题之后我们会发现这是让我们求一堆数,然后这些数一定是递减的. 就像这样我们选的就是框起来的,然后我们可以看出来这一定是一个单 ...

  7. [LeetCode] 241. Different Ways to Add Parentheses 添加括号的不同方式

    Given a string of numbers and operators, return all possible results from computing all the differen ...

  8. [LeetCode] 234. Palindrome Linked List 回文链表

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  9. Python3.6 SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)

    Django项目上线之后,死活无法正常运行(本地正常) 开始排查了好久才发现是字符编码问题 前面的小坑基本有一些,好(我)解(忘)决(了). 不好解决的是这个报错: SyntaxError: 'asc ...

  10. 第04组 Alpha冲刺(2/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 整理了一下之前敲的代码 实现了一些新的功能 接下来的计划 实现更多的功能 还剩下哪些任务 ...