第四单元文档

[OO 第四单元] 单元总结

正向建模与开发

OO 第四单元围绕建模与实现一个图书馆系统来让我们了解、学习正向建模与开发的流程。正向建模与开发通常是指一个完整的软件的开发过程。主要是“建模语言(如UML) – 设计 – 具体实现”这样的一个从头开始设计的开发过程。课程组意图让我们通过这一单元的图书馆系统了解 UML 类图、状态图、顺序图并且利用正向建模完成这三次作业。

实际上,我并没有完全按照正向建模的方式实现作业,因为从第二次作业开始,如果直接开始建模会非常容易出现输出难以符合要求的情况,甚至会因为频繁的改动导致需要重构。我是先将每一个类所需要实现的功能想出来,并且对于每一个功能,我都会先大致思考消息传播的路径,这种做法可以让我思路更加清晰。具体实现的时候会根据需要选择不同的容器,也会对之前的构思做出调整。

架构设计

本单元作业的最终架构如下图:
在这里插入图片描述

具体实现上,我将每一个管理员都建了一个单独的类,这个选择从后面两次迭代开发看来是较为正确的,也让我在三次作业中没有经历痛苦的重构。总体设计上,对于每一个类,尽可能负责自己独自的功能,减少程序的耦合性。因为是先思考消息传播路径后实现因此类图、状态图、顺序图之间保持一致,在评测过程中也没有出现 bug。

本单元三次作业之间的迭代开发上,我在第二次作业的迭代过程中实现的非常困难,因为对于各种输出顺序和某些功能在实现过程中的具体判断顺序的理解与指导书不一致,导致我在这一步被困住了很久,在理顺之后的具体实现则没有花费多少时间。

架构思维

  • Unit1:这单元是围绕着符合 BNF 形式化表示的表达式的解析与化简展开,通过三次迭代开发的作业来考察我们的层次化设计能力和面向对象程序设计中有关接口、多态等特性的运用。在这单元作业中,我主要是按照递归下降的思路进行设计,首先是递归下降需要的 parselexer 两个类,然后就是将表达式可以拆分为 Expr、Term、Factor 三层,在 Factor 以接口方式实现了多重因子,比如 Function、Diff、Trigonometry
  • Unit2:这单元是围绕着多线程电梯展开,在架构设计中,主要采用了产者 – 消费者的架构,不过与普通的生产者–消费者架构不同,我将Scheduler类作为中间线程,与InputRequest组成了InputRequest -- RequestList -- Scheduler的生产者 – 托盘 – 消费者模式,同时也与EleThread构成Scheduler -- Elevator -- EleThread的生产者 – 托盘 – 消费者模式。
  • Unit3:第三单元围绕实现一个给出 JML 规格的社交网络展开,整体架构设计的时候因为已经被 JML 设计好了,作为实现者只需要将 JML 具体实现即可。
  • Unit4:第四单元围绕建模与实现一个图书馆系统展开,我在本次作业中的架构设计如上所示。

总得来说,通过这四次作业的学习,我从完全没有面向对象的思想、没有架构的思想到现在可以从需求中分析出不同的类,每个类之间是什么样的关系、有怎么样的协作,每个类自身所需要实现的功能是怎么样的,以实现高内聚、低耦合的代码,可以说有了一个较大的提升。在每一单元的实现中,我基本没有经历过重构,对于自己的架构还是较为满意的。

测试思维

在这四单元作业中,我学习到了软件测试中各种不同的测试思路,比如只关注软件的输入和输出的黑盒测试,指对程序中的各个基本模块进行测试,一般用于检测各个方法的逻辑是否符合规格的单元测试等等。

而在多次的作业中,我也做了多次测试,从对于作业单个功能的基础单元测试,到大型数据的对拍和自动测试。测试和 debug 的时间有时候比实现更加长。事实上,在 OO 学习的一个遗憾就是没能弄出一个完全自己搭建的评测机,大多数时候都是使用同学分享的评测机进行评测。

课程收获

首先是我对于面向对象的理解和运用能力更强了,因为这一学期的大部分学习时间都在进行 OO 作业的开发,无论是 Java 语言的熟练度还是面向对象的思维方式都比开学前强了不是一点半点。

除此之外还有学习能力的提升,可以说 OO 课程是我学习过的压力最大的课程之一,偶尔会因为一个 bug 找不出来而焦头烂额。但是,其带来的能力提升也是显著的,无论是阅读指导书还是运用 git 等工具的能力都在这四个单元的学习中得到了提升。

在这一学期的 OO 学习中,有挑灯夜战的奋斗与 debug 的痛苦,也有看到评测全通和强测没“寄“的高兴,我付出了很多,也收获了很多。保持着这样的学习状态,不断奋斗才是关键!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值