443
社区成员
这一单元主要考察建模实现需求的能力,正向建模对完成一个细节复杂、功能众多的程序是十分重要的,这一点在上学期的计组中就已体会到,虽然计组的知识已经忘了许多,但是“不要着急动手写代码”的教训已经捞捞记住。所以其实不只在这个单元,在前几个单元中,每次写代码前我也会进行简单的正向建模,但是这个单元让我学习到了更标准化、专业化的建模方式,如类图、状态图和时序图。
在正向建模时,我的主要步骤是分析出需要实现的类,然后分析各类之间的关系和每个类实现的功能,但从我个人的经验来看,在写代码之间的建模往往不是最终的建模,我无法在写代码前考虑好所有细节、所有关系,而且在写代码的过程中可能会发现建模时没有考虑到的问题,这会导致模型的一些修改,但是一般不需要修改整体架构。所以其实我完成作业的步骤是先手绘出类图的草图(因为我觉得在设计阶段用startUML仔细画图不方便修改,分散注意力),确定每个类实现的功能,然后写代码,在写代码的过程中会对图进行局部的调整,等写完代码确定下最终的图之后,再用startUML画出严谨的UML图,我觉得这是一种比较有效的建模方式。
第三次作业的类图
第三次作业的状态图
第三次作业的顺序图
在类图的架构上,我主要按照题目中给定的部门,为每个部门建立类,按照题目中的关系确定类之间的关系。我在第一次作业中并没有设置图书馆类或者学校类将不同的部门统合起来,但是到了第二、第三次作业,学校数量不止一个时,我不得不增加一个Library
类,管理自己图书馆的所有部门。以及一个School
类,管理自己学校的图书馆和学生。另外,为了方便校际的借阅和还书,我增加了一个LibraryUnity
类,和所有图书馆进行关联。最终得到了如上图所示的、看起来十分不高内聚低耦合的类图。
回顾四个单元的学习,在架构设计思维上确实进步了很多。
第一单元
第一个单元时虽然当时有进行架构设计的意识,但是架构设计的能力不足,无法在细节繁复的要求中提取出主线逻辑,在设计架构时思路总是被各种细节上的处理打乱,而我偏偏又有设计好架构才开始写代码的习惯,所以当时第一单元写得特别痛苦,对着指导书和演草纸冥思苦想,反复修改架构,思考了将近两天才完全设计好怎么写,然后才开始建项目写代码。但是经过了这一单元的训练,我增加了在架构设计上去繁取精的能力,另外我觉得架构设计时不用想清楚所有细节怎么实现,在没有代码完全空想的时候很难想清楚所有细节,能实现主体逻辑就可以了。在写代码的过程中思路逐渐清晰,自然就能处理好各种细节了。
第二单元
第二单元有了第一个单元的经验,而且架构设计比较固定,所以完成得比较顺利,能够比较快地设计好主体架构,并在写代码过程中进行细节填充,在第二单元中我的架构能力进一步增强,甚至体会到了完成整个从架构到实现之后的成就感。
第三单元
第三单元主要考察JML语言,架构是已经设计好的,所以在架构设计上并没有什么体验。
第四单元
第四单元进一步锻炼了架构设计能力,学习从繁杂的需求中提取出主体思路,并且学习了类图、状态图和顺序图,能更加科学地建模。
从第一单元简单的对基本功能进行测试,到第二、第三单元分情况构造数据,尽量覆盖到各种可能的情况。
前两个单元我主要依靠手动测试,自己构造各种情况的数据,但是到第三、第四个单元,手动构造再判断正确性很麻烦和复杂,所以用到了一些大佬们写的评测机,体会到自动构造数据的便捷和强大。
我觉得oo课程整体任务量还是很大的,而且每周一个作业时间也比较紧,从周二晚上放出作业,到周三周四写完,周五或者到周六测试以及deubg,整个过程还是比较紧张的。但是最终收获了很多,在强测中也取得了我较为满意的成绩,在能力和知识方面的主要收获有: