BUAA-2024年春-OO第四单元总结

正向建模与开发

在本单元中,我们需要模拟一个小型的图书管理系统,完成图书馆所支持的相关业务,并遵守一定的规章制度。与前几次不同的是,本单元中,我们需要预先将自己的设计思路用UML来实现,然后进行编程。

具体而言,在本单元中,我们分别使用UML类图、状态图和顺序图来进行正向建模。类图主要展示各个类之间的关联、依赖、组合、聚合关系等;状态图则需要通过trigger、guard等来表示不同状态之间的转化;顺序图则反应一个对象之间的消息传递和时序问题。

笔者在每单元的作业中会先进行较为粗略的建模,从而确定大致的编程思路。为了通过公测,我会在代码完成编写之后再对UML图进行补充和修改。

架构设计

下图是我完成hw15后的代码规模。

这是我本单元的UML类图。 

 我在本单元中一共实现了12个类,除了Main类之外,我建立了Library类、BookShelf类、AppOffice类、BrOffice类和BdCorner类来作为图书馆的主体,建立AppInfo类、ReserveInfo类、PersonInfo类和BsBookInfo类、BdcBookInfo类来作为存储信息的载体,用于保存和Book相关的信息。

对于图书馆的业务请求,我采用将请求逐级进行判断的方式,以BookShelf中的书籍为例,用户的query请求,因其不涉及对于书籍的改动,所以直接在Library中调用BookShelf的方法即可;而对于用户的borrow请求,我首先在Library中调用BookShelf中的attemptBorrow()方法,而在attemptBorrow方法中我再调用PersonInfo的canBorrow方法,实现了自顶向下的实现方法。

对于用户的信息,我在Library中建立了一个HashMap<StudentId, PersonInfo> personMap来记录所有用户的信息,在AppOffice类、BrOffice等具体部门类的构造方法中传入personMap,从而使得personMap的起始地址在各个部门中都能够访问,而不需要重复占用内存。

OO课程架构设计推进

其实在OO的每一个单元和OOpre中都用到了架构设计的思想,但是在之前的作业中没有要求使用UML来绘制架构设计图。

第一单元:我在第一单元中最开始关于架构设计完全摸不着头脑,我的设计完全是根据实验部分的代码修改而来,可能是课程组没有想在第一单元就这么考察我们的设计能力罢。第一单元中我认为最突出的是层次化设计,从expr、term到factor,层层深入。同时第一单元也警示我们好的设计架构可以避免后续扩展中不必要的麻烦甚至是重构的风险。

第二单元:在此单元中我第一次接触了多线程的思想,我认为在第二单元中锻炼的更多的是对于多线程中共享资源的认知和保护,同时也涉及了诸如生产者-消费者模型以及LOOK等电梯算法的思想。

第三单元:我认为在这个单元中架构设计没有前几个单元突出,主要是对JML进行编程实现,只有在需要考虑降低复杂度等特殊情况下才需要从总体架构出发进行优化,对于一些简单的方法似乎并不太需要对于架构有一个很好的把握,只需要选择合适的容器就可以独立编程实现。

第四单元:在本单元中我学习了UML类图、状态图和顺序图等与架构设计建模密切相关的知识。虽然本单元中实现的图书馆管理系统并没有前几个单元的作业难度那么大,但是很好地帮助我们理解正向建模给人带来的思维上的清晰。

OO课程测试思维推进

由于没有自己独立地搭建评测机,我在测试中更多的是采用手动捏造数据的方法来检测自己的程序是否实现相应的功能。但是这种方法很难覆盖较大范围的数据,而且也不易发现代码的bug,往往只能满足最基础的功能需求。

课程收获

OO是目前为止对代码量要求最大的一门课。正如荣文戈老师所说,“写一百万行代码的程序员和写一千万行代码的程序员,就是不一样”。虽然我远远没有达到那种境界,但是经过一学期的锻炼我确实感受颇多。举个例子,在这学期初,我的一个高中同学曾让我帮忙写他们学校布置的计算机大作业,内容也是实现一个图书馆管理系统,甚至比OO第四单元需要实现的要求还要少很多,但当时的我却无法帮他完成。而经过前三个单元的历练,我认为第四单元远远没有想象中那么困难。可见OO对于一个程序员的锻炼作用。

OO更像是一个全方位的锻炼,我们不仅需要在短时间内编写大量的代码,还需要考虑多线程、算法、架构设计等诸多问题。回首OO,虽然自己在有些作业中表现不佳,但是能完完整整经历OO的洗礼,真的让人成就满满。

希望课程组能够越来越好,给明年的xdx更大的考验(不是)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ecovadis审核的内容

Ecovadis审核的内容。Ecovadis是一家国际性的企业社会责任评估机构&#xff0c;旨在为全球供应链的可持续性发展提供评估和审核。在本文中&#xff0c;我们将从以下几个方面详细介绍Ecovadis审核的内容&#xff1a; 一、Ecovadis审核的范围和目的 Ecovadis审核的范围涵盖了各个…

EMI电路

PFC 功率部分 1 、整流桥是串联 2 、 PFC 电感串联 3 、二极管并联 4 、 MOSFET 并联 EMI电路图

C++中的结构体——结构体嵌套结构体

作用&#xff1a;结构体中的成员可以是另一个结构体 例如&#xff1a;每一个老师辅导一个学生&#xff0c;每个老师的结构体中&#xff0c;记录一个学生的结构体 示例 运行结果

springboot二屯村钓鱼场管理系统-计算机毕业设计源码58167

