您的位置:首页 > 其它

HIT软件构造期末复习笔记3

2019-06-18 20:29 204 查看

从现在开始的几章,由于知识点都是理解性的,像这样之前的记忆性的不多了,因此开始重新回顾本学期的六次实验。

本次实验一分为三部分

1. 幻方

从本次实验要求来说,大概分为两个方面:

第一,也是这个问题的主体部分,设计一个函数,能够从文件中读取一组数据,并且判断这组数据是不是满足幻方的定义。在这里我们对应的写函数为 boolean isLegalMagicSquare(String fileName),函数参数为我们工作环境下的一个txt文档的名字,其中内容为一组数据。如果最终我们得到的是一个严格意义上的幻方,则返回true,否则返回false。

第二,是利用所给生成矩阵函数,完善相关实现功能,包括生成的矩阵的维度要自行输入,以及要用上面写的判断一个矩阵是否是幻方的函数来对系统刚生成的矩阵是否为一个幻方。同时,我们对输入的数据也有要求,如果输入的数据不是正奇数,那么就不满足我们本次要求得的东西的要求,boolean generateMagicSquare(int n)应该返回false。如果输入的维度合法,那么就在根目录下生成一组新的数据,并在接下来进行判断。

然而,其实我们主要做的工作并不是对算法本身进行什么修正或者改进,而是我们对于一个软件最基本的东西进行的一次熟悉。什么是最基础的东西?就我个人而言,参考之前说过的几个层面,输入信息无疑是一个十分重要的信息。但是如果最终的客户端输入的信息有错误怎么办?因此,我们首先要做的就是写一个读入信息的函数,使得能够对于错误信息进行识别,不至于读入信息的时候进行崩溃但是没有任何提示信息,让人想不到究竟是client的问题还是programmer的问题。这与我们实验四在总体上进行异常的捕获还不同,本次实验更多的是基本的进行输出信息,然后不进行任何处理,终止程序即可。

现在回头看来,这部分的内容完全可以用实验四的相关知识进行操作,也可以使整个程序的健壮性更高。不过,健壮性本身与程序员的代码能力应该关系不大(在最终实现功能的情况下),尽管有良好代码书写习惯的程序员写出来的代码更美也更好,后者在团队开发和发展维护方面表现较差,但是健壮性应该与程序员在进行编程的时候考虑的情况的多少有关。现在回头看来,当时考虑到的非法输入的情况应该是已经足够满足了,假如还能添加一些模糊信息处理就更好了。

可惜的是,对于健壮性检测,我还是没能想到什么好方法,只能在每个容易出现错误的地方都进行一次捕捉异常。这也使得我最终写出来的东西看起来及其混乱、冗长,十分不美。

而对于信息的判断则相对来说容易一些,尽管判断的情况也很多,最终写起来也很麻烦,不过我相信这是必要的。

2. Turtle Graphics

记得小时候还玩过这个小海龟的运动模型。本题的代码框架就是模仿了这个小海龟的画图方式,以旋转和前进为核心,对颜色的控制等的相关操作。前半部分是要我们自己完善一些基本功能,而到了后续就会涉及到图论的一些知识,本质上是一次将GUI界面和算法实现的综合处理。

这个问题,现在想来也并不是很难(在经历了后续的痛苦之后)。问题主要的地方就是有一大堆根本看不懂的代码(而且现在也仍然看不懂),但是实验本身并没有要求我们看懂这些代码。其实,这个问题给我的感觉就是,有一种团队开发的意思,现在你的队友已经把GUI相关内容写好了,你只需要完成图论的一些相关知识就可以了。而事实上,对于前面的许多内容也确实比较简单,并且有了JUnit之后,许多内容也能够更加“放心”地撒手不管。所以边编程边写测试文件真的是一个很好的习惯,当然,每个方法别太复杂也是一个很好的习惯,否则测试起来也很麻烦。

这个问题最困难的还是有一个计算Convex Hull的问题。当时算法设计还没有入门,没有学出感觉,以至于看着伪代码将其体现到最终的程序上的能力极差,而且当时不会调试,也只能云debug。不过现在看来,这个问题也不难,只不过应用到这个问题中,对于之前的一部分计算反常的计算极角的方式有些别扭。

3. Social Network

这大概是本学期第一次自己从零开始完成代码了,没有任何框架。讲道理,没有框架的前提下,尽管java的基本知识有不少,但是真到了自主创作有些困难。而且,对于这个问题的ADT,现在回想起来完全可以减少使用一些不必要的属性,并且增加一些immutable,增强代码的性能。这部分唯一的算法就是一个计算最短路径的算法,当时由于限制了参数的传入以及对于全局变量的控制,因此没有使用Floyd算法,现在回顾一下觉得确实没什么必要,而且这个算法的使用范围也确实太狭窄。

总结一下,这次实验一,其实每个问题都有后面的问题的影子。从GUI,到ADT的设计,到异常的捕捉,到算法的处理等等。优化的相关方法也在上面进行了简单介绍。总体来说,难度较为简单,但是对于刚刚入门来说有一些难度。

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: