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

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、稍微提升一下中测点的难度。

转载于:https://www.cnblogs.com/janfante/p/11078554.html

OO第四单元作业小结相关推荐

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

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

  2. OO第四单元作业总结

    第四次博客作业 本单元架构设计 第一次作业 在自己尝试画了第一次作业的类图后,发现自己作业的架构依旧混乱不堪.第一次作业中,我总共建了四个类,除去MyUmlInteraction类外,ClassRel ...

  3. OO第四单元小结暨2019春季学期OO课程总结

    OO第四单元小结暨2019春季学期OO课程总结 目录: OO第四单元总结 一.总结本单元两次作业的架构设计 第一次作业 第二次作业 学期最终总结 二.四个单元中架构设计及OO方法理解 2.1 第一单元 ...

  4. 面向对象课程第四单元作业总结

    面向对象第四单元作业总结 一.第四单元架构设计 1.1 思考过程 本单元涉及到UML图的解析和查询,那么架构设计的核心便在于存储结构的设计.由于原本.mdj文件中元素的存储是使用树形结构来组织的,那么 ...

  5. OO第四单元博客作业

    一.UML作业架构设计 1.第一次作业 其中 Main 是入口类,MyUmlinteraction实现了接口,UmlInteractionBase为MyUmlinteraction实现提供了底层功能, ...

  6. 2019年北航OO第四单元(UML任务)及学期总结

    第四单元两次作业总结 第十三次作业 需求分析 本次作业需要完成一个UML类图解析器,所需要解析的只有符合UML标准和能够在Java 8中复现的UML类图.查询指令存在两种:仅与所查对象有关的指令,以及 ...

  7. OO第四单元——UML及其解析器——总结 暨 OO课程大总结

    第四单元总结 第四单元主要内容是写代码解析UML,因此需要理解UML UML相关 starUML的储存方式是一个.mdj文件,通过使用文本编辑器观察这个文件,我们可以看出这是一个json格式储存的文件 ...

  8. OO第三单元作业总结

    OO第三次作业总结 一.JML (一)JML语言理论基础 (1)JML表达式: JML表达式包括以下几种: 原子表达式如\result(方法执行后的返回值).\old(表达式在相应方法执行前的取值): ...

  9. 第四单元作业——UML分析总结学期总结

    本单元主要学习关于Unified Modeling Language (UML)的设计与分析的内容,重点对UML中的类图.顺序图和状态图的表达方式和有效性进行了分析. UML与上个单元学习的JML同样 ...

最新文章

  1. PHP——大话PHP设计模式——SPL数据结构
  2. 你知道怎么使用DebugView查看调试信息吗?
  3. C语言之字符串探究(二):字符串原生操作——strlen、strcat、strcpy、strcmp自实现
  4. 这道考 switch 控制语句的阿里基础面试题你能答对吗?
  5. 华为将发布鲲鹏 920 芯片数据;三星 S10 自燃;Mageia 7 正式发布 | 极客头条
  6. Android视频点播-边播边缓存-方案
  7. CentOS7 完全卸载MySQL
  8. oracle数据库greatest函数,ORACLE函数之GREATEST函数详解范例
  9. Win10运行PS很卡,分享几种解决Win10用PS卡顿提速设置方法
  10. 批量重命名文件、图片、去除文件名括号
  11. C++/openCV修改视频分辨率
  12. [总结]视频质量评价技术零基础学习方法
  13. 某年的第几个月或第几个周换算为具体的日期 -- vue
  14. AIRPLAY 协议研究
  15. python非技术面试题宝典
  16. Nexus私服的下载、安装、启动、配置教程
  17. 帮朋友 解决一道 LeetCode QJ上问题
  18. DC-5靶机渗透测试详细教程
  19. 李宏毅机器学习|Task02
  20. 4p、4c、4R营销理论概要

热门文章

  1. iPhone 12易掉漆、边框太锋利还割手?库克快出来对线......
  2. bzoj 4417: [Shoi2013]超级跳马
  3. UEBA 的当下与未来
  4. (zhuan)富文本 Attributes 下划线、删除线等
  5. h5页面生成分享海报(保存图片、分享)
  6. 如何解决apt-get中Unmet dependencies问题
  7. T1292:宠物小精灵之收服
  8. win7触摸板怎么关闭_笔记本连接鼠标后自动关闭触摸板功能的方法
  9. 火车运煤问题(马车运草)问题
  10. 阿里邮箱备份,引发的小小插曲--2018年6月21日