BUAA-OO-UNIT4 UML
正向建模与开发
本单元围绕UML建模展开,要求我们在三次作业完成UML类图、状态图和顺序图,以表达各个类的关联关系,图书的状态变化以及借书的流程顺序。在构思好UML类图后,根据类图进行代码开发。
- 类图中,我把题目中涉及到的所有对象都建立了类,并确定了每个类的属性和方法,为各个类建立了关联关系。
- 状态图中,我为书建立了两种状态,在学生操作书的过程中对书的状态进行切换。
- 顺序图中,我根据学生借阅需要购买的新书流程,将信息进行划分,实现各个lifeline的交互。
架构设计
整体架构
我将所有题目中涉及到的对象,如self-service machine:自助机器、borrowing and returning librarian:借还管理员、arranging librarian:整理管理员、ordering librarian:预定管理员、logistics division:后勤处、purchasing department:图书管理处等都建立了一个类,他们都属于library类里,并且我建立了book类和bookshelf类,用于上述对象存储书籍信息。所有流程我也均完全仿照题目中的要求,让每个对象执行他该做的事,实现信息交互,这样有助于理解和迭代。
类图
状态图
顺序图
代码设计和UML模型设计之间的追踪关系
我在设计时,首先画出大致的UML类图,描述清楚类与类之间的关系,不急着往里加属性和方法(因为写代码的过程中可能由于自身考虑不周,增添新的方法);然后设计代码,将属性和方法补充完整,并进行测试;基本测试完后,再完善UML图。因此基本能够保证最终代码和UML的同步。
课程总结
架构设计思维的演进
Unit1
初步接触了Java面向对象,并且在重构和迭代中了解并掌握了递归下降算法。递归下降算法非常巧妙,理解起来有一定难度,在迭代中我逐渐加强了对lexer和parser的理解。
此外,在表达式解析时要注意对类之间关系的设计,比如因子就有多种类型,需要对继承关系有很好的掌握。
Unit2
电梯调度单元,接触了多线程的设计思想,这个单元是我认为面向对象课程设计的最好的一个单元,学到的东西很多,如生产者-消费者模型,线程概念,电梯调度的LOOK算法,信号量等等。线程相关的知识还与操作系统的课程相通,让我能够实现课程间知识的融会贯通。
优化电梯调度算法也需要足够的毅力和创新性,并且随着迭代,电梯的调度也需要进行修改,开始的随机调度在后面的作业中就不太适用。这个部分也是这一单元的一个亮点。
Unit 3
JML单元主要给我们推荐了一种规格语言JML。说实话,对JML的印象并不太好,它确实可以正确的表达出设计要求,但这个语言确实有点繁琐,可读性并不强。这一单元的设计也都由课程组规定好了,类与类的关系不需要我们自己实现,我们只需要将JML语言给出的设计要求用自己的方法进行实现即可。
我一开始对JML语言的理解有误,以为只需要按照JML所提供的代码原封不动的翻译成Java即可,事实上我们需要运用算法知识降低时间复杂度,让程序的性能尽可能好。我也因此丢失了不少分数。
除此之外,我认为这个单元并没有体现出太多面向对象课程的思想,最终大家都去为了运行时间卷算法,这应该不是这一单元设计的初衷。
Unit 4
UML单元主要介绍了UML的三种图:类图、状态图、顺序图。我也学到了一些设计思维和架构,并且明白了一个好的工程的工作开展模式。但由于这一单元的作业强度难度太大,大部分同学都是舍本逐末,目的是完成编程任务,而不是研究三种图如何画出,这也是这一单元的一大漏洞。
测试思维的演进
在四个单元中,由于时间原因,我本人并没有写过评测机。我测试使用最多的方法还是手动构造基本数据、大规模数据和特殊情况数据,对程序进行测试,将期望输出和实际输出做对比来确定程序的正确性。此外,我也使用了别人的评测机进行测试,还会和同学进行数据对拍,这些都能够有效地帮助我进行测试
我还学到了很多类型的测试,如黑箱测试、白箱测试、单元测试、集成测试等等。在自己进行测试的过程中,我也用到了一些测试方法。
课程收获
对于OO课程,我投入了很多精力,也学到了很多新知识,对面向对象的编程思想有了深刻的了解,自己的编程能力也得到了充分的提高。虽然也体验到了通宵写代码的经历,但一个学期的努力下来,也算收获颇丰。希望OO课程能越来越好。
刻的了解,自己的编程能力也得到了充分的提高。虽然也体验到了通宵写代码的经历,但一个学期的努力下来,也算收获颇丰。希望OO课程能越来越好。