301
社区成员
发帖
与我相关
我的任务
分享目录
本单元主要是训练大家的建模能力,所以本单元的作业代码不是最重要的,所以也未追求什么性能,重要的是如何在写代码前通过uml能将自己的思路表达清楚。所以本单元应该先通过指导书明确需求,确定有哪些类和方法,画出类图,在写代码的时候对照类图不断完善,通过类与类之间的关系在类图上画出关系,再根据题意和自己的实现画出状态图和顺序图,对照uml顺利完成代码,完成正向建模和开发。

第一次作业有五个类,主要请求的操作再MainClass类进行,主类相当于一个图书馆,所以他与其他类都有依赖关系,借还处和预约处都要将书归还到书架,所以与书架也有依赖关系。

第二次作业加了个漂流角类,主类依旧依赖,借还处的书也会到漂流角,所以他们之间有依赖关系。
此次作业还要求画出状态图,我将图书所在的位置当作状态,通过借书、开门整理、移书、还书、取书等方法作为trigger来改变书的状态,如下图所示:


第三次作业加入了用户积分机制,类的数量没有改变,就是加了一些与积分有关的方法。
因为只引入了积分机制,所以状态图没有改变 。
第三次作业新增了顺序图,表示了用户预约书的流程,如下图所示:

在绘制uml图的过程中,如何做到追踪关系,就需要代码中的类名、方法名、参数、属性都与uml中的一一对应,并且需注意类与类之间的关系,如某些操作只能发生在关联的两个类之间。
第一单元为表达式计算,设计的主要方向是如何实现递归下降,要将一个表达式拆分成哪几部分,从而有哪几个类,还有就是如何合并同类项,从而实现了多项式类。
第二单元为最麻烦、最恶心的多线程电梯问题,这一单元设计的主要方向是如何实现线程同步与互斥,通过哪些地方加锁可以避免线程安全问题,还有就是电梯运行策略和调度策略的设计,如何设计能更好的提高性能,这都是这一单元需要着重考虑的。
第三单元为jml,这一单元主要是通过jml语言来设计方法,但jml语言只是告诉了你这个方法的一些基本要求和实现功能,在具体实现时不能完全按照jml来写,这一单元也比较卡时间,也需要我们设计一些合理的算法来提高速度,具体实现最多的就是动态维护和并查集。
第四单元为uml,这一单元具体设计方向就是先构思,画uml图,再通过uml来实现自己的代码,训练了建模能力。
在第一单元中,主要是构造一些复杂的样例,比如说表达式里嵌套表达式,或者是跟0有关的一些触碰到边缘数据的一些样例。
在第二单元中,比较依赖同学的测评机,测评机覆盖的情况比较全面,自己构造的话就会构造一些卡时间的样例测一下性能。
在第三单元中,自己要写junit测试,主要通过自己写的junit,构造一些复杂的图来测式方法正确性。
在第四单元中,主要还是自己构造样例,会着重测试整理时的操作和对于积分的检查。
漫长的OO课程终于算是圆满结束了,4个单元,16次作业,过程很困难,但结果是好的,每个单元都给我留下了深刻的印象,从刚开始的对于面向对象的不熟悉,到现在能熟练的写出上百行代码,OO课程真的教会了我们很多东西。我收获到了面向对象的设计理念,多线程的运行规则,递归下降的方法,代码的抽象能力,jml语言的阅读能力,uml建模方法的掌握,架构设计与测试方法的掌握,不仅仅是这些,在遇到bug时不断调试,也磨练出了自己的意志,总体来说,OO课程是让人难忘的,但这样的经历一次足以,同时也祝OO课程越来越好,助教、老师们也辛苦了。