OO第四单元总结

OO第四单元总结

总结本单元所实践的正向建模与开发

本单元的完成中,强调了先设计架构,再编写代码的开发方式。课程组要求使用uml进行正向建模。正向建模是一种用于描述和分析系统或过程的建模方法。它基于系统的目标和行为,以及各个组成部分之间的相互作用关系,从而生成系统的模型。
在本单元的要求中,我在设计过程中完成了类图、状态图、顺序图。类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让开发人员在正确编写代码以前对系统有一个全面的认识。类图是一种静态模型类型。类图表示类、接口和它们之间的协作关系。状态图描述类的对象所有可能的状态,以及事件发生时状态的转移条件,可以捕获对象、子系统和系统的生命周期。它可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。顺序图是用来显示参与者如何以一系列顺序的步骤与系统的对象交互的模型。顺序图可以用来展示对象之间是如何进行交互的。顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。
通过先完成uml图的方法来设计架构,能有效地提高开发效率,并显著减少后续开发中的重构。

总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系

uml类图如下
在这里插入图片描述

在本单元中,要求完成一个图书馆系统,模拟读者进行借书、预定、还书等行为。
主要实现的类有:
Library 用于解析指令,并将要求分发给各处理函数;
Book 封装了书的基本信息,如bookId,借还时间等
BookList 模拟书架,内部用ArrayList<Book>储存书,并提供了查询、增加、移除书的方法。
ReaderHashMap<LibraryBookId,Book>来储存读者持有的书
BorrowDesk 借还处,继承BookList类,并实现了整理图书的方法
ReserveDesk 预定处,继承BookList类,实现了取书和整理的方法
在早期设计中,由于相同LibraryBookId的多本书没有区别,因此只需使用HashMap<LibraryBookId,Integer>储存每种书对应的数量即可,在后续Book增加了多种附加属性,必须记录借阅者、借还日期等量,遂使用Book类封装,对应容器也改为了ArrayList<Book>。在初始化书架类时,即为每本书生成对应的对象,之后对于借书、还书等过程的模拟,只需在容器中传递Book对象即可。

总结自己在四个单元中架构设计思维的演进

第一单元

第一单元使用了递归下降的方法来解析表达式,形成Expr-term-factor的三级结构,最终全部统一为Poly多项式进行计算。在架构设计上能清晰的体现层次化设计,也让我第一次体会到了,使用类的层级结构来明确当前层任务,将其他层进行抽象的方法。虽然递归下降的方法在首次接触时令我十分焦头烂额,但在理解之后,还是体会到了层次化设计的优越性。

第二单元

第二单元首次接触了多线程的编程方法,在设计架构时需要考虑到共享对象的互斥访问,还要注意是否允许轮询的出现。最复杂的部分莫过于判定并预防死锁的发生,在调度器和电梯同时主请求队列或分请求队列时,要规定访问的次序,从而避免陷入死锁。

第三单元

第三单元要求按照给定的JML规格实现方法,无需考虑整体架构的问题。在实现给定规格时,要严格考虑前置条件和后置条件的符合,并严格依照方法的副作用进行实现,需要注意的时,JML只提供了方法的规格,但未限制方法的具体实现,为了确保时间复杂度的限制,需要在一些方法中,使用动态维护的策略。

第四单元

第四单元主要聚焦了正向设计的理念,在编写代码前,首先完成对uml类图、顺序图、状态图的设计,从而在后续实现中保证代码架构的清晰,也能显著减少代码的重构。

总结自己在四个单元中测试思维的演进

第一单元

第一单元的测试思路较为简单,主要聚焦在测试边界数据,如0、0*0等,后期还进行了边界压力测试,如((x)^8…)^8等数据使指数突破int,并测试程序是否超时。

第二单元

第二单元的测试思路主要在压力测试,先将电梯重置至最慢后,在允许输入指令的最晚时间输入大量指令,测试程序是否超时。对于死锁的测试,由于我采用了随机的分配策略,相同的死锁问题很难复现,甚至在程序中加入输出语句后会显著影响程序的运行,因此很难对死锁进行测试。

第三单元

第三单元主要采用了黑箱测试和单元测试,使用Junit对相应方法的规格进行判定,使用数据生成器分别生成完全图、零图、稀疏图等,对方法的正确性进行验证。

第四单元

第四单元的测试需要考虑构造借书时间边缘的数据,并考虑需要整理的日期却不开馆的情况。

总结自己的课程收获

一学期的OO课程终于结束了,从刚接触第一单元表达式解析时的一脸懵,到第二单元死锁无法复现的绝境,再到第三单元jml中junit一次次无法通过的沮丧,最后到第四单元uml类图中改不完的错…一学期OO的学习中,虽然有熬夜debug时的痛苦,有陷入绝境时的绝望,但也有成功之后的欣喜。经过oo课程的学习,我不仅对于java语言有了更好的掌握,也对于面向对象这种思维方式有了初步的理解。最后要感谢老师和助教们对于课程的不懈建设和对同学们的不断支持,希望oo课程能够越来越好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值