程序笔记   发布时间:2022-07-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OO Unit4 单元总结大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

OO 第四单元总结

1. 总结本单元作业的架构设计

本单元的目的是通过自己的方式保存 UML 图中的元素,并实现特定的查询指令。

由于输入输出接口已经由官方包实现,我主要虑的就是数据的存储方式以及查询时的遍历方式。

类图

根据类图中不论继承还是属性、方法的从属关系都是单向的,我选择了采用树状的结构了存储与类图有关的元素。 对于绝大多数元素,我都建立了类来对其进行存储,而对于 UmlGeneralizationUmlInterfaceRealization 这两种用于表示继承和实现关系的边,我没有建立与之对应的类,而是通过将他们标记的 “父” 和 “子” 之间建立联系,具体来说就是在子类(接口)中存储了父类(接口)的指针。而父类中并没有掌握任何关于子类的信息,这也符合 java 中的情景——父类(接口)并不知道哪个类继承(实现)了它。 对于 UmlAttributeUmlOperation 我直接在类(接口)中保存了他们的指针,而 UmlOperation 中又保存了 UmlParameter 的指针,从而形成了树形的结构,便于从类开始向下查找。 最后,由于 关联关系 的存储逻辑并不符合树形结构,我又单独建立了 @H_337_11@myUmlAssociation 类,并在其中存储了官方包中的 umlAssociationEnd 类,对应的类可以通过其中的 ID 找到其关联的对端。进而进行相应的查询操作。 类图部分设计的类的类图如下:(略去了不重要的一些属性和方法)

OO Unit4 单元总结

顺序图

由于顺序图中查询指令的种类较少,设计到的元素也不多,所以我只将 UmlLifelineUmlmessage 两个元素抽象成了类,并用 @H_337_11@myUmlInteraction 来承载这两个元素。 在 @H_337_11@myUmlInteraction 中,由于对 UmlLifeline 的查询是根据名字进行的,故用 @H_337_11@map 来承载数个 UmlLifeline 。而对 message 的查询是要求遍历输出个数的,且需要分别处理收到和发出的消息,故在 UmlLifeline 中用两个 ArrayList 来分别承载收到的消息和发出的消息。 这部分的类图如下:

OO Unit4 单元总结

状态图

状态图部分很符合图论中关于有向图的定义,所以我在实现时也是通过图的方式来实现的。此外还有两个比较特殊的类,UmlStateMachineUmlRegion 其中前者是状态图的顶层模块,后者是状态图中的 ”画布“ 在本次作业中,一个状态机只有一块画布,所以我将 UmlStateMachine 最为了一个中介,主要作用是进行状态图的初始化,具体的节点和边都存储在 UmlRegion 中。 具体的实现方法是: @H_337_11@myUmlState 中存与状态相关的信息,@H_337_11@myUmlTransition 中存状态转移的起点和终点以及相应的 guard 和 trigger。由于 @H_337_11@myUmlTransition 只保存了对应状态的 id,因此,@H_337_11@myUmlState 还需要和其对应的 @H_337_11@myUmlRegion 进行通信从而获得其能够转移到的状态的引用。 这部分的类图如下:

OO Unit4 单元总结

2. 总结自己在四个单元中架构设计及OO方法理解的演进

  1. 第一单元:多项式求导 经过 pre 的训练,在进入第一单元时,我已经由了架构设计的意识。在本单元中,将多项式的各个部分组织成了树状结构,这样的架构使得我在进行表达式解析的时候可以比较轻松的将输入转化为我设计的数据结构,在求导时也可以通过向下依次求导来快速获得结果。但是这样的设计的问题就是在进行表达式化简时会比较繁琐,一旦处理不好还容易出现 BUG。

    在本单元中,我对 OO方法的理解还仅限于最基础的 封装、继承、多态的概念。 而通过这一单元的学习,我最大的收获是明白了 OO 只是一种方法,和其他方法比起来,是各有优劣而不是绝对优越的,所以即使在 OO 课程的作业中,适当的使用面向过程的编程方式也可以很好的化解问题。此外,我还了解了通过继承关系对类进行管理在很大程度上简化程序。

  2. 第二单元:电梯 在这一单元中,我们初步接触了多线程程序的设计。

    在本单元中,主要的任务是处理多线程的安全问题。具体的电梯控制方式,我采用的是分布式控制,绝大部分操作都是由电梯线程自己根据公共队列中的信息自主决定。电梯间的竞争使得最终的结果相对优越。

    本单元的学习让我对面向对象的设计方式有了新的理解,了解了类之间的沟通与协作的方式,了解了线程安全相关的设计模式(如生产者消费者模式)

  3. 第三单元:JML 这一单元我们主要在学习规格。

    这单元的题目比较简单,可以使用邻接表法来存储图关系,通过图论中学习的算法来对图中的元素进行遍历与查找。需要注意的是本单元对性能的要求比较高,所以在进行查询操作时要时刻注意自己的算法复杂度。

    本单元的学习让我理解了测试在 OO 程序设计中的重要性,了解了测试驱动开发的方法。

  4. 第四单元:UML 关于本单元的架构设计在上面已经解释过了,在此不再赘述。

    本单元让我理解了在进行程序设计时可以采用画 UML 图的方法来进行建模,从而帮助程序编码,使编码更加快捷,正确性也会得到提高。

  5. 总结 通过 OO 课程的学习,我对 OO 方法的理解从“封装,继承,多态” 三要素开始逐步加深,依次理解了层次化设计,多线程设计,对象间通信的方法,基于规格的设计和基于模型的设计。 通过这些作业我还理解到,OO 只是众多程序设计方法中的一个,而程序设计不存在最优解,不存在所谓的 “银弹” ,在进行程序设计时我们需要根据自己的需求来选择一种或多种适合的方法来辅助自己达成目标。此外,OO 方法也不仅仅是一种程序设计方法,在管理现实中的事物时,采用 OO 方法中的一些套路也可以事半功倍。

