BUAA OO 2024Unit4总结

BUAA OO 2024Unit4总结

00前言

oo课程的最后一篇博客,总结第四单元的架构设计以及整学期oo课程的收获。

01本单元正向建模与开发

正向建模是一种用于描述和分析系统或过程的建模方法。它基于系统的目标和行为,以及各个组成部分之间的相互作用关系,从而生成系统的模型。

本单元的任务是模拟一个图书管理系统,主要支持的用户操作有借书、预约、取书、还书、查询、捐赠等。根据指导书要求,较为自然的想法是构建图书馆Library类、学生Person类以及书籍Book类(本单元作业中课程组提供了LibraryBookId类,能很好的充当书籍类的作用,因此直接使用了官方包中LibraryBookId类)。然后为了完成各部门职能又构建了四个部门类Office(如图)。核心Library类用于接收并分发请求,然后交个各部门类处理,书籍在部门类和学生类之间流转。
在这里插入图片描述

四个部门间按要求协作,实现全部功能,如下图状态图所示:(书籍状态图)
在这里插入图片描述

02本单元架构设计

先上UML类图
在这里插入图片描述

可能看的不是很清楚,总结起来相比最开始的设计,多了一个PersonList类管理所有Person类。然后我在处理预约请求时,发现预约处要同时记录预约者、预约书籍和预约时间,如果采用HashMap嵌套会显得非常冗长且丑陋,于是我构建了一个OrderedTable类,这个类的灵感来源于日常生活中的预约情景,往往是一个表单,其中一行记录了一组预约请求的信息,于是我构建了这样一个类:OrderedTable预约表,在我的预约处里只需要记录一组预约表即可。

03本学期OO思维的演进

架构设计

  • 第一单元刚开始初始递归下降,第一次清晰感受到了抽象封装的思想,充分利用面向对象设计的三个基本特征(封装、继承、多态)实现了架构的设计。这一单元由于hw1老老实实花时间理解了递归下降,于是本单元并没有经历大规模的架构重构,反而是每一次的迭代都在轻量级或中量级。
  • 第二单元的架构设计主要来自生产-消费者模式的构建以及线程类功能类之间的关系。总结下来我当时的设计思路中着重把线程和功能实现分离开
    • 线程只用于run,只负责判断有无任务、执行任务还是结束线程等。
    • 功能实现由具体的功能类来实现,例如电梯的开门关门交给Elevator类,电梯运行交给Strategy类等。
    • 同时多线程设计要注意线程之间的同步互斥,注意死锁问题。(由于当时os还没重点讲到死锁,于是当时对这一问题理解的并不深刻,导致我第二单元强测栽了很多跟头)。
  • 第三四单元的架构设计就比较简单,但思路上不太一样。第三单元是规格化设计,讲究一个按甲方要求来,在甲方要求基础上提升性能。第四单元是UML设计,要从实现功能上解决目的,相比第三单元更考验对实际功能的抽象,从抽象层次上应该是四个单元最高的。从第三单元开始我的设计就逐渐变成先画图、再敲码的思路了,而不是像前两个单元边敲边设计,这样的变化也让我后两个单元的作业更加得心应手。

测试思维

  • 第一单元的时候没能搭建自己的测评机,反而是一直蹭别人的测评机(感谢dpo)或者自己捏造数据,不过幸好有惊无险度过了强测和互测。
  • 第二单元的时候尝试搭建了自己的测评机,相比第一单元更考验数据生成器,这一单元的测评机主要难点在于正确性检验部分。测评机的主要原理是黑箱测试,即不考虑具体代码的实现,只关注功能能不能得到实现,为此测评机需要提供大量数据并且检验输出的正确性。这一单元测评机最大的作用其实不是帮助我找到了多少bug,而是帮我hack到了不少同学()。
  • 第三单元的时候第一次体会到了白箱测试的能力。通过Junit构造数据并检测JML规格是否得以实现,本质上采用的正是白箱测试的思路。这一单元我同样搭建了自己的评测机,使用的还是黑箱测试的思想。双管齐下,第三单元得以无忧。此外第三单元也是个人认为最考验算法性能的一单元,在测试时需要考虑压力测试,这也是之前两个单元不曾有过的测试思想。
  • 第四单元临近期末我也没有再搭建测评机。不过回首本学期的所有作业,我认为搭建一个好的测评机不亚于写一份好的作业代码,搭建测评机的过程中也会帮助我发现很多不曾考虑的情况。总的来说oo这门课搭建一个测评机还是很有必要的,也很能锻炼自己的测试思维。

04课程收获

The best way to predict the future is to invent it.

伴随着这篇博客的最后一段,一眨眼oo课程即将结束了。相比上学期学完OOpre,自我认为我在结合实际场景多个类协作设计上有了提高,再说高级一点就是高内聚低耦合,说人话就是相比上学期总是想在一个类完成所功能、到这学期已经初步领会到多个类协作完成功能的优势了。还有就是成功搭建了自己的测评机,没想到能一边学Java,一边学python。算法上也了解了更多,代码风格也更加规范了。

感谢课程组的老师和助教,为我们设计出这样一门精品好课;感谢一起奋斗oo的舍友和同学,相互学习更能让自己快速的进步;感谢心理素质越来越强大的自己,没有在最痛苦的时候放弃挣扎。最后祝oo越来越好,祝我们每个人都能越来越进步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值