BUAA OO 第四单元 UML

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

正向建模开发,是指从需求到设计再到实现的开发过程。本单元要求完成一个图书管理系统,其中要求繁琐,所以需要先理清思路,确认图书馆的每个部门以及部门执行的任务,做出代码的基础架构以及UML图等,而后进一步完善内部功能并debug等。
(本单元最初的宗旨是先画UML图再根据图写代码,可惜本人搞反了,因为感觉照着图写代码实在太难,很容易会忽然加进去一个方法然后再改图,而且遇到需要重构的地方会更麻烦,图和代码一起大段修改甚至全部remake)

架构设计

以hw13和hw15的UML类图为例。(乱的一p)
在这里插入图片描述
在这里插入图片描述

  • 拿到hw13的时候,为了更加“面向对象”一些,降低耦合度,我选择对每个管理员都开一个类,专门存储管理员拥有的书和管理员对应的操作,并将这一思路延续到hw14。
  • 我对每一种书设计了一个BookPair类,存储每本书的种类(category),名字(name),hw14里还加进去了学校(school),通过HashMap<BookPair, Book>存储所有书。
  • hw14加入了学校,每个学校有一个图书馆,且不同学校学生可以重名,所以我对每个学生设计StudentPair类,存储每个学生的学校(school),学号(studentID),在每个library里设计HashMap<StudentPair, Student>存储该校学生信息。

hw13相对简单,只涉及一个图书馆,稍微难一些的就是订阅书籍的处理。
hw14难度暴增,增加了校际借阅和新书购入的需求,且需要考虑的情况非常非常多,好在后来修改了指导书和数据点强度,难度降下来了一些。刚开始写hw14的时候心里想“这和重构有什么区别”,慢慢写下去之后还是从中摸索出了一点规律。也好在hw13不是很难,代码可扩展性还算好,需要重构的地方不是很多。
因为从一个图书馆变成了好几个图书馆,我开设了DealClass类,有点参考电梯单元的设计架构的意味,用来对所有的请求进行初步处理,如果不是borrow请求就分配到对应学校的图书馆,由图书馆内部处理;如果是borrow则进行进一步判断:本校有对应的书的余本则由本校图书馆内部处理,如果没有则暂存为校际借阅,当下一条输入请求的日期更改时再对所有的校际借阅请求进一步筛选。新书购买则相对容易一些,我在每个图书馆里加入了HashMap newBooks<BookPair, Book>(终究是架空了purchasingDepartment的一部分功能),在每个整理日进行处理即可。
hw15让我刷新了对oo难度的认知(?),加入对书籍借出时间的判断,我在Student里加入了HashMap bookDate<BookPair, Book>存储学生拿到书籍的时间,在return时进行特判即可,十分钟搞定(hw14足足写了三天(悲)

在四个单元中架构设计思维的演进

  • 由于上学期选过oo先导课,对架构多多少少会有一点主意,所以第一单元里乖乖按照递归下降和训练给的代码写,虽然中间出过一些问题,好在没有经历大的重构。
  • 第二单元课程组给了官方包,所以就按照官方包中的接口等直接实现。电梯调度必然涉及多线程的交互和调度算法(但是调度算法摆烂了),因此第二单元的架构尤为重要。
  • 第三单元的规格化设计虽然读起来很费力,但是几乎把架构都写好了,不需要再额外设计架构,相对还是省力一些。
  • 第四单元真正体现出了架构的重要性,如果最开始设计不好的时候再往下写几乎只能重构,所以我认真思考了代码的架构,尽量增加可扩展性,降低重构的风险。

在四个单元中测试思维的演进

(这部分是我这学期做的最不满意的一部分,也是最后悔的一部分)
笔者太懒,而且做作业的心态也不正确,只要过了中测就会忍不住想摆烂,没有多做测试,几乎每次的作业都有很多细微的bug,改起来其实只需要几行,但是在写代码的时候就是没有仔细考虑到。
第一二单元写完后会自己捏一些数据来测,也确实测出了一些bug,至少每次都会进互测,但是C房偏多,AB各进了一次;第三单元写完之后感觉捏数据太麻烦,遂摆烂,也没有采用大佬们的评测姬,结果两次没进互测,心态爆炸;第四单元才开始使用评测姬辅助debug,不得不说评测姬真好用(真香),也是在最后一次作业拿到了第一次强测AC。
日后的开发里或许更应该“以最坏的恶意揣测用户”,考虑尽可能多的情况,满足更多的需求,避免出现”顾客要了一杯酒,酒吧就炸了“的情况。

课程收获

oo结束了,写这篇博客的时候整个大二也只剩下最后一科马原考试。这门课程里我收获了很多,学会了递归下降,初步使用多线程编程,学会规格化设计并编写简单的JML语言,还有类图、时序图、顺序图等,也学到了好的架构是成功的开始,以及一定要培养好的测试思维。而且多人合作的成果一定会比单枪匹马一通乱撞好得多。希望oo这门课越来越好,希望在以后的学习里我能有更丰富的收获。
门课越来越好,希望在以后的学习里我能有更丰富的收获。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值