BUAA OO 第四单元总结

写在前面: 随着这篇博客的发布,整个OO课程也正式迎来了尾声~!从上学期OOpre初次接触JAVA这门编程语言的手足无措,到现在能够自己有条理地写出一个小程序 (真的吗),这门课还是教会了我们许多的,至少比过去的自己强了不是吗。


一、正向建模与开发

​ 正向建模与开发遵循一种自上而下、从抽象到具体的设计思路,强调在设计阶段尽可能地考虑所有可能的问题,以减少后期的修改和重构,提高开发效率和质量。

​ 在本次作业中,体现在UML图与代码实现间的联动。也就是,我们先利用UML类图、顺序图、和状态图搭建出一个大致框架,再写代码来实现这些功能。这要求了我们在设计阶段就尽可能地考虑所有可能出现的问题,以减少后期的修改和重构。(不过因为经验不足还是重构了一次T-T)通过这种提前规划和考虑,可以更加高效地开发和构建系统或软件,提高质量和可靠性。

类图: 显示了模型中的类、类的内部结构以及它们与其他类的关系等,描述系统的静态结构

顺序图: 展示了交互过程中消息的传递和响应,帮助准确地描述和理解事件之间的关系。

状态图: 描述了实体基于事件反应的动态行为,显示了实体如何根据当前所处的状态对不同的事件做出反应。

​ 其中类图是最为直观的(个人认为),最能够指导代码实现的模型。这次作业对于类图的评测也是十分的严格。(提交次数都去哪了~~)剩下两个嘛……懂的都懂,关键不在通过评测,而是在于理解的这个过程)


二、U4架构设计

(四个单元了,终于有现成的类图拿来用了,流下感动的泪水)
在这里插入图片描述
​ 这次作业要求我们实现一个小型图书管理系统,需要实现借书,还书,查询,预约,预约取书,续借和图书漂流功能。总体来说,需求比较贴近生活,比较好理解。

​ 具体地,分为以下几个主要的类:

Library: 负责将输入指令分配给各个部门,调用其它部门的方法,管理bookshelf,记录所有学生信息。

Student: 在第三次作业中加入,管理每个学生所拥有的书、借还日期、信誉积分。

BorrowOffice: 借还处,管理位于借还处的书以及一些移动操作。

Reservation: 预约处(自己瞎取名),管理位于预约处的书、记录预约指令,提供预约相关操作。

DriftCorner: 漂流角,管理漂流图书,提供捐赠、移动相关操作。

Book: 第二次作业加入,记录书号和借还次数。

​ 这个单元其实有一点点oopre的既视感,理解上没什么困难(感谢OO课程组在考期大发慈悲),实现起来……暴力循环也能过,不用像第三单元那样为性能问题焦头烂额,也不用像第二单元那样为正确性焦头烂额。大多bug都是一些细节,不过多读几遍题目要求,再浏览一遍讨论区基本就能解决。硬要说的话,可能就是每次迭代中,新的要求比较分散,有点难找(第三次作业预约书多了些限制,第一次做的时候漏掉了)。


三、架构设计思维的演进

Unit 1 表达式解析

​ 主打一个承上启下的作用,帮xie助po我们理解递归下降的思想。其实正向建模在这一单元已经隐隐体现了,Expr-Term-Factor这样一个下降结构,以及其中各种运算关系,需要我们自己画图来区分。不过,刚开学还处于一个懵懂状态,写的时候还是遇到了递归把自己递进去了的问题,有一些混乱。

Unit 2 电梯

​ 至!暗!时!刻!多线程对于我来说还是太烧脑细胞了…!在抉择实现方法时纠结了好久,最开始看不出孰优孰劣,有些细节等写到了才发觉一丝不对劲。没有在写之前确定好大致框架,导致了后面逻辑混乱、不知道从哪里下手,给了我当头一棒。这次失败的教训,给我狠狠上了一课,后面再也不敢没什么思路却直接上手写代码了。

Unit 3 JML规格

一个比较形式主义的东西。 规格描述可以更完整更精确地表述需求,能够有效避免一些争议。大体框架、各个类之间的继承关系已经给定,我们只需要在这基础上构建我们自己的类即可。可以说这个单元主要考算法不考架构。

Unit 4 UML模型

​ 一个没那么形式主义的东西。吐槽一下这个作业难度呈一个先上升后下降的趋势,给了我一种自己进步的错觉。架构的话,采用正向建模,先框定各部门的职责和之间的关系,再着手代码,能够减少重构风险。(当然,有人第一次作业忘了考虑可扩展性,导致第二次作业狠狠重构了)


四、测试思维的演进

Unit 1 表达式解析

刚刚从愉悦的寒假中缓过来,脑子着实有点不太够用。 主要的测试方法是手搓一些典型的+边界数据。典型数据,就是循序渐进:单因子、多因子;含参、不含参;含0、不含0;这样排列组合一步一步来。边界数据,把0放在各种地方,试着卡大数据等等等等。不过人的脑力终究还是有极限的,所以我不……所以还是挨了好多刀(哭)。

Unit 2 电梯

​ 这里就主要靠佬的评测机了(感恩)。DPO伟大!!还附赠分析功能,省了我好多ctrl F的时间。

Unit 3 JML规格

​ 这个单元要求junit,于是就直接黑箱测试了。喂个几千轮随机数据,从非完全图到完全图,尽量涵盖广一点的范围。包括value值也不能忘了负数,正确性方面是没什么问题的。(性能的话……哭)

Unit 4 UML模型

​ 基本上就测了一下样例,正常写不太容易出bug。麻烦的是UML的一大堆bug,只能使用万能的瞪眼法。


五、课程收获

​ 这一个学期的OO正课,虽然代码语法方面讲的比较少,但是学到了很多理论知识……以及收获各种小故事(jyp老师:一到这种时候大家头都抬起来了)

​ 这门课教会我的,大概就是从面向过程的编程思维转变为面向对象的思维,这种转变能够更自然地处理复杂的问题。也学会了从“对象”的角度出发去分析和设计程序,而不是简单地堆砌代码(其实还是有的)。

​ 结束啦~OO真的是非常典型的6系大课,你可以在任何课上看到敲OO的同学们,它也给我带来了许多的不眠之夜。不过,过程虽然是痛苦的,当交上去一片绿之后,还是会有满满的成就感……被cpu了(确信)

​ 也感谢在我绝望的时候帮助我的同学们,感谢愿意听我吐槽的朋友们, 给我带来了莫大的鼓励。谢谢!!

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值