302
社区成员
本单元主要学习的是uml类图,旨在教导大家先通过uml图来构造基本的思路再完成对应的具体代码。一方面,UML类图提供了一种可视化的方式来描述系统的结构。通过类、属性和方法的定义以及它们之间的关系,这使得我可以更清晰地理解系统的组成部分和彼此之间的联系,从而进行更好的结构化设计;另一方面,使用UML类图进行正向建模,使得我能够更好地组织和管理代码。通过清晰地定义类的职责和功能,以及类之间的关系,可以使代码更易于理解、修改和扩展,也有利于我在后续的迭代中不断升级自己的架构。
对于本单元的作业,我主要是通过根据需求,在图书馆中建立了借阅处(BorrowingDesk),存放书籍的书架(BookShelf),预留书籍的预约处(Reservation),以及管理学生的类(Student),并根据后续作业的需求新增了用于存放漂流书籍的漂流角(Corner)等。其中在图书馆中有着存放所有学生的HashMap数组(通过学号可寻找到对应的学生)。
第一单元的主题是对于多项式的识别与对应的运算。这个单元的作业我自己主要是根据第一次实验中课程组给出的基础代码进行了一定程度的个性化改装而完成的,我个人认为本单元学到的最重要的知识就是递归下降及其应用,这一思想直接解决了多项式-项-因子(可能也是新的多项式)的问题,从而使得我完成了最为重要的第一次作业的基本架构实现及其后续的新增功能。
第二单元的主题是多线程的应用。这个单元应该是我接触到的四个单元中最抽象的一个了。由于我的能力有限(光是能够保证电梯能够正确运行对我来说就已经是很不容易了),所以我基本没有像很多大神一样采取影子电梯等高水平的操作,而是采取了相对普通的分配方式,只能说我的水平还是不太够了,但多线程的思想对于我日后的代码构造一定有着很重要的意义。
第三单元的主题是jml语言。这个单元似乎在讲述一门很新的语言(新到我刚开始一脸懵的那种)。其实我最开始并不能理解为什么课程组要刻意将本来可以三言两语就讲明白的需求描述的如此复杂,但通过后续老师的讲课及助教编写的辅导资料,我深刻地理解了jml语言本身的重要意义。而对于本次作业的代码,由于本单元的主题是将jml语言翻译成Java代码,所以在起初实现功能上并没有什么问题,但是后来随着测试样例数据规模的提升,我起初的简单构造显得逐渐吃力(即运行时间超过十秒),所以我在其他同学的帮助下对我的代码引入了并查集、维护等新的思路,最终也是相对平稳地完成了任务。
第四单元的主题是uml类图。这个单元要求我们先通过类图来初步设计自己的架构,主要考验的是实现类图与实际代码的一致性。
由于课程难度比较大(其实是我个人太菜了),我参加互测的次数并不多(主要还是集中在了第三单元)。而在第三单元的几次互测中,我主要是根据自己犯过的问题来设计对应的测试样例(比如删除关系时对于Tag的恰当处理、如果对方也是像我一样出于性能考虑采用的是维护数据,那我就通过一些细微的变化来编写对应的样例什么的),虽然我被刀了十几个样例点的样子很狼狈,但我每次成功时都有一种诡计得逞了快感(
通过一个学期的学习(其实算上先导课是一年了),我学到了递归下降,多线程的设计、jml语言、uml类图等多方面的知识,对于Java语言和面向对象的编程思维有了进一步的理解。