OO第四单元作业小结
一、本单元两次作业的架构设计
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第四单元作业小结的更多相关文章
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- OO第四单元作业总结以及课程总结
第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...
- 北航OO第四单元作业总结(4.1~4.3)及课程总结
前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...
- OO第四单元作业总结及课程总结
一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...
- oo第四单元作业总结
一.本单元两次作业的架构: 本单元两次作业的架构基本是一致的,所以两次作业的架构就一起说了. 为了避免查询时出现同一个结果反复计算的情况(连续两次查询一个类的顶级父类,如果我们在查询的指令中来计算其父 ...
- UML结构与解析——BUAA OO第四单元作业总结
UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...
- OO第三单元作业小结
一.JML理论基础及应用工具链情况 理论基础 1.JML表达式 \result:表示方法执行后的返回值. \old(expr):表示一个表达式expr在相应方法执行前的取值. \foall:全称量词修 ...
- BUAA OO 2019 第四单元作业总结
目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...
随机推荐
- 关于DFS的理解
DFS(深度优先搜索)相当于暴力寻找有效解的过程 如果把多种情况写成一个树的方式 那么DFS的实质就是遍历所有分枝来寻找最优解 而DFS中遍历所有解的方式采用了我们称之为回溯法的东西 如图所示 图中的 ...
- py2,py3区别 ,基础网络常识,多线程,
1.编译型:把代码编译成机器码,计算机找虚拟机执行代码,机器码交给计算技巧去运行 :C语言,java c# 解释型:边解释边执行 5.只有列表才能reverse 字符串需要索引[::-1] 6.py2 ...
- Mysql-多表数据记录查询
多表数据记录查询 一.关系数据操作 并(UNION) 并就是把具有相同字段数目和字段类型的表合并到一起 笛卡尔积(CARTESIAN PRODUCT) 笛卡尔积就是没有连接条件表关系返回的结果. 内连 ...
- python 爬虫之-- 正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. 正则表达式非python独有,python 提供了正则表达式的接口,re模块 一.正则匹配字符简介 模式 描述 \d ...
- Shell:
Bash Notes for professionals ebook https://blog.csdn.net/simple_the_best/article/details/52821136 27 ...
- JavaScript中的回调函数(callback)
什么是回调函数 In computer programming, a callback is a piece of executable code that is passed as an argum ...
- Getting Started with TensorFlow.js
使用TensorFlow.js,您不仅可以在浏览器中运行深度学习模型进行推理,你还能够训练它们.在这个简单的样例中,将展示一个相当于“Hello World”的示例. 1.引入TensorFlow.j ...
- 使用arthas 生成火焰图分析jvm
arthas 是阿里巴巴开源的强大的jvm 应该分析工具,以下是使用arthas 生成jvm 火焰图的一个学习 项目使用docker-compose 运行,对于生成的火焰图使用nginx 提供一个访问 ...
- <Dynamic Programming> 120 279
120. Triangle 从倒数第二行找,然后逐个遍历这个DP数组,对于每个数字,和它之后的元素比较选择较小的再加上面一行相邻位置的元素做为新的元素,然后一层一层的向上扫描 class Soluti ...
- <Math> 50 367
50. Pow(x, n) abs (Integer.MIN_VALUE) > Integer.MAX_VALUE class Solution { public double myPow(do ...