BUAA OO第四单元总结

朱治屹-22230620 学生 2024-06-13 22:00:24

目录

正向建模与开发

架构设计

第十三次作业

第十四次作业

第十五次作业

代码设计与UML模型设计的追踪关系

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

第一单元

第二单元

第三单元

第四单元

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

第一单元

第二单元

第三单元

第四单元

课程收获


正向建模与开发

正向建模与开发是从需求和模型设计到具体代码实现的一种开发方法,其主要步骤有需求分析,建立模型,具体实现等。在本单元的作业实现中,正向建模与开发的主要实践是通过UML建模。本单元作业的主要内容就是结合UML设计整体的模型架构,再通过代码实现一个简单的图书管理系统。在之前几个单元的作业实现过程中,第一二单元我在实现前会构建一个大致的框架,然后在写代码的过程中根据写的具体情况不断对框架进行微调甚至重构,第三单元就是完全采用官方包提供的JML规格所构建的框架。与之前单元的作业不一样,第四单元的作业在正式开始编写代码前是需要我们对代码架构设计一个比较清晰的模型的如类图、状态图和顺序图,然后再根据我所构建的模型编写代码。

经过这单元的作业,我还是体会到了正向建模与开发的好处。再一二单元的作业中,我是按着一个大致的框架来写的,代码框架的各个细节都不是完善,然后在写的过程中根据自己的实际情况来不断调整自己的框架,这种方法在每单元的迭代作业刚开始时是比较方便的,因为每单元的作业刚开始的代码量和思维难度都不大,但当作业开始迭代,每次作业的思维难度和代码量就会不断增大,我之前采用的方法就不适用了,常常会出现对之前的框架进行大规模调整甚至直接重构的情况,就会变得非常麻烦。而在第四单元的作业实现过程中,我是先通过UML把代码框架设计成一个清晰的模型,把框架具象化后,我就可以不断修补完善模型的各个部分,也方便观察有无逻辑上的错误,这样当模型设计完成后,整个代码的框架也基本设计好了,在具体实现代码的时候就比较方便,不需要再对代码框架进行大的调整。总体来说,采用正向建模与开发的方法能够让我们在实现作业时有一个清晰的代码框架,避免了在写代码的过程中对框架不断调整,能够较大程度减少我们实现作业的时间。

架构设计

本单元的三次迭代作业主要任务是完成一个小型的图书馆管理系统

第十三次作业

本次作业中,图书馆的图书管理系统需要处理的请求有借书、还书、查询、预约和预约取书,构建的UML类图如下:

其中,Counter类用于计数;User类为用户类,用于实现用户的借书还书等行为;OrderState类用于处理各个请求的查询、状态管理等行为,记录的是每个请求的用户、图书、截止日期等信息,预约查询等行为就会用到这个类;MyLibrarySystem类是这几个类中复杂度最高的一个类,主要实现的是图书馆中图书管理系统的各个行为,是我代码架构中最重要的一个类

第十四次作业

第十四次作业相较于第十三次作业,新增了续借,图书漂流等情况,在借阅,预约,查询等流程上除了需要新增对图书漂流角的图书的情况的处理,还新增了图书借阅期限的限制,在进行还书等操作的时后需要判断是否逾期,UML类图如下:

与第十三次作业相比,我的整体框架是没有改变的,各个类间的关系主要功能都不变,主要的修改就是在User类和MyLibrarySystem类中新增了有关新增功能的属性和方法

第十五次作业

第十五次作业新增的内容主要就是用户的信用分系统,通过用户的信用分来进一步限制用户借书预约等行为,UML类图如下:

在第十五次作业中,我的整体框架依然不变,只是在User类和MyLibrarySystem类中新增了用户信用分系统的相关内容,在原有的借书等行为相关的方法中加入了对用户信用分的判断

 在这三次迭代作业中,我的主要框架是一直不变的,在实现具体代码的过程中也是主要参考所建立的UML类图模型。经过三次迭代作业后,最终的顺序图和状态图如下图所示:

