BUAA OO 第四单元总结

BUAA OO 第四单元总结

总结本单元作业的架构设计

文件结构

|- Checker : 负责模型有效性检查
|- Loader : 负责对各个后续要用的UML元素建模
|- MainClass : 负责启动程序
|- MyImplementation : 掌控全局,组合Checker和Loader并实现查询功能
|- MyUmlAttribute
|- MyUmlClass
|- MyUmlInteraction
|- MyUmlInterface
|- MyUmlLifeline
|- MyUmlMessage
|- MyUmlOperation
|- MyUmlParameter
|- MyUmlState
|- MyUmlStateMachine
|- MyUmlTransition
|- OperationIndex : 用来区分不同的Operation
|- StateType : 状态类型的枚举

UML类图(伪)

avatar

架构说明

如果把各个内部UML元素看成一个整体,整个架构还是十分清楚的

  • MainClass调用MyImplementation
  • MyImplementation构建容器来存放各种内部UML元素
  • Loader通过输入的外部UML元素来构建内部UML元素,这些内部UML元素中包含后续的有效性检查和查询所需的数据
  • Loader将构建好的内部UML元素装入MyImplementation的容器中
  • Checker接收MyImplementation的容器,实现有效性检查功能
  • MyImplementation实现查询功能,并向上层提供访问Checker的接口

其实还可以把查询功能与MyImplementation分离,用一个单独的Querier来实现,这样还会使得每一个类的效力更加清晰

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

第一单元

  • 将数学表达式抽象为若干个对象;根据从属关系,将这些对象构成一棵树;遍历这棵树,得到想要的输出
  • 某些对象的性质及其相似,可以抽象为一类对象,为此我们构建了"表达式"、"数字"、"变量"、"项"等类
  • "表达式"、"数字"、"变量"虽是不同类型,却有相似之处,可以进一步抽象,于是我们建立了"因子"接口

第二单元

  • 将输入作为生产者,电梯作为消费者,乘客作为物品,等候乘客队列作为托盘,辅以调度器,建立一个完整的"生产者—消费者"模型
  • 多个线程共同运行,互相协作,井然有序地完成任务

第三单元

  • 严格按照JML规格实现功能
  • 通过改进算法、设置缓存等方式来灵活实现功能,优化时间

第四单元

  • 对传入的UML对象按照自己的方式层次化建模,方便后续查询

OO方法理解的演进

本人第一次接触面向对象是在学Python语法的时候。当时的教程展示了两个程序,它们分别用面向过程和面向对象的思维和语法实现了同一功能。而当时的我并没有get到面向对象的好处到底在哪里,只是知道它将一些变量和函数抽象到类里,构了成类的属性和方法

经过四次作业的折磨(x)磨练,我自认为对OO有了更深层次的理解

当工程的规模达到一定程度时,我们已经很难用面向过程的机器思维去解决问题了,因为复杂度太高,人脑难承其重。我们要用面向对象去对工程中的元素进行建模,将它们抽象为各种对象,然后用人类的思维,自然而然地使它们相互调用,共同协作,直至完成任务。工程结束,清晰的继承结构与调用关系跃然纸上,我们仍能快速理解每个部分的功能,并在此基础上继续优化

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

我一直采用的测试策略都是:

  • 自动生成随机数据
  • 手动,或"手动+自动"构造边界数据
  • 若能完美检测正确性(如前两单元),就使用完美检测的方法,否则就与同学对拍

总结自己的课程收获

  • 学会了面向对象的编程思维
  • 学会了Java语言的基本使用
  • 了解并实践了一些设计模式,如工厂模式、单例模式、生产者—消费者模式
  • 在写评测机的过程中复习了Python语法
  • 了解并实践了多线程编程
  • 了解并实践了契约式编程

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

  • 减轻刚开学时的工作量
  • 减轻刚开学时的工作量
  • 减轻刚开学时的工作量
posted @ 2022-06-23 13:45  马又SYQ  阅读(13)  评论(0编辑  收藏  举报