BUAA OO 2023 第四单元总结

BUAA OO 2023 第四单元总结

一、正向建模与开发

正向建模与开发是从问题的需求出发,通过逐步构建和迭代的方式,设计、开发和实现一个软件系统的过程。它是一种常见的软件开发方法论,用于构建高质量的软件系统。

正向建模与开发的优点在于它强调了从需求到实现的逐步迭代过程,能够在开发过程中及时发现和纠正问题。它提供了一种结构化的方法来管理软件开发过程,使得开发团队能够更好地理解用户需求,并将其转化为可执行的软件系统。

二、本单元作业架构设计

本单元以图书馆模拟系统为例,锻炼同学们对程序架构的设计和抽象能力,以及加强对 UML 图的绘制训练。本单元的难点在于类十分繁多,类与类之间的关系也很变化莫测,同时题目的要求也较难理解,对于输出顺序的把握十分波云诡谲,幽暗昏惑。

我的图书管理系统分为三个层次,学校类、图书馆、学生类。学生的请求将会被发往图书馆的各个层次处理,然后最终按照规定的输出顺序进行输出。其中重难点在于对处理流程的理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ochs6fUd-1687242564477)(C:/Users/%E5%BE%90%E5%87%AF%E5%A8%81/AppData/Roaming/Typora/typora-user-images/image-20230620135347311.png)]

一人来借书:
前往自助机器处,查阅其需要的书目是否有剩余:
{
		有剩余: 到对应类别的书架处取书  {
				A类书籍,该同学将在图书馆完成阅读 **(阅读时间忽略不计,即假设同学从书架取书后立即完成阅读,将书放回)** ;
				B 类书籍,该同学会先到 **借还管理员** 处登记,若符合借书数目限制则成功借书,否则书本 **当即被留在借还管理员处** ,借书失败;
				C 类书籍,该同学会直接到 **自助机器** 处刷卡借书,若符合借书数目限制则借书成功,否则书本 **当即被留在自助机器处** ,借书失败。
		}
		
		无剩余:所有学校处理完后,检测外校是否有剩余 {
				外校有剩余: {
						次日清晨**到达校外读者所在学校的**图书管理处,并在该日开馆时发放给读者
				}
				外校无剩余:{
						本校有过副本:到 **预定管理员** 处登记预定{
								预定B类: {
										手中无 B 类书,不管是否有预定,仍可以借阅架上的或预定 B 类书;
										持有一本 B 类书籍的副本,则再预定 B 类书籍当即被拒绝	
								}
				
								预定C类:{
										手中无 C 类书,不管是否有预定,仍可以借阅架上的预定C 类书;
										持有一本与该书籍同一书号的副本,则再预定 C 类书籍当即被拒绝	
								}
						}
						
					本校没有过副本:{
								向 **预定管理员** 登记新书的书号并登记预定,预定管理员会将购书清单发送至 **图书管理处**。
						}
		}
		无剩余但有过副本:到 **预定管理员** 处登记预定{
				预定B类: {
						手中无 B 类书,不管是否有预定,仍可以借阅架上的或预定 B 类书;
						持有一本 B 类书籍的副本,则再预定 B 类书籍当即被拒绝	
				}
				
				预定C类:{
						手中无 C 类书,不管是否有预定,仍可以借阅架上的或预定C 类书;
						持有一本与该书籍同一书号的副本,则再预定 C 类书籍当即被拒绝	
				}
		}
		无剩余且没有过副本:{
				外校当日有可外借副本:这本书在闭馆后从所属学校书架下架开始运输,并于**次日清晨**到达校外读者所在学校的**图书管理处**,并在该日开馆时发放给读者。
				外校当日无可外借副本: 向 **预定管理员** 登记新书的书号并登记预定,预定管理员会将购书清单发送至 **图书管理处**。**图书管理处** 在 **每个整理日开馆前** 完成新书购置
		}
}

还书: {
		B类书籍:到 **借还管理员** 处还书, 若有损毁情况,将 **立即向借还管理员缴纳罚款**,然后(不管是否有损毁都)还书成功;
		C类书籍:到 **自助机器** 处还书,若被扫描出有损毁情况,将 **立即到借还管理员处缴纳罚款**,然后(不管是否有损毁都)在系统上被认定还书成功。
}

我对于深克隆的理解不够到位,因此出现了这方面的bug。我将一本书插入到一个Map中的时候,有些情况若不将这本书复制一遍的话,可能会出现一本书被插入到两个map中,可能会出现null。

同时我在对于不同书籍处理顺序方面有问题,例如A校同学a校外借阅借走了B校的唯一一本x书,B校同学b预定了x书,a还了x书以后没有发给b。这是由于我在整理图书的时候没有把书及时复位导致的。

请添加图片描述
请添加图片描述

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

第一单元

当时的我对于对象的理解并不清晰,并未对三个map建立属于他们的类,也并未采用递归下降算法,实际还是面向过程编程,只求在有限时间内通过hw1,这导致我的代码连最基本的嵌套括号的功能都无法实现,为之后hw2的重构埋下伏笔。经历了第一次作业的临场发挥和第二次作业的含泪重构,我体会到了在一开始就构建出正确架构的重要性。应当采用普适的方法对问题进行求解而不是只求过关而埋下重构伏笔。

第二单元

本单元作业并没有经历重构,因此痛苦程度远小于第一单元。原因是我在第一次作业时就深入思考了这个问题的架构,使得代码的可拓展性提高,因此没有出现重构的问题。通过本次作业的学习,我对多线程操作有了更深一步的理解,明白了生产者-消费者模型和锁的使用。同时我对调度器的设计也经过了深入的思考。

第三单元

本单元作业我对图论的理解有所提高,同时使用了魔改版的dijkstra算法。但由于没有使用堆优化,是本次作业的一大失误。同时在架构中我也使用了并查集算法来优化,来减少时间复杂度。本单元让我明白了时间复杂度的重要性与动态维护的重要性,大大降低了时间复杂度。

第四单元

本单元以图书馆模拟系统为例,锻炼同学们对程序架构的设计和抽象能力,以及加强对 UML 图的绘制训练。本单元的难点在于类十分繁多,类与类之间的关系也很变化莫测,同时题目的要求也较难理解,对于输出顺序的把握十分波云诡谲,幽暗昏惑。我加强了对于处理复杂类于类之间关系的能力。

四、测试思维的演进

最开始并没有测试数据测试的意识,只求通过中测。但第二单元强测寄掉的点让我明白了中测的不可靠性。大多是借用同学们的测评机,对自己的代码进行测试,与他人对拍。

五、课程收获

首先本课程让我新学习了java语言和面向对象的思维。之前从未接触过java,第一次作业给我当头一棒,让我从头开始一点点学习java语言。

其次我也学会了多线程操作、递归下降算法、JML语言、uml图等各方面的知识,增强了我对于面向对象编程的能力。同时在课程学习中认识到了很多优秀的同学,从他们身上我学到了很多。

我在心理素质方面经历了积极的变化,特别是在自信方面。当我完成第一次作业时,我极度缺乏自信,对自己的能力产生了怀疑,因此一直不敢开始实现代码。那一周焦虑的感觉至今仍历历在目。然而,随着我完成更多的作业,我的设计和实现能力逐渐增强,我开始不再畏惧每一次作业。随之而来的是我完成作业的效率和质量不断提升。

总之作为一门六系的精品课程,这门课程符合我对精品好课的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值