OO第四单元博客作业
OO第四单元博客作业
总结本单元两次作业的架构设计
这两次作业的共同点是都是处理一系列继承于UmlElement的类,将他们有效的组织起来。在第一次和第二次中分别完成了类图,时序图和状态图。我在两次作业的架构设计都用的一个思路,自己重写MyClass,MyState等元素,然后在这些元素中安排合适的容器,模拟出uml图的结构。
第一次作业
第一次作业中仅仅需要处理类图,因此整个程序可以理解为,构造类图->查询类图。在构造的过程中讲UmlElement中的信息组装成新的实例化元素,在查询的过程中就只需要找到相应的元素然后调用一下其本身的方法。
我在组织这些结构的时候使用了大量的HashMap,这样接可以有效的利用ID,name和实例化元素的关系。
第二次作业
由于第二次作业增加了时序图和状态图,因此自己实例化的个数会增加,但是思路基本没变。
值得一提的是这次的作业增加了对类图的模型有效性检查,这也是我在第二次作业中花费时间最长的一部分了。在这一部分中我主要是用的是DFS算法,
总结自己在四个单元中架构设计及OO方法理解的演进
第一个单元是我感觉挑战性最大的求导单元,由于初学java,并且是第一次处理这么复杂的问题,看到乱七八糟的代码让我感到十分的恐惧。由于当时的问题比较特殊,所以我使用了很多面向过程的思维。当然在三次作业中我的代码架构逐渐完善,最终让我感觉有面向对象的感觉。
第二单元是关于多线程电梯,由于多线程的特殊性,我在这个单元真切的感受到了面向对象带来的好处。我可以进行小小的微调来实现不同的电梯。并且能直观的感受对电梯的调度。在多线程中需要对同步对象和非同步对象有一个清晰的判断,这其中需要有一个层次分明的架构,这是一般面向过程难以实现的。
在第三单元JML规格中,我们逐步实现了对一个地铁线路图的分析。在这一单元中我才真正认识到了架构的重要性。尤其是第二次作业像第三次作业的过渡中,因为涉及到多个图的构建,我充分体验了接下来要写的代码之前似乎已经写过类似的但由于架构没设计好不得不再去写一遍的感受。假如我在第二次作业的编写中就采用指导书安利的构建一个Map类的话,那么第三次作业我就可以直接用这个类而不是在第二次作业辛苦的构建完一个特定的Map的基础上再去写一个新类了。
第四单元看似功能明确,却需要处理很多数据,需要构建一个更加完整复杂的数据体系。虽说设计思路更加清晰一点,但是功能众多需要考虑的东西也很多。
总结自己在四个单元中测试理解与实践的演进
在大一的时候只会通过运行程序,随心所欲的进行一点使用测试。而通过本学期四个单元的学习,我尝试过了自动生成数据,对拍机。虽然自己生成的数据都是基于随机,但是在具体实现中还是很有收获。
总结自己的课程收获
首先是掌握了Java这个高级语言。其最大好处之一就是有丰富的现成的资源进行调用,避免了数据结构课上的痛苦。由于我们使用的工具非常的先进,我们的编程效率也大大提高。
其次是领悟了面向对象的编程思想,在这个思想的加持下,我有能力完成功能更复杂的程序。
在这门课中我认为最重要的是我的学习能力有了比较大的提高。因为这门课几乎不会去教学生应该怎样去编写Java,从第一单元就开始要求同学们实现难度比较高的需求。而相关的Java语法、Java容器等部分都是靠学生自己去学习与探索。在自主学习中编程,这能极大的提高我们的学习能力~
立足于自己的体会给课程提三个具体改进建议
- 实验课的定位不是很明确,每次上午学完了下午就去上机,既不知道怎么准备,每次上机也很仓促。
- 第一次作业难度比较大
- 后面几次作业时间安排有点混乱