3. 总结自己在四个单元中测试理解与实践的演进

  1. 第一单元:多项式求导 在这一单元中,验证自己多项式求导的正确性可以通过 Python 中现成的库函数。因此在本单元的作业中,我通过编写测试脚本运行特定的测试用例来验证自己的程序结果是否正确。 在此时,我对测试的理解还浅显的停留在了用样例来测试程序的阶段,所采用的测试样例也大多是来自于随机自动生成,还不能根据自己程序的特点构造有针对性的测试样例,也没有采用单元测试的测试手段。
  2. 第二单元:电梯 在这一单元中,我们初步接触了多线程程序的设计。 由于多线程程序存在运行结果的不确定性,所以我在进行测试时采用了 “压力测试” 的测试方法,即同时开多个程序来运行,经过我的实验,开 100 个左右的线程可以使我的电脑 CPU 占用率达到较高水平,使得线程不安全的问题更加容易暴露出来。
  3. 第三单元:JML 这一单元我们主要在学习规格。而规格正是测试程序运行是否正确的方法这一。本单元中,每个需要实现的函数都对前置和后置条件有着严格的规定,因而十分适合采用单元测试的手段。 在这个单元中,我第一次接触到了单元测试的手段,也是在这作业中,我开始关注采用样例对程序的覆盖性。可以说在通过这个单元的学习我才真正开始对 “测试” 有了深入的了解。 除了单元测试,本单元作业对性能的要求也十分严格,故在测试时我也会有意识的去构造容易导致 TLE 的样例,也开始想办法记录程序的运行时间。
  4. 第四单元:UML 作为 OO 课程的最后一个单元,在本次作业进行测试的最大难点就是无法确定正确的结果究竟应该是什么。为了解决这个问题,我组建了一个对拍小组,大家将每个人的输出集中在一起进行比对,如果出现了不同的结果,就会在一起讨论每个人对题目的理解,直到达成一致。通过这样的方法,我们攻克了绝大多数的难关。

4. 总结自己的课程收获

  1. 对 OO 方法的理解逐渐加深 正如之前提到的,通过这多次编程作业和博客作业,我对 OO 方法的理解逐渐深入
  2. 开始注重在程序架构设计 OO 课程的作业有迭代开发的需求,所以在动手编程前,必须想好代码的架构,并且需要为之后迭代开发预留一定的空间,如果不在开始编码前对架构有一定的设计和思,那么在折后的作业中对面临需要多次重构的窘境。
  3. 了解了不同的测试方法 通过这几次作业,我了解了测试脚本的编写,测试用例随机生成的方法,单元测试的方法,测试点的覆盖率等一系列测试的手段的标准,也通过 JML 单元的学习初步的了解了形式化验证方法。
  4. 学习了一些常用的设计模式 通过编程作业和课上实验,我学习到了一些常用的设计模式,比如生产者——消费者模式,简单工厂模式,单例模式等。
  5. 学习了一些算法知识 在第一单元中,我学习了递归下降语法分析的算法 在第三对应中,我学习了并查集的实现与应用,Dijkstra 算法的堆优化等算法
  6. 了解了 Java语言的一些语法知识和可能导致隐秘 bug 的实现细节

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

  1. 希望实验可以提前公布一个预告,可以让我们提前预习一些实验可能用到的方法。
  2. 希望实验可以公布结果
  3. 希望第四单元作业的题目描述能更加清晰,最好可以给出一些边界情况的样例和样例说明,防止大家在讨论区大量提问

大佬总结

以上是大佬教程为你收集整理的OO Unit4 单元总结全部内容,希望文章能够帮你解决OO Unit4 单元总结所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。