1. UML作业架构设计
在两次的结构设计中,我采用了图的结构存储相关的信息,并且将相关的信息存储在父层结构中,在UML中,存在有类图、顺序图和状态图三种不同的表达方式,针对这三种不同的表达方式,我也分别采用了不同的结构进行存储。
类图,类图中存在有数据种类,如类,接口,属性,操作,参数等等,我将各类型数据新建为不同的类,并且在高层类中实例话底层类,从而模拟出实际的UML结构,如在类中存储多个属性、在属性中存储参数,并且对于类的继承等,以图的结构进行存储,从而使得各类信息都井然有序的进行存储。
状态图,状态图主要表达的是状态转移的过程,需要判断不同的状态是否属于同一个TimeMachine,新建多个TimeMachine,在TimeMachine中存储其包含的所有状态,并且将这些状态以图的形式进行存储,这样在查询状态间相互转移的过程,可以利用图结构进行查询,将更加简单。
顺序图,顺序图主要表达的是类属性间进行消息传递的过程,其结构比较简单,构建多个顺序图,在其中存储相应的生命线,为不同的生命线进行消息的计数即可,较为容易
所以这次的结构,主要将这些被分解的信息,再统一重新建立新的关系,联系在一起进行存储、分开管理,将十分方便。程序的类图表现如下:
2. 总结四个单元中架构设计及OO方法理解的演进
2.1 表达式求导
表达式的求导,关键在于如何分割出不同种类的项,并且将其结结构化的存储起来。在指导书中提供的,将各种因子通过继承相同父类的形式存储起来,为不同的因子实现其独有的求导法则,并且在表达式的层面中完成完整的求导法则,就可以将数据很好的管理起来,并且实现求导的功能,这种架构也被我应用在我的作业中,感觉这种同类间合并并且单独实现其特有功能的方法,对组织数据有着很大的帮助。
在这次实验中给提出的这种架构,能偶让我们将同类数据合并,并且又为不同的类别实现不同的方法,让我体会到OO的魅力,使用封装、多态、继承。
2.2 多线程电梯
多线程电梯这次的作业中,主要需要设计电梯、调度器、输入线程,三个线程进行协同操作,主要的作法为,让输入进程不断读取数据,每次读取到数据即提醒调度器进行调度,调度器需要读取所有电梯的状态,判断当前的需求分配给哪台电梯产生的收益最大,即将该任务分配下去,再唤醒电梯执行相应的载人的任务。为了避免轮询对CPU的损伤,在电梯完成任务、以及输入器得到所有的输入则提醒调度器进行判断是否满足退出的要求,满足即可退出。
从上面的架构的说明上来看,这次的作业更多的是让我们学习如何书写实现并发程序,这里需要注意的是线程的安全性,多个线程之间如何互斥访问临界资源,可以对方法进行synchronized操作,使其原子化,或者使用PV锁的形式,完成限制访问。
这里更多的是并发编程的一次实践,对于多电梯的实现也需要完成继承等方法,编写高效的调度程序则是这次的难点。
2.3 JML
JML单元的作业是根据所提供的JML编写可执行相应功能的代码,这里实现的是一次路径的管理系统,让我们体会JML的功能。采用的架构也很简单,即将不同数据以图结构形式存储起来。由于整体的代码框架已经给出,所需要的代码量并不多,更重要的是如何构建图,进行相应的查询搜索。
这次作业更多是的让我们感受JML的使用,在使用的过程中会发现JML的确具有很好的功能,对于开发过程中也有很好的限制,比较适合在规定化的工程开发中使用。
2.4 UML
UML这次作业的架构即如上所述。
本次作业更多的是对Java程序的一次形象化的表示,用来表示类图、顺序图、状态图等转移方式,但是在作图的过程中略有繁琐,这样会更好的表达自己架构的含义,更方便他人理解。
3. 总结自己在四个单元中测试理解与实践的演进
3.1 多项式求导
在这次作业中,进行测试的时候,需要判断求导的正确性,这次作业其实不太存在边界条件的问题,所以基本上多测几组组合就可以保证正确性。
3.2 多线程电梯
多线程电梯,多线程电梯,这里的正确性其实也比较容易判断,主要需要判断的点在于:是否会发生死锁,只要避免死锁基本上不会产生正确性问题。这里的测试更需要临界测试,因为多电梯运行速度不同,我们可以使多电梯同时到达某一层,在这一层进行人员的交换,判断是否可以正确的执行,来测试避免死锁。
3.3 JML
JML这次的作业主要是构建图查询,在这次作业的前两次中我自己使用python针对每一种语句都进行了随机的构建,并且使用python进行了相应的正确答案的构建,进行了大规模的批量测试。
3.4 UML
UML作业需要构建图的完整行,测试的过程常是以自己绘制相应图,再经过转换进行测试。
4.课程收获
- 熟悉了java语言
- 了解了多线程开发与调试
- 学习了面向对象思想
- 增量设计
5.课程建议
可以将测试专门作为一节进行讲授。毕竟测试是很重要的。