OO第四单元总结

OO第四单元总结

一、架构设计

本单元要求实现UML解析器。

我对类图、顺序图、状态图都分别进行了建模。

public class MyImplementation implements UserApi {
    private final MyUmlClassModel classModel;
    private final MySequence sequence;
    private final MyStateChart stateChart;

    public MyImplementation(UmlElement... elements) {
        classModel = new MyUmlClassModel(elements);
        sequence = new MySequence(elements);
        stateChart = new MyStateChart(elements);
    }

我依据UMLElement在树中的深度,对它们按层次顺序解析。

  • 类图
第一层 第二层 第三层
Class, Interface, AssociationEnd Association, Attribute, Operation, Generalization, InterfaceRealization Parameter
  • 顺序图
第一层 第二层 第三层
Collaboration Interaction, Attribute Message, Lifeline, Endpoint
  • 状态图
第一层 第二层 第三层 第四层
StateMachine Pseudostate, state,Finalstate Transition Event

我还对UmlClass, UmlInterface, UmlInteraction, UmlStateMachine都进行建模,以便管理该节点下的元素。

public class MyUmlInteraction {
    private final UmlInteraction origin;
    private final HashMap<String, UmlLifeline> lifelines;
    private final HashMap<String, UmlMessage> messages;
    private final HashMap<String, UmlEndpoint> endpoints;
    private final ArrayList<String> dead;
    private boolean isDeadOk = true;

本单元要求实现的方法数量较多,但实现起来都比较简单,就不一一赘述了。


二:架构设计思维及OO方法理解的演进

第一单元教给了我最基本的OO思想,尽管第一次作业对表达式的建模还感觉有些无从下手,但是经过几次作业的学习,我已经能对自己的架构有比较深入的理解了。“为什么要这样设计?还有没有更好的设计?”问自己这些问题的时候,我都可以很清晰地整理出我的思考。

第二单元对架构设计的要求更高了。因为涉及到多线程与线程安全,在设计的时候要更加耐心地去推演。对电梯、等待队列、策略类、工具类等等的建模,不能只考虑这个类本身,更多地还要考虑与其他线程、共享对象的交互方式。

第三单元学习了JML和契约式编程。在多人合作的大项目中,如何能够使得每个人写出的代码能够组合成一个整体呢?JML的重要性不言而喻,如果不约定好方法的行为,很有可能会写出漏洞百出的代码;明确的提出要求,也对单元测试十分友好。

第四单元主要是在学习UML图的解析。模型化设计将对象、对象之间的关系抽象出来,组建成模型。我学会了深入理解UML图的本质,并采用某种数据结构将元素进行统筹整理。


三 :测试理解与实践的演进

第一个单元我还没有彻底地认识到测试的重要性,只是随机地构造一些数据,侥幸地没有产生bug。但是在第二单元中,我这种偷懒的做法让我在第二次作业吃了大亏。我没有认识到即使是小的改动,不慎就会导致严重的bug。于是我开始重视测试,自己动手编写自动测试脚本,而且会在数据生成脚本中有意识地构造边界数据,加强测试的覆盖面积。在之后的作业中,我也再也没有出现bug了。所以说,经过四个单元的学习,我已经深深的认识到,测试也是工程中十分重要的一部分。


四:总结自己的课程收获

  • 对Java这门语言有了更深的掌握

这学期写了不少代码,我不禁掌握了Java语言的许多语法、技巧,我也一直在思考怎么提高代码的可迭代性、可读性。

  • 对面向对象思想从无到有的建立

通过本课程的学习,我深入的理解了面向对象的思想。这门课不是Java程序设计,而是面向对象设计与构造。面向对象思想的建立是最为可贵的。

  • 学习了如何高效地进行测试

构造数据、数据投喂、正确性检查,我动手实现了这三个环节。不仅合理地设置了测试环境的结构,还能对测试数据、测试结果给出分析,便于debug。把脚本分享给小伙伴们不仅帮助了他人,还加强了对自己代码的验证。


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

  • 改进研讨课的机制,感觉研讨课学习效率比较低。

  • 更加细致地讲解单元测试的方法。

  • 讲一讲如何把代码写漂亮,互测看一部分同学的代码真的很累。

posted @ 2022-06-27 13:12  Xayah06  阅读(25)  评论(1编辑  收藏  举报