BUAA OO U3 总结

刘鸣翔-22371462 2024-06-17 13:00:26

正向建模与开发

正向建模开发是指从需求分析开始,按照系统开发的各个阶段顺序(如设计、实现、测试等)逐步进行系统开发的过程。出正向建模开发之外,还有敏捷开发、模型驱动开发等开发放方法。与这些方法相比正向建模开发有系统性强、文档清晰、风险可控等优点。这一点在我们的作业中夜有所体现。在第一次作业中,通过绘制 UML 类图,我们可以很清晰的规划每一个类的功能与职责,比较易于做到设计与实现相分离。由于清晰并且有据可查的设计,之后的迭代的设计与编码也将变得更加容易。此外 UML 状态图与 UML 顺序图可以补充类图中没有涉及到的设计内容,使自己的设计更加完整。

架构设计

img

这一单元作业的架构较为简单,主要类的功能可以望文生义。

  • Library 类:起中央调度器的作用,对学生、书架、借还处、漂流角等部分进行统一的管理。
  • Person 类:描述一名学生,存储了借阅的书目信息以及信用积分等信息。
  • BookShelf 类:由于书架的功能较为复杂,因此抽象出一个类来对书架中书的内容进行管理。
  • BookInfo 类:描述并管理一类图书的信息。
  • AppointmentInfo 类:由于一个预约请求还包含时间等不属于图书本身的信息,因此抽象出这个类来描述并管理预约处的预约条目。

设计思维的演进

在第一次单元中,由于并不熟悉面向对象的设计模式,我的的设计更多的考虑了实现的难度。由于没有一个大局观,导致在迭代时需要进行较大规模的重构。在第二单元的作业中,我的设计开始更多的考虑可扩展性。第三单元由于给出了JML规格,因此设计程序时更多的考虑了时间复杂度的正确性。第四单元的设计自由度较大,我的设计则是从全局出发,在易于迭代与易于实现之间寻找一个平衡点。总的来说,我在设计时考虑的内容逐渐从实现复杂度到迭代复杂度,并在两者之间达到一个平衡。

测试思维的演进

在第一单元的时候,我尝试搭建评测机来排查程序中的问题。但是由于随机数代入验证可能会造成结果溢出或结果不变,导致正确性判断的强度存在问题。此外,由于 python 对于一些表达式的形式不支持,导致数据生成存在一定的强度妥协。我的评测机也因而没能测出我程序中的潜在 bug。
在接下来的第二单元中,我吸取了第一单元的教训,不再搭建评测机,而是尝试通过代码走查的方式排查 bug。通过反复阅读代码的逻辑,我可以保证程序设计的实现,但是却难以找出一些小的笔误(比如错误的调用了名称相近的方法等),而这些小错误大部分可以在中测发现。
第三单元与第四单元的测试则结合了评测机与走查两种方式。通过认真的编码与走查给程序的质量加第一道保障,再通过评测机验证加第二道保障。在第三单元中,我接触到了 Junit 测试,但由于 Junit 的测试效率并不比之前的方法更高,因此我并没有大量的使用。

课程收获与总结

经过了一个学期的 OO 课程学习,我了解面向对象的设计模式,掌握了一些多线程编程方法以及多线程特有的bug。我对测试方法也有了新的认识,不再单纯的依赖评测机的黑盒测试,而是通过在代码走查来扩大测试的覆盖面与可靠性。我对程序设计的重要性也有了更深的认识。OO的作业量虽然比较大,但这也促使着我去改变设计、编程与测试的思路,更深刻的理解 OO 的编程思想。

...全文
26 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