面向对象设计与构造_第四单元总结

杨馨悦-22182610 2024-06-15 05:21:03

目录

  • 正向建模与开发
  • 架构设计
  • 第十三次作业
  • 第十四次作业
  • 第十五次作业
  • 最终UML类图
  • 架构设计思维的演进
  • 第一单元
  • 第二单元
  • 第三单元
  • 第四单元
  • 测试思维的演进
  • 第一单元
  • 第二单元
  • 第三单元
  • 第四单元
  • 课程收获

正向建模与开发

在正向建模开发中,需要遵循以下几个步骤。

需求分析:明确系统需要实现的功能和用户需求。

系统设计:利用UML进行系统的架构设计,包括类图、顺序图、状态图等。

代码实现:根据设计模型进行代码编写,遵循面向对象的设计原则。

测试与调试:对系统进行单元测试和集成测试,确保各模块功能正确。

我在开发的过程中主要遵循前三个步骤完成了开发,在测试部分可能完成的并不到位,这也导致了我在强测中没有拿到满分。我的开发过程如下:

首先,阅读指导书的要求,了解到需要实现的功能。我们需要实现书架、预约处、借还处、和用户,要实现借书,还书,查询,预约,预约取书,续借和图书漂流等功能。

根据指导书的要求,我给图书馆设计了Library类,在Library类中调用书架(Bookshelf)、预约处(AppointmentOffice)、借还处(BorrowAndReturnOffice)、和用户(Student)四个类,实现了图书在图书馆中各处的转移。又根据指导书中对于借书,还书,查询,预约,预约取书,续借和图书漂流的具体要求,细化了每个类需要的属性,特别关注了他们对应的数据结构。同时,设计了四个类所需的一些比较基本的调用方法。

接着,根据我的类图设计,和指导书要求,编写代码。

架构设计

第十三次作业

类图如下

img

  1. 主类(MainClass):主要用于程序的入口,包含主方法 main(args: String[]),用于初始化 Library 对象,并处理图书馆相关的操作请求。
  2. 图书馆(Library):管理图书馆的图书、学生和图书流通操作,包含多个组件如 BorrowAndReturnOfficeAppointmentOfficeBookDriftCorner
  3. 借还处(BorrowAndReturnOffice):负责图书的借阅和归还操作。
  4. 预约处(AppointmentOffice):处理预约请求和安排预约。
  5. 图书漂流角(BookDriftCorner):管理图书漂流的操作。
  6. 书架(Bookshelf):管理图书的存储和查询。
  7. 学生(Student):表示学生对象,包含学生的基本信息和借阅图书的操作。

第十四次作业

在这一次作业中,加入了续借、图书漂流、借阅期限限制的新需求。我新增了图书漂流类,来处理漂流书。 图书漂流类中的borrowCount,用来计算被完整借阅了几次,如果达到两次,就会在完成第二次借阅后,把图书放入书架,成为正式书籍,不再以漂流书书号出现(所以需要注意在加入书架时,要新建BookID)。

第十五次作业

在这次的作业中,加入了用户的信用积分计算。我在Student类中,加入了许多属性来完成本次作业。比如信用积分、B书拥有量、C书拥有的书籍号。关于信用积分的计算,由于只会在白天进行信用积分查询,所以我在每天开门的时候计算过期书籍的扣分。

最终UML类图

img

最终的代码和UML类图是完全一致的,因为我在最后整体对照着都修改了一遍。但是和最初的UML设计还是有一些不同的,最开始设计的时候忽略了每个类用于数据交互的方法,比如add方法之类的。每个方法传递的参数也都有修改,因为设计的时候脑容量不够,不是很清楚需要传哪些参数(eg.一开始完全没写LocalDate)。

架构设计思维的演进

第一单元

刚刚接触Java,其实在这个单元我主要学习和熟悉了Java的用法,没有做太多的架构设计,而且很幸运的是,我第一周的架构就能很好的适应后面几次迭代,所以在这周也没有意识到架构设计的重要性。

第二单元

电梯单元,我在这个单元的设计出现了比较大的问题,中间进行了一次小重构,也意识到架构设计的重要性,要先想好了整体的架构思路,确保是有一定迭代空间的,再写代码。

第三单元

在JML单元,我们从已有的架构设计上,把JML转换成代码实现,我发现这样的设计理解起来非常方便,而且很清晰,这也是我第四单元很想尝试正向建模开发的原因。

第四单元

本单元的重点就是架构设计,我先实现了UML类图的设计,再根据类图设计完成了代码书写,体会了一次正向建模开发。这次实践让我深刻理解了如何通过UML进行系统设计,并将设计转换为代码,实现了从理论到实践的完整过程。

测试思维的演进

第一单元

本单元的测试还是比较好写的,我自己写了数据生成器,和小评测机,自己用。

第二单元

这个单元我的设计出现了比较多的问题,没有过多了精力进行测试,主要依赖公测的数据点,手动书写一些极端数据来实现了测试。

第三单元

在JML单元,整体的功能实现不需要过多的测试,主要的问题是性能问题,要保证每个方法的复杂度不超过O(N),所以我主要做的是代码的静态检查,比对JML来做检查,同时结合junit来做测试。

第四单元

本单元的重点侧重需求实现,对性能没有要求,我没有做太多的测试,主要是针对指导书中提到的各种情况,书写了边界条件上的测试样例,手捏数据测试的。

课程收获

OO课程就这样要结束啦,怎么还有点小不舍。从第一单元没学oop直接硬刚java的艰难,第二单元多线程本地无法稳定复现死锁,第三单元每次交上去信心满满,一看强测没进互测的恐慌,还有友好的第四单元,一个学期投入到OO这一门课上的时间和精力,基本和我其他课程的加起来一样多。但总的来说还是收获了很多,对java的掌握更熟练了,明白了jml这样的文档的重要性,感受到了架构设计的魅力,一个好的架构设计是事倍功半的。整了学期结束了再回过头去看,感觉助教们都好辛苦,重写jml规则,就为了方便我们的阅读,要时刻盯着消息修改指导书的问题。谢谢课程组,老师,助教们的辛苦付出!!OO真的是爵士浩克!!

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

301

社区成员

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

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