前言
相信经历过初级实训的同学,对于实训都会有一种恐惧感,虽然中级实训也需要大家付出很多精力,但是难度相比起初级实训,还是简单不少。中级实训是基于一个GridWorld框架,让同学们在上面改进代码,是要求大家在理解的前提下,在现有的代码上进行改进与拓展,这个更加考验大家对于代码的理解能力。第三部分的内容也涉及到了一些基本的算法。这篇博客将简单地跟大家介绍实训中的一些关键内容,希望能够帮助到大家。实训网站为https://se-2018.github.io/ ,想看代码的直接看这里。
介绍
实训时间为三周,分为三个阶段,中间一般会有一周与假期冲突了,因此实际留给大家的时间是四个星期。中级实训在给TA检查和提交代码的时候需要在云平台的Linux环境下进行,但是云平台对外没有限制,大家可以提前看到题目,然后在windows环境下先做好,通过Github将资料传到云平台中即可,所以时间上是比较充裕的。内容主要分析三个阶段,接下来我将按阶段来介绍。
阶段1
阶段1的主要内容是学习一些跟Java开发有关的工具,在后面的阶段会使用到。这一阶段难点主要是配置环境变量和要熟悉多种工具的使用,建议大家可以提前学习,不要挤在一个周末去学。同时也要写一份自学报告,这也是比较花时间的。学习的内容包括:
- Vim的使用
- 编译运行HelloWorld
- Ant
- 用Java实现一个简单的计算器
- 学习测试工具Junit
- 学习配置SonarQube,并用于测试自己的代码
这一阶段涉及的新东西很多,也很繁杂,所以我讲解详细一点,后两部分都是以代码为主,就不详细讲解了。
Vim使用
关于Vim的使用这里不详细展开,本人也不是很喜欢使用这个编辑器,学会简单的打开、编辑和退出就可以了。
编译运行HelloWorld
编译运行HelloWorld这个难度不大,详情可以参考第一个Java程序这篇博客。
Ant使用
Ant是一个类似于Make命令的操作,我们可以提前将程序编译运行的命令写在一个xml文件中,然后在命令行中输入ant
,就可以编译运行程序的。Ant的配置使用可以参考Ant教程。接下来我举一个简单的例子
1 |
|
分析:项目名叫TestHelloWorld,这个是可以自己命名的,default
属性表明的是默认运行的target。由于Ant工作的核心是依赖关系,因此,这个一般写最后一个运行的target的名字。接下来看target
标签,含有name
和depends
属性,depends
属性指明了当前target运行必须后于其所指向的target的运行。上述例子中,compile的运行必须后于clean的运行,而run的运行又必须后于compile的运行。
target
是这个文件的主体部分,我们需要在里面指明我们需要做什么,这里我们可以使用delete
、mkdir
等命令进行文件的操作,也可以使用java
、javac
等命令进行文件编译运行,还可以配合Junit测试使用,具体的语法可以上网查。这里提醒一点,运行GUI界面java程序需要设置java
标签中的fork属性为yes
。
实现简单计算器
这里需要用Java写一个图形化界面的计算器,主要用到的时候GUI设计的知识和事件监听器。TA检查一般不会很严格,重点检查的是输入非数字符号、除0操作等的结果,这里自己稍加判断就可以了,相应的代码在Github上也有。
Junit学习
Junit是一个开源的Java测试框架,简单来说就是提供给开发者一个工具,我们可以预先写好我们需要测试的内容,然后运行junit测试,通过比对我们可以在一定程度上判断程序是否正确。
Junit的使用很简单,实训环境已经提供了相关的包,添加到编译目录后,自己编写一个测试类,下面举个例子。
1 | import static org.junit.Assert.*; |
分析:@Test
称为元标记,表明这个函数是一个测试,里面填写要测试的东西,然后使用assertEquals()
来比对程序运行结果和我们预期的结果。元标记
还包括@ignore
(运行后将会忽略这一个测试)、@BeforeClass
(一般是预先实例化一个对象)、@AfterClass
(释放资源)。写完之后我们编译和运行测试类就可以了。实训环境也提供了Eclipse开发平台,可以直接在里面添加Junit测试,非常方便。
SonarQube使用
SonarQube是一个用于代码质量管理的开源平台,它可以帮助程序员改善代码风格和质量,优化代码结构,是一个很好的工具。具体的做法可以参考我的自学报告。
阶段2
阶段二主要是在现有的代码上进行创新,难度不大,这里就不赘述了,有问题的直接看代码。TA检查会比较松,一般看样子对了就过了,建议大家把问答题做好。
阶段3
阶段三涉及到了图像处理、遍历算法等。这一部分需要大家仔细阅读老师提供的资料,以及自己多上网查一下算法的思路(如宽度优先、深度优先、启发式搜索等),想明白后写的代码其实很少,关键是要弄懂原理。TA检查的时候会对寻路的步数有一定要求。
小结
经历过大一的实训,可能比较多同学都对实训有一点恐惧。但是大二的中级实训也没有想象中的难,熬熬夜是肯定要的,但是时间也相对起来比较宽裕。建议大家可以提前把一些工作做好,因为实训期间有可能撞上其他课程的大作业。最后还是祝愿大家能够顺利完成实训!