BUAA-OO-Unit4总结

BUAA-OO-Unit4总结

正向建模与开发

在前三个单元的学习过程中,我感觉在完成作业时,已经有涉及到正向建模的相关内容,只是没有严格遵循相关规范来完成。在本单元中,我们需要先根据指导书中描述的需求绘制出UML类图、状态图以及顺序图,确定好程序框架后再去编写相关代码。
在完成本单元的作业时,我首先根据需要构建了Library类,将此类模拟成图书馆,再在其中构建所需的存储书籍的地点类,请求发送到Library中之后,在图书馆中发送给相应的地点处理请求。存储书籍的地点类一般都采用HashMap容器来存储书籍相关信息,以便于后续对书籍的存取操作。
然后,在StarUML中绘制相关类图、状态图以及顺序图。一开始由于对startUML的使用并不熟悉,导致会出现许多低级的错误,画图的速度也比较慢,在类中增加属性和方法这一块耗费了大量时间。

本单元作业的架构设计

本单元的UML类图:
在这里插入图片描述
在阅读指导书之后,我采用自顶向下的思想,构建Library类负责处理所有发送来的请求,Library类由多个可存储书籍的地点类构成,请求发送到Library后,根据需要调用其中的方法来完成各个地点中图书的转运。值得一提的是,在完成预约请求以及书籍借阅过期判断时,我选择分别将书籍封装成Reservation类和Ub类来完成相应请求。
具体架构介绍如下

  • Library类:由多个可存储书籍的地点类构成,主要功能是接收请求,处理请求。
  • Bs类:模拟的是书架的功能,存放书籍的地点之一。
  • Bro类:模拟的是借还处的功能,存放书籍的地点之一。
  • Ao类:模拟的是预约处的功能,存放预约的地点。
  • Reader类:模拟的是读者,存放Ub的地点。
  • Reservation类:封装预约请求的书籍信息、预约者信息、预约过期时间信息,构成Ao类,用于完成预约请求
  • Ub类:封装的是书籍信息、借阅过期时间,构成Reader类,用于完成借还书籍请求。

代码与UML模型设计的关系
最终的UML模型与代码设计基本一致。

OO课程架构思维演进

第一单元
  • 由于对面向对象设计与构造思想的不太熟悉,第一次作业采用了面向过程的编程步骤。
  • 在第二次作业中对架构进行了重构,通过递归下降解析表达式,完成了层次化设计的思想的应用和工程实现,真正运用了面向对象的层次化设计思想。
第二单元
  • 第五次作业第一次接触了多线程的代码编写方法及其思想,但对死锁、互斥以及同步的概念仍然较为模糊。
  • 通过第六、七次作业学习了电梯调度的方法,对如何避免死锁、实现互斥和同步有了更加深入的理解。
第三单元
  • 学习了JML
  • 通过自己编写Junit测试方法,学习到了许多测试技巧。
第四单元
  • 学会了先设计架构,在上手编写代码的工作流程。
  • 学习了UML类图、顺序图、状态图的绘制。

OO课程测试思维演进

第一单元

主要通过手动构造特殊的数据点来实现测试,缺点是覆盖不全。

第二单元

主要通过自己编写随机生成的数据进行测试,然而在本地随机测试由于其随机性,并不能很好的测出多线程问题的bug,还需要手动构造一些极端数据来进行压力测试。

第三单元

通过自己编写Junit测试,可以有效避免bug。我通过构建一个由30个节点构成的图来完成测试,通过每次加减边测试其中方法的正确性。但是还需要注意时间复杂度的问题。

第四单元

本单元的测试主要还是通过手动构造样例、大量随机数据测试来完成,由于本单元并不复杂,所以测试还是比较轻松的。

课程收获

终于结束了整个OO课程的学习,回望这一学期的学习历程,我感觉自己的收获还是很丰富的。

  • 通过OO的学习,我初步接触了面向对象编程的思想,在编写代码时不再像从前那样脑袋一团乱麻,想到哪写到哪,而是先设计好各个类,想好每个类的功能,再把代码补全即可,瞻前顾后的现象也减少了,只需要完成各个类的功能就行了。
  • 学习了多线程编程,学会了解决死锁、同步互斥等问题的方法。
  • 通过大量的训炼,代码能力得到了很大的提升。

最后还是要感谢各位老师、助教以及陪伴我整个OO学习历程的学长学姐和同学们,感谢各位的陪伴和付出!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值