BUAA object oriented design and construction - a fourth unit summary

BUAA object oriented design and construction - a fourth unit summary

 

(1) Summary The two unit operations architecture  

  1st job: Query UML class diagram

  The focus of the job is that I think understanding the meaning of class diagram itself, meaning they get to know each UML elements and the role of each parameter.

  In MyUmlInteraction class that implements the interface, I to class.getId () is the key value is established for all classes hashmap, information storage class diagram. Identifying a first element and a stored in the constructor. Here I traversed three times, because teaching assistants say no assurance statements before and after the order model, so I designed

  Identifying the first pass UMLClass, UMLInterface, and UMLAssociationEnd

  Second time to identify UMLAttribute, UMLOperation, UMLAssociation, UMLInterfaceRealization, UMLGeneralization

  The last time recognition UMLParameter

  This ensures that each element depends on the first layer of elements than their identification.

  

  As the class diagram is the most important element, in order to UMLClass and its related properties, methods, relationships, inheritance and implementation relationships with other elements linked to the class itself, I created a class MyClass, on the basis of UMLClass, it's relationships are recorded in it to facilitate the inquiry.

  

  I set up a property to determine which type is a class or interface, the interface can be multiple inheritance, classes can not, elsewhere both very different, so I have to use MyClass store. For the properties, methods, associated with these statistics, are returned directly to the corresponding size of the container. The top-level parent classes, interfaces, these more complex queries to achieve, basically achieved by recursively. Also I have some questions designed xxxChecked, after inquiries had once checked once set to true, so that later you do not need the extra query and recursive traversal, the result can be returned directly.

  

  The second job: Validity of inquiry, UML state diagram UML class diagrams and queries of UML sequence diagrams

  和上一次类似,我针对状态图建立了MyStateDiagram和MyState两个类,来分别记录顺序图中的信息(MyStateDiagram有些复杂是因为当初老师说起始状态和终止状态要合并)。状态的个数和迁移的个数都很好统计,后继状态的查询我是把状态看作点,迁移看作边,用图论的思想计算可达矩阵来实现的。

  

  

  针对顺序图建立了MySequenceDiagram和MyLifeLine两个类,这两个类比较简单,顺序图的三条指令都是直接统计就可以了。

  

  

  我认为这次最复杂的是类图的有效性检验。UML008是通过递归实现的,并且要把之前经过的所有类都当作参数传下去,这样如果当前类与参数中任何一个类重复,则构成了继承关系环,停止递归并返回所有环上的类。UML009本来也想递归,但是有些复杂,最后也是通过类似于图论的方式解决的。把类和接口看作点,继承和实现关系看作边,如果点到点之间有多条路径,则构成了重复继承或重复实现。

 

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

   第一单元是多项式的求导。在第一次作业中,我完全没有构造类的想法,还是集中在如何设计变量,如何构造方法。后两次由于多项式本身的特点,我构造了Expression,Term,Factor等类,但主要还是由题目的要求迫使我选择这种设计,我自己本身对于面向对象的设计还不太清晰。这次主要学习了java的基本概念,以及Hashmap和Arraylist这两个我在之后被多次用到的容器。

  第二单元是模拟电梯运行。这次我认为是最难的一次作业了,因为针对于线程的编程还是头一次。线程的debug过程非常困难,所以与其一点点debug,不如在写代码的过程中理清思路,注重细节。这次作业主要学习了同步和互斥访问,预防线程死锁以及线程的wait,sleep,notify和notifyall。进一步了解了线程的工作原理和锁的配置,而且更注重于类与类之间的信息传递与配合。

  第三单元是针对JML的理解,实际解决的是图论问题。这一单元主要是每次需求的扩充,到这里的时候我几乎不需要重构了,这是很大的一个进步,在每次写代码时都考虑一下以后的需求增加。这次还学习了Junit自动检测。

  第四单元是解析UML图。这次是针对主要的几个元素建立了单独的类,其他元素加入到这些类中当作属性。这次写起来就很顺手了,各个功能分配到不同的类中完成,最后在总合起来,思路很清晰,架构也比较直观。

 

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

  我们这学期没有互测环节,所以测试方面可能还稍显薄弱。  

  一开始不知道如何系统的测试,基本是想到什么难的测试点就测一下,最后再测一下边界条件,而且都是手动输入。后来开始用程序自动生成测试代码,比如第三单元的路径问题,就可以用程序生成几千行的测试代码,这样比较全面,也具有随机性。

  而且也不是上来就测试代码,先再次阅读指导书,明确编程目标,从头捋一遍代码,检查是否符合需求,从而保证了代码没有大的偏差。之后再通过生成的一系列代码,尽量完备地进行测试,力求覆盖全部情况。

 

(4)总结自己的课程收获

  最大的收获就是学习了java语言以及建立了面向对象的编程思想。我在这之前没有写过什么像样的c++程序,稍微大点的项目都是用的c或者python,完全是面向过程的思想。而通过这一学期循序渐进的训练,我逐步掌握了一些面向对象的设计思想。这几次作业的代码量不少,锻炼了我全局性考虑代码的能力,使我具有了减少冗余代码的意识。此外也学习了很多辅助工具,例如代码风格检查,监控线程工具、JML规格语言和UML画图工具等等,让我对java语言和面向对象有了更全面的认识。编程不是只局限于代码本身,前期的理解与设计,后期的检测与完备,辅助工具的配合,都是很重要的。

 

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

  建议:

  1. 有一些关键性问题或者边界条件的确定,助教或者老师是在某个同学的帖子中回复的,这让其他人不太容易找到。

  2. 有几次没有按约定时间发布指导书,有点浪费了周末这么适合写oo的大好时光。

  3. 理论课上的一些知识练习中没有用到,上机也不考,容易让人忽视。

  这学期的oo课程设计采取每个单元一个主题,三次作业依次增加需求和难度的方式很适合我们从易到难的学习和训练。最后感谢课程组的付出!

 

Guess you like

Origin www.cnblogs.com/cathywang03/p/11055634.html