OO-学期总结
一.第四单元架构
•
本次作业要求实现的是一个UML的解析器,并对UML结构的类图,状态图,时序图进行检测,最后一次作业还加上了UML结构规范性的检查.
在这里我就以最后一次作业的架构来进行分析.
首先其实是要进行图的构建,在这里我是以Class或者Interface为节点建立的树,因此为了统一规格,我先定义了MyNode的类,让MyClass和MyInterface这两个类对MyNode进行继承.MyNode是一个抽象类,
对Class和Interface的共性进行提取,减少代码的冗余,id,name,fatherid都是结点的基本信息,其中属性还包括了关联关系的数组以及存储操作operation的数组.
MyClass类多了自己的父类接口以及自己内部定义所的属性以及自己继承的父类.
MyInterface类则更加简单一点,只是在原有基础上添加了父类接口.
通过对传入的element数组进行类型判断,便可以建立类图,同理状态图和时序图的构造方法也类似
•
在搭建完图之后,最重要的就是要实现三次作业中所询问的信息,在这里我就只是介绍一下我自己的几个函数的实现(几个花费了我很多时间的函数)
1.询问Class的所有实现接口
采用递归的思路,对父类以及父类的接口进行添加,然后再调用接口的获取函数,接口的getInterface也是采用遍历搜寻的模式
2.查询循环继承或循环接口实现
对每一个类和每一个接口进行检查,每个类和每个接口都通过自己的实现的方法来检查.
例如Class中的就是利用一个循环来判断是否存在以自身为起点的环路
•
虽然原理比较简单,但是实现的过程中要注意的细节十分多,而且自己构造数据的时候还需要自己建立UML图来进行测试,测试过程相比前几次的直接手动构造要更加复杂一点.
二.前三单元总结
1.表达式求导
先是通过递归下降进行表达式的解析,整体是一个最大的表达式,把所有的项都找出来放在一个容器内,然后项是一大串因子的乘积,也是同样在递归下降的过程中找到每一项中所有的factor,对于factor,分别创建常数类、三角类、幂函数类和表达式因子类。表达式因子类和表达式类的解析方法相同,只不过是多了一队括号。解析完后,在对每一个类定义一个求导法则,表达式类求导-->项求导相加-->(项求导==每个因子求导乘其他因子的求和,返回值是一个多项式类)-->因子求导则是通过各自的求导方法实现(其中表达式类因子则直接调用表达式类的求导)
2.电梯
主要考察了多线程的设计能力,这三次基本上构架都是生产者消费者的模式,标准输入读入客户的请求,而调度器负责把请求分配给各个电梯,电梯则作为消费者把请求消化掉,除了第三次会出现换乘,所以额外考虑一下电梯的返还出的请求.
bug主要会出在数据共享时的死锁问题,因此本单元对加锁唤醒等方法的熟练掌握要求较高
3.JML
jml是在java代码中添加注释,这些注释使我们可以指定要执行的方法而不必说出它们如何执行。使用jml,我们可以在不考虑实现的情况下描述方法的预期功能。 这在工程设计时作用是特别大的,因为在设计之前,我们往往是要先设计好各个函数要实现的功能,如返回值,赋值情况,会出现什么异常等等,之后把函数的返回值都设定为默认的值后。便可以先试试能否正确运行,判断大致的框架是否出现问题.
三.课程建议
◊中测时间稍微往后移一点,比如周日晚上23:59,毕竟晚上22:00到24:00这一段时间的写代码和debug的效率都是很高的.
◊对于中测过了但是由于考虑情况较少而没有进入互测屋的同学,也尽量提供一下中测的数据点,可以帮助同学快速定位并修复bug
◊OO上机实验感觉和上课内容的偏差有一点大,联系没有特别紧密