zoukankan      html  css  js  c++  java
  • UML单元总结&OO课程总结

    UML单元总结&OO课程总结

    目录

    • 本单元设计架构
      • 第一次作业
      • 第二次作业
      • 第三次作业
    • OO整体架构设计与OO理解与感悟
      • OO整体分析
      • OO理解与感悟
    • OO整体测试相关
    • 课程收获
    • 一点点建议
    • 线上学习感受

    一、本单元设计架构

    第一单元

    本单元要求实现的是UML类图相关的一系列查询方法,整体可以粗略的分为两个步骤:解析UMLElements基于自己的数据结构进行查询操作。而实际上由于UML类图具有一定的层次结构,所以我个人将UML类图中的元素分层处理,顶层为Class、Interface、Operation三个元素(单独构造自己的类来实现),而其他元素则间接的储存于这三个元素中。这样的设计架构有利于我在查询时的递归操作,并且便于理解各个元素的实际操作。而在分析类图的类中我在储存时对部分元素构造了不同的储存结构,其一为名字到元素的一对多映射:HashMap<String, HashSet>,其二为id到元素的一一映射:HashMap<String, Elements>。第一个是因为我们的查询方法给出的参数基本都是名字,第二个则是为了层次构造时利用parentId以及sourceId等来进行索引与查找。

    第二单元

    在第二单元中增加了对于UML顺序图和UML状态图的查询方法,类图相关方法并没有改变,所以我对三类图分别进行了解析,最后在大类中创建了新的三类图的对象。同样的无论是在顶层包含三类图对象的类中还是在三个分别的类中,仍然可以粗略的分为两个步骤:解析UMLElements基于自己的数据结构进行查询操作。顶层类中解析UMLElements仅分析元素是属于三类图中哪一个的,而基于自己的数据结构进行查询操作基本上仿照第一次作业执行(每个类中根据层次进行储存)。

    第三单元

    本单元重点在于对于UML的检查,更考察了我们对于UML结构的理解,由于我之前设计比较合理,本次作业架构基本和第二次作业一致,加入check即可。另外由于本次作业包含类较多,所以我进行了分包处理,便于check时快速找到需要的类以及便于debug。由于和第二次作业差别不大,所以下图为简化的UML类图。

    总体本单元分为三个层级:顶层查询与检测、三类图中元素层次的分析梳理与加入以及查询方法的实现。


    二、OO整体架构设计与OO理解与感悟

    OO整体架构设计

    • 第一单元

    说实话第一单元对于我来说是最折磨的一个单元,从无到很好的有的面向对象过程。前两次作业几乎没有任何面向对象思想的我在第三次作业作业中痛苦的明白了这个思想。类功能的单一性,类和类之间的协作,以及自顶向下的层级设计,在掌握了这些之后,最终完成了这次作业。

    • 第二单元

    在有了面向对象的思想后,第二单元其实变得简单了。我将代码电梯-乘客群-调度器分为三部分,每个电梯配有自己的乘客群,且每个电梯配有自己的独立调度器,只服务于本电梯的乘客群;而对于所有乘客构成的乘客群,有一个总调度器根据情况分配给不同电梯的乘客群。顶层分配,中层储存,下层执行。互不干扰每个层次只执行自己的操作,这样的架构比较符合面向对象的思想,且各个线程没有直接交互比较安全。

    • 第三单元
      这一单元我是完全按照JML架构实现的,只要选择好容器即可。

    • 第四单元
      第一部分已经阐述,在此就不赘述了

    OO理解与感悟

    面向对象思想我个人觉得在第二次博客作业中要求的SOLID原则是让我从实践到理论理解最好的过程:

    SOLID原则 翻译 个人理解
    Single Responsibility Principle 单一职责原则 类的独立性
    Open Closed Principle 开闭原则 迭代时应该“增加”而不是“修改”
    Liskov Substitution Principle 里氏替换原则 子类扩展需要不干扰
    Law of Demeter 迪米特法则 线程之间避免直接沟通
    Interface Segregation Principle 接口隔离原则 类的交互尽量清晰简单

    OO的整个过程就是在实践中前行,在错误中自省,而做的测试越完善,结果就越好;在完成代码时结构越清晰,就越不容易出错。

    OO的迭代模式在我看来基本上是:静态面向对象原则学习-进阶多线程动态面向对象原则学习-规格化理解-综合应用


    三、 OO整体测试相关

    我个人测试从以下三点出发
    1、自动生成数据对拍测试
    2、手动构造特殊数据直接测试
    3、形式化验证


    四、课程收获

    • 课程最直接的收获就是从零开始完成了Java的学习,并且能够使用Java完成一些层次化的设计。

    • 而本课程的教学目标:拥有面向对象的思想。也在一次次迭代中逐渐掌握并熟练运用。

    五、一点点建议

    • 1、作业顺序是否可以进行一些小小的改动,调整为JML - 求导 - 电梯 - UML解析,使用面向对象的规格和架构来引导学生了解面向对象的思想,在进行求导的学习可能更深刻,亦不会感到十分困难。

    • 2、弱测中测可以不公布任何数据点,转而变为公布测试的部分,便于学生来快速定位,也考验了学生自我数据构造的能力。

    • 3、实验课公布一下测试结果,不然可能觉得有点慌QAQ

    六、线上学习感受

    不会吧不会吧不会真的有人觉得线上学习对OO有影响吧2333。

    其实我觉得线上研讨课还真的更好一些,大家都畅所欲言,不会有面对面的紧张感,也更加轻松。其他的其实没有任何影响。

    结语

    这学期受疫情影响十分特殊,感谢各位老师和助教的幸苦付出,每次提交bug修复都要心疼一下助教2333。虽然被OO折磨的十分痛苦,但是也是收获满满,如果有机会我希望也能成为一名助教,贡献自己的一份力量。

    如果OO是一部番剧,此处应有弹幕:完结撒花。


  • 相关阅读:
    selenium python学习笔记---添加等待时间
    转 虫师的selenium借助AutoIt识别上传(下载)详解
    python webdriver API学习笔记
    python-assert
    selenium2.0关于python的常用函数
    pcurl 学习 http文件下载及写入空设备文件实例
    pl/sql sql窗口允许输出和允许变量替换
    Git .gitignore文件忽略
    允许远程访问MySQL的设置
    Map 遍历取值及jstl的取值
  • 原文地址:https://www.cnblogs.com/GantenOOHW1/p/13156916.html
Copyright © 2011-2022 走看看