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类图(伪)
架构说明
如果把各个内部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语法
- 了解并实践了多线程编程
- 了解并实践了契约式编程
立足于自己的体会给课程提三个具体的改进建议
- 减轻刚开学时的工作量
- 减轻刚开学时的工作量
- 减轻刚开学时的工作量