OO 第四单元总结

一、第四单元架构

本单元的内容是实现一个UML解析器。每次作业都是再上一次的基础上加入东西迭代开发。程序具有良好的可扩展性。

层次结构

MyImplementation类是顶层结构,用来处理输入,组织各种查询操作

类图结构

该部分处理的是
UmlClass
UmlOperation
UmlAttribute
UmlParameter
ReferenceType
UmlAssociation
UmlAssociationEnd
UmlInterface
UmlInterfaceRealization
UmlGeneralization
建立了MyClass,MyInterface和MyOperation类来处理UML相关的类图里的元素。
在MyImplementation类中记录所有上述类
关于查询操作类的继承操作在搜索时用了记忆化的方式降低查询复杂度

顺序图结构

该部分处理的是
UmlCollaboration
UmlInteraction
UmlLifeline
UmlMessage
UmlEndPoint
建立的MyInteration和MyLifeline类。MyInteration类中记录的包含的Lifeline

状态图结构

该部分处理的时
UmlStateMachine
UmlRegion
UmlPseudostate
UmlState
UmlFinalState
UmlTransition
UmlEvent
UmlOpaqueBehavior
建立了MyStateMachine类存储状态,状态转移等
关于关键状态的查询每次查询从初始状态出发遍历,时O(n)的做法

模型有效性检查

在MyImplementation类中实现
关于R003,用了taijin算法优化,时O(n)的复杂度

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

第一单元

第一单元的重点在于层次结构的设计,确定解析表达式的架构后不断向架构里完善,通过学习我有以下几点收获:
1.对java语言,各种容器等熟悉了许多
2.对面向对象的思维有初步理解,一些细节的点:如Object a = b; 相当于把c语言里把b的地址给a改变b也改变。
3.对层次化有了一定理解
4。由于checkstyle的加入注重代码风格,并体会到了码风优秀的好处。

第二单元

这一个单元的重点是多线程,架构的重点是生产者消费者模型的构建。这部分与OS的进程有重叠部分,OO是应用端,OS是底层。通过和一单元的训练,我对在解决实际问题的架构安排,面向对象的思维有了更进一步的理解:
1.在实际问题里分割的对象,程序就要尽量做到拆分,如电梯是电梯,电梯调度器是电梯调度器。这样在分析实际问题是更清晰。
2.按照实际问题不同对象间的关系建立方法。如人是一个对象,到达电梯有相应的方法通知电梯,电梯接收到了信号就执行移动。
3.编写程序是要考虑死锁等问题,核心还是要理清实际问题的需求,按需求编写代码

第三单元

这一单元是按照JML规格来编写代码
1.对于按照JML规格编写代码。这部分相对容易。需要注意的是在实现规格要求的基础上要注意实现的复杂度。
2.对于编写JMl规格。这部分相对难些。难点在于对要求不遗漏且简洁的描述。练习这个技能需要多读JML规格寻找方法,并不断练习

第四单元

这一单元是解析UML图,难度不大。关键在于对需求的把握,和对一些任务的复杂度优化,有道理一些数据结构和算法,如HashMap,HashSet,tarjin算法等。

测试理解与实践的演进

对于自行测了试的任务大都用的评测机。我主要的问题出现在对于边界情况或错误和程序书写的bug。对于这些解决方案是:
1.在写代码前用UML,JML规格等其他方式把各个类和方法的功能敲定,再对照书写,能够大大减少书写时反复确认,和后期debug的时间。
2.构建评测机,理由Junit等资源测试

课程的收获

1.面向对象的思维,把需求拆分成对象,实现对象的方法来完成需求
2.接到任务设计架构的经验。
3.多线程的思维方式
4.比之前更加规范清晰的代码风格,如变量命名,缩进等
5.java语言的用法

改进意见

1.调整互测的时间,如和博客作业时间结合,给学生更多的休息时间。
2.增加一点示范程序。每个单元上来都摸不着头脑,得看学长的代码才知道要干啥,增加一些引导上手代码的教程
3.对讨论区的内容进行分区整理等,高效讨论区的使用

posted @ 2022-06-27 14:22  ordered_bread  阅读(10)  评论(0编辑  收藏  举报