BUAA OO 2024 Unit4博客总结

正向建模与开发

正向建模是指从需求出发,通过一系列的设计模型逐步细化,最终生成代码的过程。开发是将设计模型转化为实际软件的过程,包含编码、测试、部署、维护等阶段。正向建模与开发是从需求分析到系统实现的一种开发方法,强调从问题的角度出发,通过建立模型来描述系统的结构、行为和关系,并将这些模型转化为可执行的代码。

本单元的作业完成的主要流程如下:首先进行需求分析,仔细阅读作业指导书,将作业需要实现的功能进行总结归纳;然后进行结构设计,通过UML将结构进行图形化表达;最后进行代码实现,并在实现了以后再对结构图进行补充修正。

特别需要提出的是:作业指导书在编写时逻辑不太清楚,有时一个流程的限制条件需要在指导书的不同部分才能找齐,这对于需求分析造成了很大的阻碍。

本单元的架构设计

类图

关于类的设计构思

本单元类的架构我设计的十分简单,因为从功能上看,图书馆各个部门似乎只是不同的书架而已,只需要实现书籍的移出和增加即可,因此,对于这些部分我各自采用了HashMap进行实现;而官方包给出的LibraryBookId类已经很好地实现了book需要实现的功能。另一方面,事实上,书籍的借阅预定归还都应该由图书馆的管理处进行处理,考虑到只需要进行一个单元的作业,我就将这些东西全部放在了Library一个类里,只有当一个HashMap难以包含全部需要存储的信息,我才会单开一个类。在作业中,预约处的相关信息,我单开设了一个OrderInfo类进行管理。

类图和代码

由于我的设计比较简单,因此类图的大致框架是好实现的。在一开始时,我只设计了library一个类,方法也没有填入参数,Library类的方法提供了对main的接口,用于对不同输入进行处理;而内部则有若干private方法,用于处理不同种类的请求;此外,还有addBook和removeBook方法,用于书籍在不同位置的移动。

在设置了整体框架后开始完成代码,完成的过程中新增了一个OrderInfo类用于管理预约处的相关信息,新增了一些类的内部方法。

完成以后,回到类图给方法添加参数,并把新增的方法补上。

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

第一单元

第一单元作业整体上磕磕绊绊但最终顺利完成。其中第二次作业中基本的Unit设计思路出现了问题而我又狠不下心整个重构,导致后两次与优化分基本无缘。这给我后面的作业留下了警示:谨慎构思,及时回头。而第二次作业的bug由于没有看清本质,造成了多个衍生bug以及后续第三次作业的同质bug,这对我来说是一次宝贵的经验。此外,在阅读讨论区以及往年博客时,我也发现了自己作业中对深拷贝浅拷贝思考不足,知道了应该坚持不可变对象的设计原则。

第二单元

第二单元是接触了java多线程的单元,这一部分三次作业我对于同步控制都多少有很多疏忽。我主要设置了一个类requestQueue作为共享变量,设计架构相对第一单元有所成熟但仍然不太优秀,导致对于电梯的调度策略没办法采用更加优秀的设计,而是采用了平均分配的策略。在这一单元的学习中,我了解了生产者-消费者的设计模式。

第三单元

第三单元是JML规格化设计,架构方面没有自由发挥的空间,更多的是算法性能优化。不过官方提供的架构设计仍然对我有一定的参考价值。

第四单元

第四单元是UML正向建模与实践。到了这一单元我才有恍然大悟的感觉,总算明白了正确的设计应该是怎样与代码实现相互协调的。因此本单元的类设计我更加关注类的需求与功能,在实现上思路更加清晰了。

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

  • 第一单元开始时,测试方面没有相关的经验,只是随机进行测试,但是在强测和互测中受到的攻击,让我明白了临界数据的重要性。
  • 第二单元的互测与自测中,我充分考虑到临界数据的重要性,在互测中取得了小成功,但是对于多线程的bug,我没能很好地解决,只能重复进行大量测试,但是仍然存在bug没能发现
  • 第三单元的单元测试给了我全新的思路,搭配已经给出的JML规格,我可以轻松地写出相应方法地test方法,但是对于自己编写的方法,事实上在设计时就没有对方法构思过明确的规格,也自然地难以编写测试方法
  • 第四单元仍然采用原先的测试思路,进行随机测试,临界测试等

课程收获

一学期的OO课程使我受益匪浅。总的来说,《面向对象设计与构造》是一门富有挑战性的课程。它向我们展示了一种全新的思维模式——面向对象的思维,并通过四个单元的迭代开发,将这种思维付诸实践,提升了我们的面向对象的理解,加深了我们对面向对象的认识,锻炼了我们使用面向对象解决问题的能力。

通过学习,我提高了架构设计思维:从第一单元的层次化设计,到第二单元的多线程设计,我学会了使用面向对象思维设计复杂的架构。从第三单元的规格建模,到第四单元的 UML 建模,我学会了使用建模语言和建模工具对设计进行规范化。

通过学习,我提高了测试思维:功能代码与测试代码总是相辅相成,共同进步。虽然测试的核心无外乎数据生成和评测这两部分,但构造高质量的数据总是难点。为此,我们需要反复阅读题目要求,确保数据生成器生成的数据既能满足题目要求(不超出数据范围),又能覆盖每一种情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值