摘 要 在互联网时代的来临&#xff0c;电子商务的骤起&#xff0c;一时间网络进行购物这一形式备受欢迎&#xff0c;到现在&#xff0c;网购更是普及。现如今各个行业也通过网购的方式来进行拓展业务&#xff0c;增加企业的知名度以及提升业绩&#xff0c;满足了用户像网购一样…

云原生应用开发培训,开启云计算时代的新征程

在云计算时代&#xff0c;云原生应用开发技术已经成为IT领域的热门话题。如果您想要转型至云原生领域&#xff0c;我们的云原生应用开发培训将帮助您开启新征程。 我们的课程内容涵盖了云原生技术的基础概念、容器技术、微服务架构、持续集成与持续发布&#xff08;CI/CD&#…

单细胞RNA测序(scRNA-seq) 理解Seurat对象存储信息含义和基本操作

单细胞测序技术是在单个细胞水平上&#xff0c;对基因组、转录组和表观基因组水平进行分析测序技术。bulk RNA-seq获得的是组织或器官等大量细胞中表达信号的均值&#xff0c;无法获取细胞之间的差异信息&#xff08;即丢失了细胞的异质性&#xff09;&#xff0c; 而单细胞测序…

【数组】【双指针】三数之和

打算冲一把算法类比赛&#xff0c;之前一直对算法提不起兴趣&#xff0c;也有我自己对它的抵触&#xff0c;本身算法也比较菜。 但现在打算勤勤恳恳刷题&#xff0c;踏踏实实总结&#xff0c;冲&#xff01; 数组——双指针 三数之和 该题力扣网址 错误做法 三重循环框架&a…

第十五篇——条件熵和信息增益:你提供的信息到底值多少钱?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过这篇文章&#xff0c;我知道了条件熵和信息增益&#xff1b;如果你试…

水电站大坝安全监测工作详解

水电站大坝安全监测是确保大坝结构安全和操作安全的关键组成部分。本文将详细解释水电站大坝安全监测的9项主要工作内容&#xff0c;帮助理解其重要性和执行过程。 1) 现场监测 现场监测是水电站大坝安全监测的首要步骤。监测人员需要定期对大坝的物理结构进行检查&#xff0c;…

vite构建的ts项目配置src别名@

一、安装types/node npm install types/node 二、vite.config.ts 文件中配置以下内容 resolve: {alias: {: path.resolve(__dirname, ./src),},}, 三、 tsconfig.json 文件中compilerOptions下配置以下内容 /* 配置 */"baseUrl": ".","paths":…

【Python】详解pandas库中pd.merge函数与代码示例

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

高考志愿填报秘籍:个人篇

选择适合自己的大学和专业&#xff0c;对广大考生来说至关重要。从某种程度上来说&#xff0c;决定了考生未来所从事的行业和发展前景。为了帮助广大考生更加科学、合理地填报志愿&#xff0c;选择适合自己的大学和专业&#xff0c;本公众号将推出如何用AI填报高考志愿专栏文章…

清远mes系统开发商 盈致科技

清远MES系统开发商盈致科技为企业提供专业的MES系统解决方案&#xff0c;帮助企业实现生产过程的数字化管理和优化。盈致科技的服务范围包括但不限于以下方面&#xff1a;MES系统定制开发&#xff1a;盈致科技可以根据清远企业的实际需求定制开发适合的MES系统&#xff0c;满足…

defer关键字

【1】defer关键字的作用&#xff1a; 在函数中&#xff0c;程序员经常需要创建资源&#xff0c;为了在函数执行完毕后&#xff0c;及时的释放资源&#xff0c;Go的设计者提供defer关键字 【2】案例展示&#xff1a; 【3】代码变动一下&#xff0c;再次看结果&#xff1a; 发…

智慧大屏是如何实现数据可视化的?

智慧大屏&#xff0c;作为数据可视化的重要载体&#xff0c;已在城市管理、交通监控、商业运营等领域广泛应用。本文旨在阐述智慧大屏实现数据可视化的关键技术和方法&#xff0c;包括数据源管理、数据处理、视觉编码、用户界面与交互设计等。 大屏通过接入企业内部的数据库系…

openlayers 绘图功能,编辑多边形,modify组件的使用(三)

前两篇介绍了 openlayers 中 draw 的使用&#xff0c;自定义了绘制中和绘制结束后的样式&#xff0c;绘制结束后可以获取到绘制图形的featue或者进一步获取轮廓坐标(如下)&#xff0c;可以进行坐标保存或者将feature添加到其他层进一步自定义显示 draw.value.on("drawend…

arxiv提交报错解决指南

- 编译时无错误 - 所有文件和图片文件都在同一目录下 - 生成.bbl文件 overleaf将参考文献格式bib转bbl&#xff08;bibitem&#xff09;_overleaf bbl文件-CSDN博客 - .tex文件、.bib文件、.bbl文件 的文件名要一致&#xff0c;修改.bib文件名记得在.tex文件中修改bibliograp…

如何导出数据库中数据表或查询结果的数据:支持大数据量(以MySQL和SQLynx为例)

MySQL的数据导出是一个操作非常频繁的任务&#xff0c;也是数据的存储和传输比较重要的一种方式&#xff0c;本文主要以SQLynx为例来介绍MySQL的数据如何导出。 目录 1 操作步骤 步骤 1&#xff1a;登录SQLynx 步骤 2&#xff1a;选择数据库和表 步骤 3&#xff1a;执行查询…

BL104钡铼多协议采集网关助力企业智能化转型

BL104钡铼多协议采集网关&#xff08;PLC物联网关BL104&#xff09;是为满足工业环境需求而设计的专业工业级协议转换网关。它在企业智能化转型过程中扮演着关键角色&#xff0c;为企业提供了高效、稳定的通信解决方案&#xff0c;助力企业实现智能化转型。 首先&#xff0c;P…