这三次大作业经历了一次题型的更新,不管过程是怎么说的,结果是试卷批改程序退出出题的视野了,取而代之的是电路设计题。对于电路设计题我认为出的更加合理些,不像试卷批改题难点都在写正则表达式上,多了对类间关系的考察。
这三次题目集期间,我们在课上主要学习了一系列设计模式,正所谓拿着锤子看什么都像钉子,在这次的题目集中我也尽可能套用所学的设计模式,接下来就让我从第三次题目集开始,说说我对题目设计的得失。
第三次作业
这次题目集中加入了对由串联电路和并联电路组成的电路的分析,通过在于对各种电路情况的分析与判断。
SourceMonitor分析如下:
UML类图如下:
设计与分析:
设计:
这次题目设计我运用了工厂,策略,观察者模式,相较于以往的设计,通过运用设计模式,让我在设计过程中更加注重类间的关系,
也就是说更加注重对象的存在,而不是我写这个程序想要得到的输出,而我们也可以看到通过注重类间的关系设计,也极大的降低的程序的平均复杂度。
1.策略模式的运用
通过上面的图片可以看出,我主要设计了4个接口,WorkBehavior和ControlBehavior这两个接口是对策略模式进行的运用,我在ControlledDevice类中implement了WorkBehavior接口,这样的好处是通过多态之后的受控电器只要继承了ControlledDevice类都可以在之前的代码中使用,而我们只需要修改WorkBehavior接口中的work方法就可以了。
2.工厂模式的运用
工厂模式对依赖倒置原则有很强的执行性,因为通过工厂模式创建设备时是通过接口创建设备,但在这次我感觉主要只运用到了简单工厂,因为这次设计设别太多,工厂模式模式是要对每种设备设计一个工厂,如过运用工厂模式的话,就会导致很多类出现,所以这道题我觉得还是适和用简单工厂,因为这道题要制造的类都是单独且数量多的,就导致并不适配普通工厂。
3.观察者模式的运用
我设置了电压观察者,也就是volObserver 和 volsubject来观察电路间电压的变化,运用观察者使串联电路并联电路,以及其他电器都成为电压观察者时代码的设计更加同一和简洁。同时我也观察到观察者模式的使用可以更好的符合limit法则。
改进建议:
对电路短路开路的判断可以更加简洁。
出现错误:
1.这次的题目改题花了很多时间,主要是精度的问题,我先将电压转换为电流在传入各个设备中,而在转化的过程中会出现精度误差,导致问题的出现。
2.未考虑并联电路短路的情况。
第二次作业
SourceMonitor分析如下:
UML类图如下:
设计:
我的类设计:
由于本次题目与下一次题目有较大区别,且题目较简单,只有一个电器设备,所以便忽略了引脚的设计,因为可以直接捕捉那个设备,且对设计模式的运用也较少。
出现错误:
此次题目集未出现错误
改进建议:
1.如上面所说的可以增加设计模式的运用
2.在输入时对题目的判断可以更简洁些
第一次作业
这次BLOG的第一次作业,也是试卷批改类题的最后一次作业,批改类题目的难点就是正则表达式的修改,基本上不需要怎么使用设计模式相应的知识点,比如这次主要的难点就是分析题目的格式错误是什么。
SourceMonitor分析如下:
UML类图如下:
设计与分析:
试卷批改类题目不同题目中,一般在结构上不产生太大变化,主要就是对正则表达式的修改,这到题目中的正则表达式在上一体的基础上需要修改的点在于,如果提取的答案后面有空格必须保留,这也是答案报错中格式错误的由来。
出现错误:
在各种信息中的正则表达式的切割上有问题
其实这后面几个答案错误都是因为正则表达式的书写出现错误。
比如一开始题目信息中我的正则表达式无法分割 asdf asdf 这样的字符串
将判断题目的正则表达式换为
String pattern = "#Q:\\s*(.*?)\\s*#A:\\s*";
在答案信息输入时答案可以存在 asdf asdf 这样的格式且在比较答案正误时应该取出前后的空格
改进建议:
由于本次题目集没有后文,且4次题目框架没有大改变,主要是正则表达式改变,所以未思考改进建议。
综合性总结:
本次题目集中,主要是对设计模式进行实践,而在本次题目集中,我感受到了通过运用设计模式可以增强程序的延展性,使我们更加关注类间的关系,更好的符合程序设计的六大原则。
建议及意见
1.一定要说明输入的限制情况,不让学生在不必要的事情上浪费时间,比如电路题中题目既出现了[K1-1 K1-2 R1-1]这样的输入情况,但其实输入中并不会出现这种情况。
2.对可能出现的特殊情况也可以做简单的提示。