BUAA2024春OO第四单元总结暨OO课程总结

李昊琛 + 22371042 学生 2024-06-11 21:20:18

BUAA2024春OO第四单元总结暨OO课程总结

1.第四单元总结

第四单元练习的是UML建模与实现,本单元作业要求实现的是图书馆管理系统。每次作业实现迭代式开发。

1.1 题目回顾

本次作业存在一些书,书可以存在于读者、书架、借还处、预约处、漂流角的位置,书架的书分为A、B、C三类,漂流角的书分为AU、BU、CU三类,读者对书有借阅、预约、取书、查询书的数量、捐赠漂流角图书操作,读者有信誉分,当信誉分小于0时不能进行借阅预约的操作,信誉分的加减有题目给出的规则。图书的移动整理在图书馆开馆前或闭馆后进行,并在移动时进行输出。

1.2 单元的建模与开发

本次作业我采用的是设计架构、画UML类图、进行代码实现、修改UML类图的方法。本次作业中我用于存放书类有读者、书架、借还处、预约处、漂流角五个,另外还有其他的类用于存未实现预约请求的内容。

1.2.1 图书馆移动书的处理

我采用的是在存放书类之间定义相互移动的方法,并将方法的返回值返回到Main类中进行打印输出。这样的优点在于图书之间的移动相对来说比较清楚,缺点是移动和输出分离,内聚较低。

1.2.2 读者的处理

因为读者是一个群体,每个读者都有自己的ID,所以并不是一个简单类可以解决的。处理的方式有两种,第一是定义一个reader类用于存放每个读者的内容,然后再定义一个people类用于存放多个读者并配套相关的方法。另一种则是只有一个readers类,但是其中的每个属性都是以readerId为索引的HashMap。我在这里采取的是后者,实际上前一个处理才是符合我们OO原理的设计方式,但是由于是迭代式开发,在一开始的前两个作业用第一个方法和第二个方法几乎没有区别,但是在第三次作业之后第一种方法变得更合适。本人比较懒没有重构,因此直接用多个HashMap来进行了实现。不过实际上只是方法内部变得更加复杂,对整个类的逻辑没有什么大的冲突。

2.OO课程总结

2.1 四个单元中架构设计思维的演进

在四个单元中我的设计是逐渐更加满足高内聚低耦合的要求的。
在第一单元中,我们要求实现一个运算化简器。在第一单元时,我对OO的设计逻辑不是很理解,最终的结果就是我最终实现的程序实际上是类似C语言的设计的,我的类更倾向于是为了封装函数而实现的,而不是为了区分功能而实现的。此时我设计时是写一整个代码实现出来,然后发现不符合代码行数要求进行大量封装。
在第二单元中,我们遇到了电梯问题。电梯问题要求我们用多线程解决。在本次作业中,为了方便自己的理解,我是尽量按照高内聚低耦合的方式进行设计的,尽量一个类掌管一方面的功能,并且类与类之间的互相调用采用了更加严格的方式。此时的设计方法是先确定好需要几个功能,每个功能要用几个类来实现,设计的就比第一单元要好。
在第三单元中,我们是依照JML进行代码实现。由于JML是描述性语言,所以对于代码的类和方法已经有了非常完善的规定,只要严格按照JML进行类的设计是完全符合OO的要求的。
在第四单元中,我们需要自己设计UML并进行代码实现,得益于第三单元给我们带来的风格的启发,本次作业中我的代码可以说是初入OO设计的门槛了,类与类之间的关联以及调用比较严格的符合了要求。

2.2 四个单元中测试思维的演进

在四个单元中我的测试是逐渐变全面的。
在第一单元中,我对代码的测试方式是进行黑盒测试,即随机产生数据并进行处理,如果处理出现了问题则进行单步调试逐步去寻找bug,这是比较低效和费力的测试方式。但是由于第一单元的正确性特性,并没有出现太多的bug(可以也算很多bug,是四个单元中bug最多的)。
在第二单元中,我对代码的测试方法主要是进行模块化测试,因为第二单元是多线程,所以进行大量的全面测试显然是不现实的,所以我主要是对每个类中的各个方法进行测试,此外在互测中我还学会了压力测试。
在第三单元和第四单元中,我的测试方式和第二单元类似,但是由于第三单元要求了些Junit,所以我的代码测试是更加完善的。

3. 课程收获

在本学期的OO课程中,我学习了面向对象的基本设计方法和测试方法,对面向对象程序的设计、开发与测试都有了更深层的理解。

...全文
15 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

302

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