OO第四单元与课程总结

OO第四单元与课程总结

正向建模与开发

与前三个单元不同,本单元我首次尝试了正向建模的开发过程,即现根据需求,首先设计出基本的项目架构(UML),再进行代码的完成。只不过我采用的是“简化版”的正向建模,起初设计的架构比较简单,各个类中的方法也没有详细列出,只是借助初步搭建的框架理清实现需求,在着手书写时再考虑相关细节。

后两次作业中,由于增加的内容较少,很少涉及到架构上的变动,因此“正向建模”这一开发过程体现的并不明显,但我仍会在着手书写前规划好新增的类有哪些,需要调整的关系有哪些,总的看来,这样做使得整个作业的完成过程是相当丝滑的。

其实回顾前几个单元的作业,除了第三单元已给出的确定的架构,我在完成的时候也或多或少地有着正向建模的影子,只不过当时的我由于急于动手敲代码而将已具雏形的架构设计抛诸脑后。实际上,在我们之后的工作中面临的开发或许正是这样:根据用户的需求,抽象出一个概念模型,描述产品的基本功能和结构,在这个概念设计的基础上,确定初步架构,并进行代码编写、测试部署等工作。

U4架构设计

本单元类图如下:
在这里插入图片描述

架构分析

本单元起初采用了一个比较好的架构,在两次迭代中代码架构并没有发生变化,只进行了方法的扩充和细节的修改,整体变动也不是很大。

Main只负责读入、解析并分发请求,调用Controller中对应的方法进行对应请求的处理。对书架、借还处、预约处、漂流角分别建类,Book用于存放书籍的相关信息,BookTable用于存放学生的个人信息(包括持有书籍、生效预约、信用分等),Order用于存储预约信息,以实现队预约是否过期的判断。

在代码编写过程中基本没有遇到过什么大问题,最值得注意的可能是只在开馆时整理一次的处理,其他的设计基本是循规蹈矩,最终大家的架构其实相差不多,都是中规中矩的。

代码设计与UML模型设计之间的追踪关系

二者的跟踪关系主要体现在第一次作业的先建模再实现,后续迭代中我采用了对于非架构改动的部分,先进行代码设计再修改UML的方法,不过现在想来,现在UML中标注需要新增的目标方法,再去进行代码完善似乎是一个更高效的方式。这样代码设计带来的变动会有所减少。

架构设计思维的演进

谈及架构设计,这无疑是整个课程学习的过程中最让我头疼的东西,一个好的架构,比如第一单元里的Poly-Mono架构,第四单元里的请求分发式架构,都为我后续的迭代带来了一定的便利。一个混乱的架构,正如第二单元中我的高耦合的架构,至今回看仍是不堪入目,在迭代的过程中也是相当的痛苦。

与此前接触的面向过程的C语言不同,像java这种从对象出发的语言,会将相当一部分重点放在设计与构造上,花费大量精力考虑如何将各个模块有机组合起来,如何利于迭代做增量开发等等,这或许正式这门课程想要真正让我们锻炼的能力吧。

第一单元:递归下降

初次接触OO正课,犹记第一次作业由于上学期申请了缓考,拖到当周周四才开始尝试完成,当时面对复杂的表达式无从下手,但在学习了递归下降的方法后,整个作业的结构也就变得清晰起来。这种层次化设计的思想将复杂的问题层层解耦,划分成若干个结构层次分明的模块,我们只需要梳理好各个层次间的嵌套、递归关系,再着手具体层次上的代码书写即可。

第二单元:多线程设计

在本单元,首次接触了多线程这一概念,基本上将所有的精力花在了如何安全且优雅地进行数据传递与共享最终也是没能做到),但这种不平衡的精力分配使我忽略了架构上的考量,将线程与对象纠缠在一起,这种混乱的结构也使得我在面对电梯调度等问题时无从下手,以致于最后写出近似于随机分配的调度方法。总的来说,这单元在架构设计上给足了我教训,如果说第一单元让我体会到了优良架构的优势,那么本单元则是让我深深意识到糟糕架构的遗患无穷。

第三单元:规格化设计

在经历了前两单元架构上的殚精竭虑后,本单元基本为我们规划出了一个清晰的架构,我们的主要工作是选择合适的算法和数据结构,高效地完成需求。作为“反响”较大的一个单元,同学们吐槽的点大多是不够规格化的语言描述,不过在我看来也只是在若干细节处的反复修改,并不会引起我的设计的大规模改动。JML这一不具有二义性的严谨的语言在实际工程中发挥的作用还是值得我们引起重视的。

第四单元:正向建模与开发

本单元借助UML,使用一个贴近真实工程的图书馆管理系统,让我们学习了正向建模的过程。与前两单元那种“隐式”的正向建模不同(至少对于我来说),本单元需要使用UML将代码实现前的设计思考具象化地体现出来,正是对我们架构思维的进一步强化。

测试思维的演进

拥有一个良好的架构是远远不够的,充足且完全的测试才是代码质量最重要的保障。

在十二次作业的测试中,基本遵循了样例与手搓样例的初步测试、评测机大规模轰炸、极端数据压力测试的测试过程,只不过在每个单元的侧重点有所不同。按照以上过程进行测试,基本可以保障代码书写的正确性(在此感谢各位大佬的评测机Orz),总的看来,这与第三单元中所提到的黑白盒测试是相吻合的。

课程收获

一个学期的OO课程结束了,写到这里我不自觉地长舒了一口气,回顾这十六周的学习,我收获了之前从未接触过的层次化设计、规格化设计等设计思维,接触了多线程等新知识,学习了图相关的一些算法,还收获了一颗足够抗压的心脏。我不会忘记调不出bug时的捶胸顿足,不会忘记六系学子特有的OO记周法,更不会忘记无私帮助我的朋友们。

这个学期与同学吐槽的最多的便是,OO这门课怎么可能只有三学分???每天的生活似乎是吃饭睡觉写OO的循环,已经完全变成OO的形状了()。但不得不说,这种高强度的作业对于个人能力的提升还是比较明显的,我的心理素质也得到了极大的锻炼,OO与OS的双重磨练让我不止一次地陷入自我怀疑,好在我能及时地从这些消极情绪中脱身,接受自己的普通,做好当下的事。

祝贺自己还算顺利地翻过了OO这一座大山,翻过这一座山,此后将会面对更高的山,不过我们又有何畏惧呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值