OO第四单元博客作业

OO第四单元博客作业

本单元所实践的正向建模与开发

正向建模和开发,是很有效的手段。在本单元中,我们实现了一个图书馆模拟系统,包含读者、各类管理员、三类借阅和预约规则不同的书,依托UML的架构设计能力。以下是我完成作业的流程:

  • 设计架构️
  • 绘制草图️,画出原始的 UML 类图和关键流程的时序图,以及核心状态的状态图
  • UML 图和草图的基础上高效编码
  • 在测试并 debug 的过程中修改架构设计和 UML

正向建模开发,练的是“内功”。在大型工程中,边架构边开发乃至逆向工程是完全不可取的。在我们作业中,不采用正向建模开发可能能让我们快速完成某一次作业,但决不利于理解和维护,也很难基于现有代码进行开发迭代。

本单元作业的架构设计

架构:以 Library 为核心类,内有各种图书(Book 类)和学生信息学生类 Student,还复合了各类图书管理员(借还管理员(LoanReturnLibrarian 类),整理管理员(SupplyDepartment 类),预定管理员(BookLibrarian 类)),以及图书管理处(PurchasingDepartment 类)和自助机器(SelfServiceMachine 类)。此外还有顶层封装类 BookManager 以及辅助类 Message(负责传递借书请求和书籍副本)。

  • UML 类图

UML类图

  • UML 状态图

UML状态图

  • UML时序图
    UNL时序图

追踪关系比对分析:

在迭代的过程中,虽然需求暴增、约束很多,但是依靠第一次作业建立的良好架构,拓展并不困难,但是要注意和UML图的一致性,并且点面结合进行测试,以提高代码质量。

状态图我画得十分精简,将书的状态抽象成在图书馆、在运输中和在读者手中,主要对应 BookLibraryPurchasingDepartment、和 Student 间的状态转移。这样描述书的好处是精简、抽象、不易出错,坏处是编码的时候还要具体分析画草图,可能会造成功能实现的一致性问题。

流程图我设计得稍微复杂一点,涉及到 StudentLibraryBookLibrarianPurchasingDepartment 的消息传递。可以看到,BookLibarianPurchasingDepartment 的消息传递高度一致,当读者预定后发现本校没有根本没有这本书(包含已经出借的和在架上的)的时候,就会同时发出借阅请求和购书请求。这样一个类负责预定书籍,一个类负责采购书籍,相互协作,完成了功能的实现,彼此仍然保持相对的独立。

架构设计思维的演进

从上手直接写,再到构思后写,再到先构思,写 demo,再着手写,到利用 UML 工具,对指导书的要求进行充分抽象之后再写。我从掌握“一人敌”的方法到掌握“万人敌”的方法,学到了面向对象程序设计的精髓。在以后的实践中,我将更加充分地将这种思维运用到自己的编码中。

第一单元没有架构思维,因为递归下降的模板是现成的。第二单元电梯,因为 Look 算法和影子电梯几乎就是最优解。第三单元代码翻译填写,也不太需要架构思维。只有第四单元,面对需要自己用 UML 绘就未来的代码大厦的难题,必须总览全局,搞清要求,仔细设计,才能涉险过关。故通过第四单元的训练,我的架构设计思维才真正成形。

测试思维的演进

有赖于 OO 微信公众号的教程,我从第一单元开始就开始着手搭建自己的评测机。虽然 2、4 单元更加依赖大佬的评测机和具体的数据点,但毕竟还是锻炼了自身的能力。

我的测试思维的演进是增量型的。一开始我只会单纯的暴力测试,修改 bug。在电梯单元我根据具体的功能构造了强度足够高的测试点(如仅有换乘可达的数据点)。在第三单元测试中我通过 JMLJUnit 接触了模块化测试。这一单元无论是写对拍器的能力和测试思想均有很大提高:评测机的代码接近 1000 行,同时了解了什么是白盒测试、黑盒测试,以及功能测试、集成测试、压力测试等。在第四单元测试中,我以更清晰的逻辑,体验了什么是正向化设计下的代码测试。

课程收获

在写下这篇博客的之后,我仍然在完成 OO 最后一次课的作业,试图理解纷繁的顺序图和它与其他 UML 类图的关系。是的,OO 就是一个这样快节奏的课程,每一次的作业,就像是无声的行军号令,只见到战士衔枚疾走,奔向刀光剑影的血腥战场。中测、强测、互测,我们早已身经百战;清晨、黄昏、黑夜,我们只争朝夕,奋力前进。

在 OO 的最后一次课暨 OO 课程颁奖典礼上,印象最深的是吴际老师的的这样一句话:“OO 课用心讲好每一个故事”。是的,从解好一道算术题,到设计好电梯的调度算法,再到构建起庞大的社交网络,再到抽象层次的架构设计,还有研讨课和交流群的思维碰撞,共同疏导微信群中的烦躁情绪……我们共同经历了“最美丽的 OO”课程,克服了“高原课程”所带来的“高原期”,真正做到了从哪里跌倒,就从哪里跑起来,拥有了扎实的学科素养和百折不挠的钢铁意志。

OO 虽然没有最终的期末考试,但处处充满对我们学习能力的考察和人生的考验。如何平衡好学习和生活,按时精准完成完成每一次的作业,无疑极富挑战性。虽然不是每一个人都能成为 OO 课程的英雄,但大家都是默默为 OO 课程添砖加瓦、付出心血和汗水的战士。每一次闪耀着思维光芒的课程与研讨,每一次看似波澜不惊实则暗流涌动的上机,每一次精心设计和架构,每一次认真完成的有效作业,每一次精益求精的细致优化,每一次刻苦求索的 bug 修复,都是我们 OO 课程成长之旅的重要组成部分。在这样一种近乎残忍的课程修炼中,每一个人都最终成为了自己的英雄,拥有了属于自己的光明未来——无论是专业技能方面还是人生发展方面。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张翅飞翔_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值