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

2024-06-12 22:04

本文主要是介绍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更大的考验(不是)

这篇关于BUAA-2024年春-OO第四单元总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055461

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;