顺序图:

状态图:

代码设计与UML模型设计的追踪关系

在本单元的作业中,代码设计与UML模型设计的追踪关系是十分紧密的,在写代码时,要按照绘制的UML类图中每个类拥有的属性、方法,各个类间的关系来实现,如果在代码中要临时新增属性或方法,同样也需要在UML类图中新增相应的内容,在绘制状态图和顺序图的时候,也应该严格按照代码具体实现时各个类间的关系等来实现

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

第一单元

第一单元是多项式化简,主要难点是在拆分和解析多项式,主要采用的是递归下降的框架设计,迭代作业的时候基本只用在原有的代码的基础上新增功能或对框架进行一些微调,整体框架基本不会有大的变动或是重构

第二单元

第二单元时多线程的电梯系统,因为引入了多线程,整体框架设计难度与第一单元相比有了显著的提升,在这个单元的迭代作业中,就会出现整体框架出现大幅变动甚至重构的情况。本单元的难点在于电梯的运行和调度策略,因为作业测试中涉及整体性能,因此这一部分会在迭代作业中有多次变动,需要不断对框架进行修改优化,是第二单元的主要难点所在

第三单元

第三单元的作业难度较前两个单元有所下降,在整体框架设计上采用官方包提供的JML规格所描述的框架即可,不需要自己从头开始设计。但由于本单元的作业也涉及到对时间性能的考察,就需要自己在理解JML的基础上对一些方法或框架进行优化调整,如引入并查集来优化时间性能等。本单元对于框架设计的主要意义在于引入了JML规格这种新的方法来设计一定程度上规格化标准化的代码架构

第四单元

第四单元的作业引入了UML来辅助进行框架设计,能够通过UML来将构想好的框架具象化为UML模型,通过对构建的UML模型进行修改调整来达到调整整体框架设计的目的,能够很大程度上降低框架设计的出错概率,提高框架设计的效率和准确性

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

第一单元

在第一单元的作业中,因为输入形式比较简单,只用输入表达式和相应的函数关系时即可,因此实现测试较为简单。主要测试方法就是自己编造一些比较复杂的表达式比如多层嵌套括号来进行测试,在测试时还要注意指数为0或是多次幂等边界情况的测试

第二单元

第二单元引入多线程后,每次输入可能得到不一样的输出,且输入的形式比较复杂,此时再手动构建测试样例就很麻烦,且很难自己判断输出是否正确,在这单元我自己没有找到什么好的测试方法,主要就是通过提交官方网站进行测试和借助同学搭建的测评机来进行测试的

第三单元

第三单元主要测试方法是通过Junit来进行测试,本单元的测试主要需要对代码有较为准确的理解,能够构建出满足可能发生的各种情况的测试数据,同时也能通过JML规格来检查各个方法的实现是否满足要求

第四单元

第四单元的测试除了可以构建数据或依靠测评机对代码进行测试以外,因为本单元引入的UML统一化建模可以将自己设计的框架转变为具体的UML模型,因此还可以通过检查自己搭建的UML模型来检查框架设计或方法实现上是否存在思维漏洞

课程收获

在学习这门课程以前,我只在OOpre中接触过面向对象编程,对面向对象编程还没有一个比较清晰和全面的认知。但经过这学期的OO的学习,我觉得我对面向对象编程有了一个比较全面的了解。经过四个单元,8次实验,12次迭代作业,四个博客过后,我不仅仅提高了自己编写代码的能力,也加深了对面向对象编程的认识。在这个学期的OO课程中,我还学会了使用生产者-消费者模式、多线程等编程方法,同时也学会了使用JML、UML来进行标准化建模辅助编程的方法。总而言之,在这学期的OO课程学习中,我还是收获到了很多东西,也进步了很多,不仅磨练了我写代码的能力,还培养了我面向对象编程的思维。

 

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

301

社区成员

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

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