oo第十六次作业

一、三次作业的架构设计。

第一次作业本人采用了各种各样的hashmap来存储一些对应关系。比如名字和id,类和类内部的属性或方法等等。我通过在构造函数分门别类的构造并存储这些数据关系,以便在接口需要完成的方法中更加高效的完成需要计算的量。比如在构造函数中,将一个类的id和类里面的全部属性作为hashmap的键值对。那么当需要计算一个类中全部属性的数量时,只需要return这个键(class的id)对应的属性集合(value)的大小就好了(当然如果非顶级父类还需要逐级累加)。这样就大大方便了完成方法代码的函数。

第二次作业和第三次作业是本人第一次作业思想的延续。只不过第二次和第三次作业需要完成更多方法,实现更多接口罢了。

二、四个单元的架构设计及oo方法理解的演进。

从一开始,没有接触过oo,于是当时对oo的理解还停留在跟面向过程编程相同的阶段。比如第一单元的求导,当时就是用一个main类加上乱起八糟的方法,满脑子就是想怎么解决问题怎么过测试就行了。后来随着求导难度的增大,一开始的方法不管用了。在更加深入理解ppt和指导书的情况下,我逐渐开始明白“万物皆是对象”这样的思想。那么写代码就像是我创造一些东西,这些东西可以用来帮我解决这个问题。而这些东西具有哪些特征,可以传递哪些消息完全是取决于你自己来决定的。于是第一单元后面的架构,我就建立了较多的类,每一类解决一个小问题,那么这些类相互配合就解决了大问题。

之后在第二单元又是一个挑战。多线程编程之前从未尝试过,而且多线程首先从理解上来就比较困难。一开始只能摸着石头过河,凭借一些直觉来写代码,写完了也不知道自己对不对,只是感觉“好像应该得这样”。于是乎一开始写出来的也是一团糟。比如第一次作业我才用了暴力轮询的方法(我一开始都不知道这是暴力轮询)。而且强测没有测出来(因为轮询的时间点比较特殊造成一般情况下不会cputle)。后来通过互测才发现了问题,因此为了修复bug,我深入学习了线程之间的配合,深入了解wait,join,notify等等,并且对死锁问题有了更加深入的理解。通过这单元学习,我对线程安全有了深入的理解。

第三单元是jml语言的学习。这一单元给我的感觉更像是完形填空,是一些局部的东西,而非整体的设计。这一单元主要了解了jml对代码实现的约束作用。通过jml语言的约束,代码可以达到一种所谓“标准”的效果,相当于一种形式化的验证。但是这单元的测试却涉及了一些算法相关的东西,而这又不在正常jml语言的学习范围之内,因此显得比较困惑。

最后一个单元是关于uml图的分析设计。本人的思路就是通过hashmap或者hashset等数据结构来保留uml元素的关键性信息,以便在需要完成的借口函数中进行运用。uml图本身就是关于一个代码工程文件的架构的分析。通过这样的图,直观的可以理解整体的架构。我认为这单元的重点不在于自己写的那些代码,而在于对我们处理的对象--uml图的理解,以及对官方代码包中有关uml图的那些类以及他们的特征以及关系的理解。

三、测试理解实践演进

一开始对测试的理解就是过掉他,对互测的意义也没有那么重视。后来在第二单元,我终于在互测中被人查出bug,我终于明白互测的关键性了。通过互测可以发现更多的问题,可以开动脑筋根据代码找出可以使得代码运行出错的样例。

四、课程收获

从一开始,没有接触过oo,于是当时对oo的理解还停留在跟面向过程编程相同的阶段。比如第一单元的求导,当时就是用一个main类加上乱起八糟的方法,满脑子就是想怎么解决问题怎么过测试就行了。后来我逐渐开始明白“万物皆是对象”这样的思想。那么写代码就像是我创造一些东西,这些东西可以用来帮我解决这个问题。而这些东西具有哪些特征,可以传递哪些消息完全是取决于你自己来决定的。于是第一单元后面的架构,我就建立了较多的类,每一类解决一个小问题,那么这些类相互配合就解决了大问题。

之后在第二单元又是一个挑战。多线程编程之前从未尝试过,而且多线程首先从理解上来就比较困难。一开始只能摸着石头过河,凭借一些直觉来写代码,写完了也不知道自己对不对,只是感觉“好像应该得这样”。于是乎一开始写出来的也是一团糟。比如第一次作业我才用了暴力轮询的方法(我一开始都不知道这是暴力轮询)。而且强测没有测出来(因为轮询的时间点比较特殊造成一般情况下不会cputle)。后来通过互测才发现了问题,因此为了修复bug,我深入学习了线程之间的配合,深入了解wait,join,notify等等,并且对死锁问题有了更加深入的理解。通过这单元学习,我对线程安全有了深入的理解。

第三单元是jml语言的学习。这一单元给我的感觉更像是完形填空,是一些局部的东西,而非整体的设计。这一单元主要了解了jml对代码实现的约束作用。通过jml语言的约束,代码可以达到一种所谓“标准”的效果,相当于一种形式化的验证。但是这单元的测试却涉及了一些算法相关的东西,而这又不在正常jml语言的学习范围之内,因此显得比较困惑。

最后一个单元是关于uml图的分析设计。本人的思路就是通过hashmap或者hashset等数据结构来保留uml元素的关键性信息,以便在需要完成的借口函数中进行运用。uml图本身就是关于一个代码工程文件的架构的分析。通过这样的图,直观的可以理解整体的架构。我认为这单元的重点不在于自己写的那些代码,而在于对我们处理的对象--uml图的理解,以及对官方代码包中有关uml图的那些类以及他们的特征以及关系的理解。

五、三个建议

1、第三单元jml语言实际考察点却是算法,令人困惑,建议增加对jml语言的深入考察。

2、第一单元求导的形式还可以更加复杂一些。

3、建议第三单元、第四单元的弱中测能够更强一点(以防强测拉垮)。

六、线上学习oo体会

线上学习oo感觉体会就是摸着石头过河。理论课上一回事,自己的实践是另一回事。在很多情况下,自己学习的时候就会经常试错。如果是平时线下的时候,就可以跟同学交流。所以线上学习的体会就是:在孤独中成长。

原文地址:https://www.cnblogs.com/zdfvv/p/13166485.html