面向对象第四单元总结
本单元作业的架构设计
HW13
UML图:
本次作业其实第一思路是可以直接在MyUmlInteraction
里面莽完的,但这样势必会导致代码的可读性和可维护性极差,于是建立了单独的五个Manager类(如上图),根据查询所涉及的范围,把需要存储的信息分别放在了对应的Manager类里。
存储信息主要通过大量使用HashMap将有查询需要或进一步使用需要的信息存在键值对里,主要目的是方便查询。比如在AttributeManager
中存每个类对应的属性。
private final HashMap<UmlClass, HashSet<UmlAttribute>> class2attributes;
HW14
UML图:
可以看出就是加了一个InteractionManager
和StateMachineManager
,就不过多赘述了。
HW15
-
UML图和第14次的一样,就不放上来了。
-
各个
check
方法我是直接在MyUmlGeneralInteraction中实现的,有需要再在对应的Manager
类里添一些辅助的方法。 -
个人感觉这次作业的难点在对前几个rule的理解以及实现的具体细节,前者例如R001的associationEnds要和attributes放在一起,后者例如某些规则需要用广搜或者深搜的算法遍历我们存储的数据。
四个单元中架构设计及OO方法理解的演进
经过四个单元的学习,我能明显感觉到最大的收获就是面向对象思维方法的精进,学会了用多个类(及其中的属性和方法)来抽象化事物,利用类之间的关系组织起事物事物的关系,通过不断地解构最后总能下沉到数个较为简单的方法。
UNIT1
第一单元开始时对于面向对象完全没有什么概念,就是用正则表达式硬写的,但随着老师助教的详细讲解以及和同学们交流思路架构,逐渐学会了建立多项式->项->因子的架构,采用了递归下降的方法,虽然仍然经历了多次痛苦的重构,但还算有了初步的面向对象的思维。
UNIT2
第二单元个人代码的主旋律就是生产者-消费者模式的应用,从一对一到多对多,第二单元的作业从一开始到最后的架构都是比较清晰的,前两次都是将生产者(InputHandler
)和消费者(Elevator
)的线程交互集中在托盘(dispatcher
)里也能避免线程死锁,第三次作业新添了一个总的Controller
作为生产者,但是在Controller
实行换乘策略时考虑不周导致电梯轮询。
UNIT3
第三单元面向JML设计,并没有给同学们留太多架构设计的空间,更多的是容器和算法的选择以及做好测试,总的来说是最轻松的一个单元。
UNIT4
第四单元主要为Manager
架构,相应的解析、存储、查询都下沉到对应的Manager
,尽量降低Manager
类相互的耦合度,做到在MyUmlGeneralInteraction
中统一调用。
四个单元中测试理解与实践的演进
- 第一单元中主要采用的是手动构造极端数据样例和python正则表达式生成的方法构造样例,但苦于时间限制,一直没有搭好完整的评测机。
- 第二单元学会了用jprofiler找ctle的出处,并利用OS课上管道搭建了一个简单的测评机,但是多线程的特点也让笔者难以造出有效的数据并实现对拍。
- 第三单元新学了JUnit的测试,但是经过这一单元的测试,笔者发现JUnit测试的强度显然是远远不够的,这个测试方法的本质还是基于自己对JML思路来进行测试,也就难免会有疏漏的地方,目前来看最有效的办法还是和同学进行对拍。
- 第四单元同样是和同学进行对拍,缺点是UML的数据很难造。
课程收获
- 从久仰java的大名到逐渐熟悉了java的使用,学习了java里各种各样封装好的容器、多线程、UML等各种知识。
- 面向对象的思维的形成,如何将事物和问题抽象化为类来处理。
- 简单开发的流程,每周都能走一遍从架构设计、coding、debug/测试到总结的一系列流程。
- 一些有用的工具,比如IDEA、jprofiler的使用、搭建对拍器/数据生成器时用的python库等等。
- 充实的周末
(原来周末除了可以玩还可以用来写代码)。
具体改进建议
- 建议第一单元降降难度(大概可以把JML提到第一单元),或者在寒假/开学时发布一个简单的带着写java的教程,第一单元对刚接触java的人确实不太友好。
- 希望作业能有一些更积极的反馈,比如适度公开一些值得学习的优秀代码和对应的架构设计,个人感觉仅靠互测屋和研讨课上笼统的分享收获还是较为有限。
- 希望实验课也能有一些反馈结果,比如下发标准答案等,虽然有时候确实能从官方实验课代码上学到一些东西,但一学期下来实验课的参与感大多数时候都局限在了课上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。