oo课程总结
一、第四单元总结
以第二次作业为例
1.总体设计:
根本没有什么设计。
由于一开始我不明白可以自己创建新的类,所以所有内容都是挤在一个文件中。
而说到图就想到java里自带的Map。这导致了我使用了巨多的HashMap存放元素间的各种关系。直接导致文件行数突破700行,喜提代码风格0分。
后来按照三种图把文件划分为三个类,再在一个总交互类中实例化这三个类。但ClassMap类还是只勉强没超过500行红线。
在第三次作业中,我只能通过各种缩行方法给新增代码腾出空间,结果代码乱成一团。
2.数据存储与管理:
没别的, HashMap走天下。

虽然比较原始,但意外地可用性高。只是略显冗杂。
在管理这些数据的类初始化时,多次遍历elements,加载其中与需求相关的关系。调用需求方法时,流程基本上是查找相关元素→查找相关关系→输出结果。
3.部分方法设计:
判断是否有循环继承和重复继承时采用不断剪去度为1的节点的方法。这个算法是上网查询资料得来的。时间复杂度可以达到O(kn)。但由于我的架构不合理,致使我写出的代码臃肿难看。再经考试周洗礼,虽然明知道写出来的代码bug在哪,但无力在原先基础上debug。
二、课程总结
1.多项式求导
第一次作业比较基础。可以用c语言风格代码解决问题。但这也为后来的推倒重来埋下伏笔。
第二次作业难度陡然增加。但其实质仍然是函数的组合。求导比较简单。
第三次作业增加了嵌套。求导的方式必须作出调整。由于对困难程度预估不足,我未能及时提交此次作业。
这一单元的作业主要是让我们熟悉java的容器和java的面向对象特性。
2.电梯
前两次作业因为身体原因,没有及时掌握多线程的概念,没有提交。
第三次作业时,我才明白了java多线程的具体机理,掌握了关键字和关键方法的用法。这才成功完成任务。
这单元我学习了重要的生产者消费者模式,了解了多线程的概念。
3.社交网络
这单元学JML。这种语言表述能力极差,动辄几十行的JML转化为代码后只有十行不到。这应该只是为了让我们初步接触这种规格描述语言。这个单元初步涉及到了图的概念。任务要求实现起来基本没有难度。
4.测试
测试基本靠公开的测试点。这也算我对这么课程疏忽的一点吧。前两次作业都是依靠同学提供的测试数据,后面两次测试数据基本上难以手工造出来所以只能采用评测提供的测试点。
三、收获
初步了解了java这门语言。了解了java的一些设计模式和多线程等重要概念。顺便稍微复习了一下图论。
感觉稍微有点遗憾,没有把oo这门课的价值完全发掘出来。之前听说这门课比较恶心,所以是带着完成任务的心态去做作业的。但实际上oo想表达的东西很有价值,只是我已经没有动力去挖掘了。
四、建议
1.对于第一单元这种可能引起反复迭代的作业,可以提前透露之后会做哪方面的拓展以方便同学们一开始就做好架构设计。
2.对第二单元,三次作业间其实没什么跨度。主要还是要掌握多线程的概念和用法。我认为可以把第一次作业只作为一次练习,宽裕一周的时间学习多线程相关知识。
3.代码风格检查里面一些规定有待考量。比如必须把变量定义为private,这阻碍了父类和子类间的信息交流。还有一行长度100字符,在官方包的一些类命名巨长的情况下很容易超过。
4.设立一定的缓冲期,每次作业过ddl后还没提交就不算有效作业了,而作业公布后四天时间实在有些局促。设立缓冲期,在缓冲期内提交的作业分数降低(比如参加不了强测),但仍然可以算作有效作业。
5.理论课上讲的东西太抽象。而且上来就有UML图,完全搞不懂一开始老师在讲什么。可以多讲讲具体案例。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号