微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

面向对象第四单元总结

面向对象第四单元总结

本单元作业的架构设计

HW13

UML图:

本次作业其实第一思路是可以直接在MyUmlInteraction里面莽完的,但这样势必会导致代码的可读性和可维护性极差,于是建立了单独的五个Manager类(如上图),根据查询所涉及的范围,把需要存储的信息分别放在了对应的Manager类里。

存储信息主要通过大量使用HashMap将有查询需要或进一步使用需要的信息存在键值对里,主要目的是方便查询。比如在AttributeManager中存每个类对应的属性

private final HashMap<UmlClass, HashSet<UmlAttribute>> class2attributes;

实际查询时在相应的Manager类里调用储存的信息即可。

HW14

UML图:

可以看出就是加了一个InteractionManagerStateMachineManager,就不过多赘述了。

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] 举报,一经查实,本站将立刻删除。

相关推荐