BUAA OO 第四单元总结 + 课程总结

第四单元课程着眼于UML语言,重点关注了类图、状态图、顺序图三种不同类型的图,分别从不同的视角展现代码架构设计与思考
在本单元任务要求我们实现一个图书馆系统,能够实现对于学生的借阅、查询、预约、续借、捐赠等操作,该图书馆包括书架、预约处、借还处、漂流角等不同位置,图书馆白天开馆,夜晚闭馆,在开馆期间处理学生的一系列请求,在闭馆期间整理图书,将图书按照规则要求运送到不同的位置

正向建模与开发

其实在每一单元的代码开发过程中,或多或少都运用到了正向建模与开发的思想和方法,但是每单元由于强调UML的使用,所以更加明显的体现了这一过程,我将该过程大致分为以下几个步骤:

  • 首先,我们分析题目或者用户的需求,整理出我们大致需要实现功能的最终效果
  • 之后,我们将需求中的模型抽象出来,将不同的功能整合,明晰我们需要创建的类,在这时我们可以构建UML中的类图,来帮助记录类的相关功能和属性
  • 我更习惯通过顺序图描述整个行为所需要不同类之间的协作,通过构建顺序图有助于理清整个行为的操作顺序,如在预约这一行为中,首先Library接到请求并分析其类型,然后将request传给AppointmentOffice处理,AppointmentOffice则通过StudentTable查询该Student相关的状态,决定是否成功预约,再将结果返回给Library输出
  • 之后我们进行代码的编写,完成具体实现
  • 最后通过测试,保证代码的完备性和正确性

架构分析

在这里插入图片描述
在经历这一单元的学习后,终于用上了自己画的UML类图()
本单元的问题和现实关系比较紧密,可以较为容易的抽象出所需要构建的类,由于每次迭代的内容改变不大,我在后两次的迭代中也就增加了Book类并增加和修改了一些属性和方法,所以这里以最终的类图作为展示

  • 最核心的就是Library类,在其中处理不同的请求,将各个不同的请求分到其他的类之中实现,同时实现开馆馆等操作,以该类为中心调用其他不同类实现功能
  • 几个基础的类分别是StudentBookAppointment类,分别用来记录这三者各自的属性
  • StudentTable类其中主要是Student的集合,用来记录整个图书馆系统中的所有学生,对其进行相应的检查和修改
  • BookshelfAppointmentOfficeDirftCorner分别完成了对整个图书馆细分各个功能的实现,也对应了整理图书中,图书可能运送到的不同位置

在本次作业的进行过程中,我也尝试按照要求先进行架构设计以及UML绘制,再进行代码的编写,但是由于目前我们的任务的规模较小,所需要的规格设计并不是必要的,先进行UML设计再编写代码之后再对应修改UML的过程耗费的时间较多,最终还是采取了先写代码的偷懒行为
但这并不意味着没有提前进行规格设计,我更喜欢采用简单的顺序图来梳理代码整体的逻辑,再按照逻辑顺序依次去实现相应的功能

从“pre”到“昆仑”——一个合格六系人的面向对象修养提升

再回首,不妨把目光放的再远一些,我仍记得初次接触Java,上学期的oopre,每周的迭代开发,一个冒险者的游戏,从最初简单的装备、药水,逐渐升级,再到这学期的昆仑计划,面向对象的思想逐渐改变了我编程的思路,让我在代码编写的过程中逐渐体会到了什么是架构设计,什么是性能优化…那个曾经势单力薄的冒险者,如今也已经完成了“昆仑”的攀登

架构设计思想

  • 在pre当中,我们并没有架构设计的概念,我只是随着指令数量的添加,增加着一个又一个的代码、方法,进行着重构、重写,因为那时的我无法看清整个系统的全貌,只能添加者冗余的代码和方法,被动进行着编写
  • OO U1,至今仍记得刚开学的崩溃,递归下降的推送反反复复看了许多遍还不得要领,依靠着对实验的代码的模仿,才完成了自己的代码设计,已经感受到了实验代码的高可读性,以及高内聚低耦合的设计(虽然那时还不明白这是啥意思),通过对于项、表达式,各个类的继承和使用,对词法器和语法器不同功能的划分,对架构中不同类的分工有了更深刻的理解
  • U2,多线程,神一样的电梯系统,经过这一单元的洗礼,对于生产者—消费者模式有了更深刻的体会,分发器、请求接收器、电梯、等待队列,这一完整的框架已经逐渐成型,也是在这一单元,对类与类之间、线程与线程之间的相互协作有了更深入的认识
  • U3,JML,相较于前两个单元的自行设计和完成,JML给我们天马行空的设计加入了规范和约束规格化设计更加符合于现实生活工程中的要求,而高度抽象化的JML语言也给理解带来了不小的压力,这一单元中,我看到了代码编写的规范与约束
  • U4,UML,我们需要独立完成整个图书馆系统的设计,实现正向建模与开发的全流程,相较于前几个单元而言,U4的难度并不高,但是涵盖了整个设计到代码实现,再到测试的全流程,至此,我们已经能够独立实现系统开发与设计(虽然规模不大)

测试思想

  • 最初的最为基础,本地并不进行过多的测试,通过样例简单测试功能,交给中测,出现问题后再回头寻找问题,较为依赖开放的数据点
  • 通过简单的搭建评测机,通过随机大量数据的生成,以数量战胜质量,与同学进行对拍,检测多种情况下的正确性
  • 通过Junit对个别方法进行细致的检查,构造能够保证全覆盖的样例,这一思想在U3尤为突出
  • 通过构造特殊样例、边界情况、以及大量耗费时间的指令,对代码进行压力测试,测试代码的性能是否达标,互测中hack的常用方式
  • 终极测试方法瞪眼大法!通过对每个要求、每种情况,一行行代码的寻找,试图找出bug所在

课程感悟

我们作为一个冒险者出发,收集装备和药水,完成了化简表达式的考验,在旅途中搭建起与他人的社交网络,最终乘坐着电梯,努力以较快的速度来到了昆仑山顶的图书馆,成功预约了《补给站(bushi)
面向对象课程是我在诸多专业课中收获最大的一门,不单单逐渐掌握了java的用法,对于面向对象思想的理解和对于代码规格设计的感悟定会让我终生受益
尽管旅途中也有过不少问题,也曾深夜一行行地瞪代码,但最终还是登上了“昆仑”
还是以U1中的话来结尾吧

祝大家享受OO,享受生活~
  • 39
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值