1.这两次作业的设计
本单元的第一次作业的设计主要是一个较为流程化的输入处理,解析的文件把对应的mdj格式文件解析成为了一个类似于字典列表的输出,一条条输入程序当成标准输入,程序只要处理对应的一条条输入并且处理成有联系的图结构即可。
首先比较重要的就是分析对应的一条条指令之间的联系,通过了解源代码知道了各条指令的类型以及相关的联系,每一条指令之间都几乎有神奇的id相关联。于是设计了一个个相对应的字典来表示不同的类型的指令之间的联系,有时一个指令可以使用一个map来完成查询的要求,但是有的时候就需要多于两个来完成,这种时候就新建了一个查询的类来对于输入进行对应的数据处理以及查询。
比较繁杂的部分就是一些结构之间的继承以及相关联等关系,对于这种情况因为一开始的时候就全部存入对应的数据结构显然是不可取的,会有各种各样的问题,同时复杂度也是会很高。所以设计就采用了根据指令的类型的不同来存取对应的关联来进行使用,在需要对于关联的内部的数据进行查询的时候再进行对应的查询来完成。
对于第二次作业,顺序图以及状态图的部分更多的是对于两种图的理解而不是一些精妙的算法的设计,所以设计了两个对应的顺序以及状态的类来对输入进行处理。另外的两个查询合法性的就是直接在原有的函数的内部进行对应的处理。
2.结构设计以及方法理解的演进
刚开始的时候主要是根据题目的要求,找到我们的代码应该进行实现的功能,之后根据顺序进行实现。但是后面的求导的作业的过程之中就开始出现了较为严重的问题,因为要处理的求导的形式逐渐增多,所以我们只能够是被迫把之前的架构进行一次完全的重构从而满足对应的需求。后面的作业更多的还是教导我们如何在一开始就尝试改好自己的程序的架构,虽说如此,我们的程序也是总是不能够完成我们的对应的期望,在实现的过程之中不断进行重构。
这几次OO作业以后应该最大的收获就是了解了一开始的架构设计的重要性以及逐渐学会了如何进行架构的设计。往常的时候代码总是上来就直接开始写,但是后面逐渐适应了先构思再开始码代码。首先在可以进行设计的部分,把应该使用几个类来对于程序功能进行分割以及实现,应该使用怎样的函数以及怎样的方法来对于部分功能进行完成,怎样完善程序之间的联系等都是有了大概的思路以后才开始写代码。
还有就是关于类的抽象以及分割,一开始可能是为了更加像是一个面向对象的程序所以开始分开各个对应的抽象类,但是后来的时候更多的是为了能够有更加分工明确的结构才是会把各种类进行抽象。就像是第一单元最后的作业的时候,如果是不尝试进行多个对象的分割的话就很难说可以达到想要的效果。
3.测试理解以及实践的演进
刚开始做出测试的时候更多关心的是如何验证程序的正确性质,但是后来逐渐才会发现,如果是只关注大体的正确性质的话,很难做到强测不炸,因为很多边界的数据以及奇奇怪怪的数据都是有可能爆掉你的程序。后来的做测试的时候不仅是关注正确性质的测试,时间充裕的条件下面,也会关注各种边界条件下程序的实现,以及各种奇奇怪怪的数据。
还有就是对于代码的实现的过程里面,因为很难在一开始就了解到所有的应该考虑的东西,所以在后面的码代码的过程之中,也应该尝试对于之前自己的设计进行些许的改变来适应。虽说在一些较为简单的程序实现的过程之中我们是可以尝试直接在码代码之前完成所有的设计以及架构,但是对于后面的一些较为复杂的程序的实现,我们都是需要尝试不断地在码代码的过程之中改变我们的架构。
4.课程收获
应该收获最大的就是面向对象的工程化的方法了,通过一门新的面向对象性质的语言的学习,也是逐渐了解了一些至关重要的面向对象的思维方式,改变了自己之前的很多或许说是固定化的编程的思路逻辑。之前学习的面向过程的编程语言,在很多的思路以及设计的架构的方面都和现在学习的面向对象的语言有各种各样的不同,适应起来都还是会有各种困难。不过经过一个学期的适应以及学习,也能够更加熟练地掌握一些面向对象的编程方式。
另外一个收获大概就是有任务的时候要赶紧做了,即使是构思也应该是抓紧时间的。因为指导书发布以后,直到后面作业截止的时候,能写作业的时间很短,所以我们就只能够抓紧时间,每一个周末基本上都是不断地进行作业的构思以及码代码,然后就是码代码完成以后的对于bug的寻找以及修改。构思的时候有的时候需要一个上午甚至是一天才会有一个较为清晰的思路但是之后码代码的过程会比较简单,只是一个机械的实现的过程。
5.具体的建议
或许可以尝试更早地进行指导书的发布等,很多时候因为有各种周末事情的耽误,所以就不能够在周末的时间里面抓紧时间赶紧完成作业,之后等到周一或者周二才能够完成并且提交,很多的ddl都会在一周的刚开始两天撞在一起,但是等到周中的时候又忽然轻松些。
大概的希望就是至少可以提前一些进行指导书的主要内容的公布,方便同学们进行一些提前的准备,在有时间的情况下减少更加繁忙的周末的压力。