码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象课程第四单元及课程总结

时间:2021-06-28 19:01:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:uml类图   cti   长度   干什么   复杂   字典   演进   过程   超过   

架构设计

hw13

输入所有UML元素后,首先遍历查找类和接口,将它们存为MyClass并通过boolean isInterface区分,把对应id和新建的对象存入字典idToClass。再遍历属性,根据id查找对应的类,将其设置为对应类的属性即可;同理设置先设置方法、再设置方法对应的参数,先设置关联关系、再遍历每个UmlAssociatedEnd找到对应的类。

类的关系中,继承、实现是单向的,关联是双向的。并且接口之间可以多继承,实现某个接口的同时也实现了它所有父接口;关联关系相当于将两个类形成的家族关联起来。如下图所示。

技术图片技术图片

即本次作业中在MyUmlInteraction中添加上述几类变量作为属性,根据初始化时的UML元素设置属性,进行后面的查询操作。

由于直接在查询之前,便设置好了所有实现关系和关联关系(包括继承关系带来的那些),需要全部归查找,强测直接超时CTLE。

代码架构的UML类图如下:

技术图片

hw14

增加了顺序图和状态图,设计上和上一次差不多(示意图如下):

技术图片

唯一不同的一点是,由于500行的代码风格要求,我把初始根据元素UmlElement建立各类、设定其属性的工作,新建了一个类,只传回必要的属性给MyUmlInteraction,包括顶层的MyInteractionMyStateMachine,还有各种MyClass

hw15

这次作业由于是增加合法性检查,之前的代码架构基本不变。

但是又双叒叕超过规定行数了……

MyUmlInteraction实际上是在做各种处理,包括初始化的建立类、属性、时间线、状态等等,以及对不同UML图的指令的执行。因此我根据这个逻辑上的划分,建立了setMyElement的初始化类,针对类图、顺序图、状态图的3个指令处理handler,在MyUmlInteraction中调用它们即可,将逻辑内聚性高的封装起来,符合代码编写原则。

最后看起来就很庞大:

技术图片

设计演进

第一单元(多项式计算):

还沉浸在面向过程的思维中,类只是莫得感情的存储表达式、项、因子的工具罢了(甚至第一次作业只有两个类:标准项和解析字符串)

为了性能分做了强行拆开所有括号再查找最佳合并同类项方式,大量使用递归,疯狂用时间换结果长度,代码写得很复杂,逻辑一团乱经常自己把自己绕进去,也没有使用设计模式的意识,用递归下降还是研讨课大佬分享之后才重构换的。

第二单元(电梯):

第五次作业的时候多线程理论知识不是很明白,模仿着课上实验的设计模式写,不管怎么说总算是有代码架构设计的意识了。

后来比较不同多线程实现方式,以及研讨课上学姐从”切蛋糕“讲起的各种设计,都很有启发性。

以及这个单元的不可复现bug十分要命,debug过程中也在不断改自己代码,让架构看起来更清晰更不容易出错。

第三单元(JML):

(第三单元好像没什么架构设计?都被JML框死了orz)

这个单元主要是通过根据JML编写代码的过程,提高代码的规范性吧,毕竟JML形式化语言是非常严谨的,参照着也能提高自己的代码编写严谨程度,以及练习更简洁的表达方式。

以及JML只是保证正确性,为了时间性能还得在算法上调整时间复杂度,以免发送CTLE的人间惨剧。

第四单元(UML):

比较自然地运用各种容器,编写类之间的关系(主要是聚合关系)

(其实感觉这个单元最大难度在弄明白自己要干什么…指导书写的好简洁)

测试演进

惭愧惭愧,我只有第一单元用Generex生成随机数据进行了自动化测试,后面望评测机而生畏,都没有进行自动化测试。

第三单元中接触了JUnit测试,觉得工程化测试方法在大的项目中十分有必要,后续学习中会继续探索研究测试方法。

技术图片

课堂收获

①学习面向对象的思想,与C语言的面向过程编程相比较,体会多态、封装等在代码可重用性方面的优点

②初步接触多线程,与OS课程遥相呼应,深(can)刻(tong)意识到线程安全的重要性,了解多种多线程模式比较其优劣

③练习Java语言的运用,熟悉各类容器的使用和特点,习惯于面向对象的编程方式,注意提升时间复杂度的方式

④学习JML形式化语言,使得代码更加严谨,规范UML类图的使用(我以前一直不知道UML是形式化的,以为是示意图随便画)

⑤学习设计模式,了解”高内聚低耦合“、”组合聚合优先“等设计原则,有意识地优化代码结构

⑥在与checkstyle的互相折磨(bushi)中改善代码习惯

建议

①修复bug时,初始版本E1,提交修复了bug1的版本E2后,等待bug修复通过之前,新的提交版本git diff判定都会是基于E1的,很多情况下只能等助教辛苦地批完才能改下一个bug(某bug多菜鸡泪目)

②每次作业强测后能下载自己的代码压缩包,能否在bug修复后更新该内容?本地出现误操作git版本混乱的时候,这个下载代码真的是救命了,但是没有更新忘了自己修复了哪些bug就很难受

③目前只有“查看上一次提交”,能否增加一个提交记录列表?或者直接下载log,txt之类的,这样会方便很多(尤其是多线程那种跑一次跑很久的,每次bug还不一样,还只能看到上一次锅了哪几个点)

④第三单元JML(其实UML也是)坑太多,没有测评机很难存活,但没有大佬那样的自学能力,写测评机又感觉无从下手,除了研讨课大佬同学分享之外,能不能在官方库放一些指引提升之类的?要是能做成pre或者train就更好了qwq

面向对象课程第四单元及课程总结

标签:uml类图   cti   长度   干什么   复杂   字典   演进   过程   超过   

原文地址:https://www.cnblogs.com/beatrix-y/p/14938854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!