面向对象课程第四次总结性博客作业

一、第四单元架构设计总结

第一次作业:第一次作业主要是对于类图的处理,因此我将所有类图中的元素读进来之后,直接存在了一个Id到UmlElement的Map,来进行对类图元素的快速检索。第一次作业的难点还是对于类图内容和其关系的理解,理解之后就可以很清楚的进行代码编写,笔者就因为不清楚接口可以多重继承而调试了很久。

面向对象课程第四次总结性博客作业_第1张图片

第二次作业添加了对于状态图和顺序图的读取,但是读取都比较简单,因此可以在第一次作业的基础上直接进行扩充。

面向对象课程第四次总结性博客作业_第2张图片

 

二、自己在四个单元中架构设计及OO方法理解的演进  

第一单元:第一单元的作业一开始由于是为了帮助我们适应课程,因此十分的简单,在设计上我也没有进行很多的考虑,只是简单的为项设立了一个类,也是因为如此在第四次作业吃到了很大的苦头,特别是由于需要处理的表达式格式变得越来越复杂,用来进行表达式解析和合法性判断的方法写了一百多行,对整个程序的调试难度产生了很大的影响。

第二单元:第二单元的作业中加入了多线程的操作,多线程对于以前没有接触过的我来说是一个巨大的挑战,也是在这个时候我开始注意整个程序的架构设计的问题,我开始将问题进行抽象,找出能够抽象为类的方法。在第二单元的四次作业中,我将电梯和控制器分开设成两个类,控制器从输入端那里读取输入,电梯从控制器接收请求,形成一个生产者——消费者模型。

第三单元:第三单元的作业目的主要是加上对JML的理解和根据UML规范进行代码补全。这部分的难度相比前两个更加简单,但是由于没有考虑到时间复杂度的问题,第一次作业有很多数据超时。在第二次作业后,我开始注意时间复杂度的问题。第三单元的作业大部分是根据JML实现接口,但是这并不代表和架构设计无关,因为实现接口的函数中也可能调用其他类,从而也需要对整个程序进行比较科学的架构设计,否则会对程序的调试产生很大的障碍。

第四单元:第四单元只要是针对UML的理解,所以作业也设计成了对UML类图、状态图、顺序图的解析。由于这两次作业的时间复杂度要求很低,因此在很多代码实现中我直接采用了遍历的方式,同时数据存储也只设计了Id到UmlElement的映射。

三、自己在四个单元中测试理解与实践的演进

第一单元:第一单元主要难点在于表达式合法性的判断和表达式解析,因此在构造测试数据的时候我构造了很多的合法性判断的测试点对程序进行测试。但是由于我对于科学构造测试数据的方法还并不熟悉,因此还是有很多边界点没有想到。

第二单元:第二单元主要难点是多线程,在进行多线程调试的时候我尝试了很多方式,如一个测试数据多次测试、在代码中添加yield等,但是由于多线程程序本身执行顺序的不确定性和我对于锁的理解不够深入,因此经常出现本地测没问题、提交测试却无法通过和死锁的现象。

第三单元:第三单元在根据JML进行代码实现的时候,我学会了通过循环不变式来进行模块化测试,对代码的每个函数分别进行测试,在确保程序的每个组件都没有问题之后再把他们组合在一起。这种调试方法帮我节省了很多调试代码的时间和精力。

第四单元:第四单元与前三个单元相比更像是一个总结,在对UML图进行读取的时候我对前三单元中学到的调试方法进行了综合应用,效果非常好,这也让再次认识到科学的测试方法对于程序设计四、自己的课程收获

在上完一个学期的面向对象程序设计的课程后,我首先比较系统地掌握了Java这门语言,然后对于多线程程序的设计、调试都有了比较深入的理解,同时在整个课程中我还穿插着理解了几种设计模式,如单例模式、工厂模式等,这些设计模式对于我今后的面向对象程序设计有着很大的帮助。

五、立足于自己的体会给课程提三个具体改进建议

1、第一单元作业中的表达式合法性判断难度较大,建议调整

2、一个单元的前两次作业和后两次作业难度差距太大

3、理论课每周只有一节,个人觉得略短

在最后我要向本门课的所有助教说一声感谢,在整个学期里我感受到了助教们的用心和付出,感谢你们。

你可能感兴趣的:(面向对象课程第四次总结性博客作业)