OO第四单元总结
作者:互联网
OO第四单元总结
本单元架构设计
本单元由于UML图本身已有明确的结构关系,所以没有进行大的创新,架构就是实现UML的基本结构,只使用了类的组合关系来整合管理,根据作业要求,并未完全实现UML的结构,做了简化处理。
三次之间并未修改架构,只是添加,且基本是单一的线性包含结构,总架构如下:
类图部分
ClassPlus:类,内含属性、方法、实现接口、关联端、父类
InterfacePlus:接口,内含继承接口,记录所有祖先接口
OperationPlus:方法,内含包含的参数
时序图部分:
InteractionPlus:内含lifeline
LifelinePlus: 内含message,记录收到和发出的消息
状态图部分:
StatemachinePlus:内含StatePlus
StatePlus:内含TransitionPlus,记录从该状态的状态转移
TransitionPlus:内含UmlEvent
其他:
Analyse类:用于对读入的所有UML元素进行解析,构建上述包含关系
Checker类:用于规范检查
架构设计和OO方法理解的演进
第一单元
面向对象的摸索阶段,一开始只是把对象当作类似C语言简单结构体使用,比如第一次作业,做起来跟程序设计课时差不多,基本是面向过程编程,随着作业的推进,特别是从第二次到第三次的过度,渐渐的学会按照层次抽象的架构设计,构建了表达式类、项类、三角函数类等,使类各司其职,只关注自己需要完成的求导任务,尽量减少耦合。
本单元中还学到了递归下降,学习了在类之间使用递归,对架构的层次化理解也更深入了一点。
第二单元
多线程编程难点感觉不再架构的设计,架构设计无非是调度器与电梯,生产——消费者模式,难在加锁的实现与架构的结合,架构上的层次关系之间的联系需要在加锁上很讲究,公共类的设计很关键,决策方案才是根本。
第一单元更多的是根据表达式中不同的数据类型做对象区分,第二单元则更偏向从功能特性区分对象,更能体现对象间各司其职,再通过共享属性交互。
第三单元
本单元我感觉没有什么架构可言,基本定型了,最多是容器的选择。
本单元更多的是学习阅读规格的能力,编程的严谨性,以及在限制内的算法优化,收获很多,图论相关算法、dijstra+堆优化都很有用,特别是并查集,我在没听说过的情况下,在OS测试时想到并使用的类似思想,在OO上刚好适用,与同学交流发现就是并查集思想,很奇妙。
第四单元
本单元UML图的相关编程,架构上我认为是更明显的层次化对象设计,在此基础上进行访问、索引,不知是更熟练了还是UML图架构明显的关系,本单元架构设计比较顺利。
四个单元中测试理解和实践
水平有限,并没有像其他大佬们那样研究评测机,只在较为简单的第三单元与同学使用了评测机,单也只是简单的随机轰炸、没有较为全面的覆盖性,导致以为没事,结果“合葬”。
平时主要还是手动测试,列举出边缘数据,进行测试,或是构造极端数据测试性能。
课程收获
上学期选修了JAVA,但是老师并没有教任何语法,也没有教基础,所以只是照着网上抄了个大作业就结束了,还是完全不会JAVA,只是知道JAVA一堆类,一堆方法。
本学期才是真正的学习JAVA,虽然比较硬核,但是收获很多,首先,在第一单元高强度的求导作业下快速理解了类、对象、方法等基本概念、并马上进行实践使用,很艰难但是有效地入门面向对象编程。
随着作业推进,越来越习惯层次化设计,将对象抽象出来,尽力使对象间各司其职,使维护、debug、增量开发方便,还记得第一单元每次都重写,那还是相当痛苦的,之后的作业基本是添加工作,体会到了OO越学越熟练的快乐。
技巧方面收获也很多,递归下降、并查集、dijstra等的学习和使用。
三个具体改进建议
1.预习部分希望能适当丰富一点,做多一点指导,或是对自学方式、内容给出更多建议,使预习时目的方向更明确,并更着重强调一下开学第一周就开始有规模比较大的作业(我就是以为OO像计组一样开学预习也来得急结果第一周很绝望)
2.四个单元的难度做适当调整,比如第一单元在大家还没熟悉时就要面对比较复杂的求导,且当时理论课也基本没讲,对架构、继承、接口理解还不深,再加上还有递归下降的使用,虽然收获很大,但难度个人认为可以适当调整。第三单元难度明显降低,可以考虑与第一单元权衡调整,或是与第四单元交换,降低考期压力
3.希望能有对评测机的搭建基础教程,开学第一次研讨课作业都还不太会就听大佬分享评测机的搭建真的很懵。
标签:OO,架构,内含,作业,UML,第四,单元 来源: https://www.cnblogs.com/buaa-judging/p/14933904.html