本单元作业最大敌人:
CheckStyle
。
Checkstyle found no problems in the file(s)
(1) 总结本单元作业的架构设计
第一次作业
-
第一次作业要求实现UML类图的解析。
-
最大的麻烦在于,UML类图中诸多元素的输入顺序是没有限制的。比如,一个类
class1
的属性attr1
有可能在类输入之前就输入了,这种时候没法将attr1
及时“关联”并保存到class1
之中。(此处的“关联”不是UML中的专业术语,下同) -
对于此,有两种处理思路:
-
先保存所有元素,再针对每类元素分别与其上层元素进行关联。
-
采用多次扫描,自上而下分别保存并关联处于不同“层次”的元素,确保每类元素保存并关联时,其上层元素已经被保存并可被直接调出。注意,这里说的“层次”并非一般理解中由包含、所有关系确定的层次,而是根据元素的
parent
、source
、target
等属性的引用关系而确定的层次。举个例子:-
比如
Association
的属性end1
、end2
,分别指向了两个AssociationEnd
。要想建立起对应的两个类(接口)之间关联关系,需要先保存两个AssociationEnd
,才能在保存Association
时根据end1
、end2
直接调出两个类(接口),随后再建立起关联关系。 -
在某种意义上,可以称
AssociationEnd
为Association
的前序元素。
-
-
-
我的实现采用了第2种方法,总共三次扫描,每层扫描中处理的元素类型如下:
第一层 | 第二层 | 第三层 |
---|---|---|
Class, Interface, AssociationEnd | Attribute, Operation, Generalization, InterfaceRealization, Association | Parameter |
-
本次作业的UML类图:
第二次作业
-
第二次作业要求实现UML时序图和UML状态图的解析。
-
整体的思路与第一次相同,但在分析了UML状态图的元素层次之后,发现原先的三次扫描不够用了。。。不过:
第1层 | 第2-1层 | 第2-2层 | 第2-3层 | 第3层 |
---|---|---|---|---|
Class, Interface, AssociationEnd, Interaction, StateMachine | Attribute, Operation, Generalization, InterfaceRealization, Association, Lifeline, Region | State, Pseudostate, FinalState | Transition | Parameter, Message, Event |
-
此处表格展示的和实际实现的略有不同。实际实现中有
CheckStyle
梦魇伴随左右,为了保证每个方法(每次扫描)在60行以内,只能在不违反逻辑关系的前提下,将第2-1层中的部分元素放到第2-2、2-3层的扫描中。 -
本次作业的UML类图:
第三次作业
-
第三次作业涉及模型的有效性检查。
-
核心内容是图的
dfs
算法,架构设计与第二次作业相同,此处不再赘述了。 -
本次作业的UML类图:
-
最后,经历了与
CheckStyle
之间漫长的相互折磨后……-
-
500行以内?绰绰有余嘛。
-
(2) 总结自己在四个单元中架构设计及OO方法理解的演进
- 回顾理论课,面向对象的设计思想是重中之重。
- 在这四个单元的作业中,架构设计是落实面向对象思维的直接体现。
- 具体的架构设计在以往的博客作业中已经详细阐述了,这里不再搬运。我认为最核心的是,在四个单元设计与实现的过程之中,我深入理解了、应用了面向对象这种思维模式,并掌握了多种设计模式。
(3) 总结自己在四个单元中测试理解与实践的演进
-
第一、二单元,主要采用了黑盒测试。能力一般,水平有限,笔者不会搭建自动测评机,于是只能根据对于所要实现的需求的理解,预判存在
WA
或TLE
隐患的边界情形,并有针对性地手动构造数据并加以测试。 -
第三、四单元,主要采用了单元测试与对拍大法。同样使用的是手动构造的数据,和同学进行对拍。
-
此外,我还做了充分的样例测试,以及基于历史强测数据点的二次测试。
(4) 总结自己的课程收获
面向对象悖论:面向对象让人无暇面向对象。
我认为这门课最重要的是面向对象的思想,远比编程本身有价值。
(5) 立足于自己的体会给课程提三个具体改进建议
我……怎么这么紧呢你,多给几天不行啊……(非原创,此处为转载)
- 这门课默认你上来就熟练JAVA。不会?假期自己学去。
- 但为什么?作为春季学期的课程,挤占同学们的寒假时间并不妥当。不得不说,这为同学们日后互联网公司的加班生活提供了提前适应的绝佳机会。
-
关于课程内容:由于绝大多数同学没有JAVA基础,建议取消第一单元,用四周时间让同学们学习并熟练JAVA。一方面,不给假期施加额外的压力;另一方面,也可以确保课程难度循序渐进,不会违反认知规律。
-
关于指导书:希望能就边界情形描述得更加清晰,避免同学们去讨论区提问其中模糊之处。
-
关于课程网站:建议OO课程网站上的讨论区,看完的帖子可以显示为灰色。结合上一条食用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。