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

北航OO第四单元——UML图解析

作业要求简析

  • 刚接触本次作业可能需要花上一会才能搞清楚到底是要我们写个啥,在这里简单说一下:
  • UML图的保存格式.mdj文件是以json文件的形式存储的,将每一个UmlElement为其parent的属性挂载到其中。可以自己随便用starUML画一个,然后看看源文件内容
  • 课程组将这一个个UmlElement单独拿出来逐条输入,以此在我们的程序中建立起UML类图
  • 然后输入查询指令,查询有关于UML图的各种信息并输出

作业思路及架构

  • 由于许多大作业、试全部堆在这几个周,所以没有对本单元作业进行良好的架构设计,整体的思路仍然停留在第一单元水平,十分惭愧

  • @H_629_8@mUmlGeneralInteraction

    • 此类是与官方包进行交互的类
    • 内部属性主要是几个管理器和一个合法性检查器@H_629_8@mchecker:
      • 类图管理器:@H_629_8@mClassmanager
      • 顺序图管理器:@H_629_8@mCollaboration
      • 一组状态机管理器:@H_629_8@mStateMachine
    • 构造函数遍历所有要传入的UmlElement,根据其类的类型调用不同的add****函数,讲不同类型的UmlElement传给相应的管理器
    • 询问时则调用相应的管理器的相关方法
    • 当官方包调用检查方法时,调用@H_629_8@mchecker中的响应方法
    • 注:
      • 管理器的查询方法、合法性检查器的检查方法的返回值最好有一定的普适性,从普适性的返回值到官方包要求的特定返回值的过程在@H_629_8@mUmlGeneralInteraction中进行,这样可以提高代码可拓展性
      • 然而由于时间关系我并没有这么做 (0ω0)
  • 建模思路

    • 对类图、顺序图和状态机都是采用去建模的,尽可能地将子元素挂载到父元素节点下,从而将各个层次的方法分开
    • 比如@H_629_8@mClass和@H_629_8@mInterface继承自抽象类@H_629_8@mClassOrInterface,其中包含了@H_629_8@mOperation、@H_629_8@mAssociation、UmlAttribute等,@H_629_8@mOperation内再保存了UmlParameter
    • 这样可以将各个层次的功能区分开,下级看不到上级,也不应该虑上级
  • 类图管理器@H_629_8@mClassmanager

    • 类图管理器保存了一组@H_629_8@mClass和@H_629_8@mInterface
    • 虑到UmlAssociation的双向性,不方便同时挂载到两个类或接口中,因此将Association在树中的层次提高一层,保存到@H_629_8@mClassmanager中,需要的时候查询即可
      • 缺点:类或接口不知道自己有什么Association,设计较不合理(但是为了赶时间所以就 (0ω0))
  • 其他:

    • 顺序图和状态机也是差不多的道理,不再赘述
    • 第四次作业总体比较简单,但是十分复杂,代码量比较大,写代码时要一再检查好要求

OO方法的演进过程(实际是吐槽)

  • 第一单元的方程求导应该是OO思想提高最快的一个单元。由于上学期上过Java课,一些基础的面向对象变成思想提前已有接触,但第一单元各个环节巧妙地设计还是让我很不好受。前一次作业的设计如果不能做大极大的可拓展性,大概率会被下一次作业逼着重构

  • 很遗憾的是,从第二单元作业开始我觉得我编写面向对象程序的能力已经没有很多提升了。第二单元主要训练了多线程,巩固了第一单元的思想;第三、第四单元的代码练习过于简单算法的重要性超过了设计,因此并没有把精力投入到架构设计的训练中了。

  • 我认为第一第二单元的设计是最好的(然课程设计的时候可能十分困难),就是需要保证自己程序有足够的可拓展性,后两单元的作业在这方面做的过于简单了,因此就让人忽视了对架构的设计

  • 另外,然学习了许多设计模式,但是除了几种简单的比如单例模式、工厂模式等,很难应用到自己的代码中

测试方法的学习历程

  • 这学期的一大收获就是学会了如何编写测评机
  • 第一单元由于有python现成的库计算正确结果,也可以根据正则表达式自动生成测试数据,非常方便编写自己的测评机,独立实现代码测评。
  • 但是当不知道如何编写标准程序,就陷入了不会写测评机的困境。一直到第四单元我才知道一种东西叫做对拍机。他的思路非常简单,将三个人及以上的代码放到一起跑,比较结果的差异即可。这样,我们就只需要负责编写自动生成测试数据的程序即可
  • 另外,我还学习到了JUnit的使用方法,对自己的每一个方法单独测评,可以“每一个方法体会一遍AC的快感”,体验也是相当棒的

课程收获:

  • 建立了面向对象编程的思想,在编写代码时首先想到的是低耦合性、功能分层、可拓展性等,现在看到不符合面向对象编程的代码甚至会恶心(x)
  • 学习了各种测试方法
  • 数量掌握了Java的使用方法
  • 编写之前先设计,设计包括功能设计、权限设计、接口设计、交互@R_801_10420@。设计做好后编写代码是水到渠成的事情。我认为这也是一条极大的收获

改进建议

  • 加大第三单元和第四单元难度,最好像第一单元那样保证“前一次作业不好好设计,后一次作业大概率要重构”。逼迫同学们思更优化的设计
  • 减少算法在作业中的占比,比如第三第四单元海量的图算法(然大部分都是简单的遍历),取消一切验算法效率的测试点。后两次作业完全被写成了Java语言算法编写,而不是面向对象程序设计
  • 一单元作业结束后,可以讲解一下标程的设计思想,这样可以让同学们学习到足够优秀的样例,我认为仅靠讨论课是不够的,就我们班来看,同学们的表达能力不足以清晰的解释自己的算法。
  • 讲解一下最后一次作业的官方包的设计,我认为这是很好的学习样例
  • 理论课的重复内容有些多,就是感觉同一个单元的三次理论课基本讲的都是相同的东西

大佬总结

以上是大佬教程为你收集整理的北航OO第四单元——UML图解析全部内容,希望文章能够帮你解决北航OO第四单元——UML图解析所遇到的程序开发问题。

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

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