大佬教程收集整理的这篇文章主要介绍了OO Unit4 单元总结,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本单元的目的是通过自己的方式保存 UML 图中的元素,并实现特定的查询指令。
由于输入输出接口已经由官方包实现,我主要考虑的就是数据的存储方式以及查询时的遍历方式。
根据类图中不论继承还是属性、方法的从属关系都是单向的,我选择了采用树状的结构了存储与类图有关的元素。
对于绝大多数元素,我都建立了类来对其进行存储,而对于 UmlGeneralization
和 UmlInterfaceRealization
这两种用于表示继承和实现关系的边,我没有建立与之对应的类,而是通过将他们标记的 “父” 和 “子” 之间建立联系,具体来说就是在子类(接口)中存储了父类(接口)的指针。而父类中并没有掌握任何关于子类的信息,这也符合 java 中的情景——父类(接口)并不知道哪个类继承(实现)了它。
对于 UmlAttribute
和 UmlOperation
我直接在类(接口)中保存了他们的指针,而 UmlOperation
中又保存了 UmlParameter
的指针,从而形成了树形的结构,便于从类开始向下查找。
最后,由于 关联关系 的存储逻辑并不符合树形结构,我又单独建立了 @H_337_11@myUmlAssociation 类,并在其中存储了官方包中的 umlAssociationEnd
类,对应的类可以通过其中的 ID 找到其关联的对端。进而进行相应的查询操作。
类图部分设计的类的类图如下:(略去了不重要的一些属性和方法)
由于顺序图中查询指令的种类较少,设计到的元素也不多,所以我只将 UmlLifeline
和 Umlmessage
两个元素抽象成了类,并用 @H_337_11@myUmlInteraction 来承载这两个元素。
在 @H_337_11@myUmlInteraction 中,由于对 UmlLifeline
的查询是根据名字进行的,故用 @H_337_11@map 来承载数个 UmlLifeline
。而对 message 的查询是要求遍历输出个数的,且需要分别处理收到和发出的消息,故在 UmlLifeline
中用两个 ArrayList
来分别承载收到的消息和发出的消息。
这部分的类图如下:
状态图部分很符合图论中关于有向图的定义,所以我在实现时也是通过图的方式来实现的。此外还有两个比较特殊的类,UmlStateMachine
和 UmlRegion
其中前者是状态图的顶层模块,后者是状态图中的 ”画布“ 在本次作业中,一个状态机只有一块画布,所以我将 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 进行通信从而获得其能够转移到的状态的引用。
这部分的类图如下:
第一单元:多项式求导 经过 pre 的训练,在进入第一单元时,我已经由了架构设计的意识。在本单元中,将多项式的各个部分组织成了树状结构,这样的架构使得我在进行表达式解析的时候可以比较轻松的将输入转化为我设计的数据结构,在求导时也可以通过向下依次求导来快速获得结果。但是这样的设计的问题就是在进行表达式化简时会比较繁琐,一旦处理不好还容易出现 BUG。
在本单元中,我对 OO方法的理解还仅限于最基础的 封装、继承、多态的概念。 而通过这一单元的学习,我最大的收获是明白了 OO 只是一种方法,和其他方法比起来,是各有优劣而不是绝对优越的,所以即使在 OO 课程的作业中,适当的使用面向过程的编程方式也可以很好的化解问题。此外,我还了解了通过继承关系对类进行管理在很大程度上简化程序。
第二单元:电梯 在这一单元中,我们初步接触了多线程程序的设计。
在本单元中,主要的任务是处理多线程的安全问题。具体的电梯控制方式,我采用的是分布式控制,绝大部分操作都是由电梯线程自己根据公共队列中的信息自主决定。电梯间的竞争使得最终的结果相对优越。
本单元的学习让我对面向对象的设计方式有了新的理解,了解了类之间的沟通与协作的方式,了解了线程安全相关的设计模式(如生产者消费者模式)
第三单元:JML 这一单元我们主要在学习规格。
这单元的题目比较简单,可以使用邻接表法来存储图关系,通过图论中学习的算法来对图中的元素进行遍历与查找。需要注意的是本单元对性能的要求比较高,所以在进行查询操作时要时刻注意自己的算法复杂度。
本单元的学习让我理解了测试在 OO 程序设计中的重要性,了解了测试驱动开发的方法。
第四单元:UML 关于本单元的架构设计在上面已经解释过了,在此不再赘述。
本单元让我理解了在进行程序设计时可以采用画 UML 图的方法来进行建模,从而帮助程序编码,使编码更加快捷,正确性也会得到提高。
总结 通过 OO 课程的学习,我对 OO 方法的理解从“封装,继承,多态” 三要素开始逐步加深,依次理解了层次化设计,多线程设计,对象间通信的方法,基于规格的设计和基于模型的设计。 通过这些作业我还理解到,OO 只是众多程序设计方法中的一个,而程序设计不存在最优解,不存在所谓的 “银弹” ,在进行程序设计时我们需要根据自己的需求来选择一种或多种适合的方法来辅助自己达成目标。此外,OO 方法也不仅仅是一种程序设计方法,在管理现实中的事物时,采用 OO 方法中的一些套路也可以事半功倍。
以上是大佬教程为你收集整理的OO Unit4 单元总结全部内容,希望文章能够帮你解决OO Unit4 单元总结所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。