Halo

A magic place for coding

0%

中山大学中级实训

前言

  相信经历过初级实训的同学,对于实训都会有一种恐惧感,虽然中级实训也需要大家付出很多精力,但是难度相比起初级实训,还是简单不少。中级实训是基于一个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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<project name="TestHelloWorld" default="run" basedir=".">
<target name="clean">
<delete dir="dest"/>
</target>

<target name="compile" depends="clean">
<mkdir dir="dest"/>
<javac srcdir="src" destdir="dest"/>
</target>

<target name="run" depends="compile">
<java classname="HelloWorld" classpath="dest" />
</target>

</project>

分析:项目名叫TestHelloWorld,这个是可以自己命名的,default属性表明的是默认运行的target。由于Ant工作的核心是依赖关系,因此,这个一般写最后一个运行的target的名字。接下来看target标签,含有namedepends属性,depends属性指明了当前target运行必须后于其所指向的target的运行。上述例子中,compile的运行必须后于clean的运行,而run的运行又必须后于compile的运行。
  target是这个文件的主体部分,我们需要在里面指明我们需要做什么,这里我们可以使用deletemkdir等命令进行文件的操作,也可以使用javajavac等命令进行文件编译运行,还可以配合Junit测试使用,具体的语法可以上网查。这里提醒一点,运行GUI界面java程序需要设置java标签中的fork属性为yes

实现简单计算器

  这里需要用Java写一个图形化界面的计算器,主要用到的时候GUI设计的知识和事件监听器。TA检查一般不会很严格,重点检查的是输入非数字符号、除0操作等的结果,这里自己稍加判断就可以了,相应的代码在Github上也有。

Junit学习

  Junit是一个开源的Java测试框架,简单来说就是提供给开发者一个工具,我们可以预先写好我们需要测试的内容,然后运行junit测试,通过比对我们可以在一定程度上判断程序是否正确。
  Junit的使用很简单,实训环境已经提供了相关的包,添加到编译目录后,自己编写一个测试类,下面举个例子。

1
2
3
4
5
6
7
8
9
10
11
12
import static org.junit.Assert.*;
import org.junit.Test;

public class HelloWorldTest {
public HelloWorld hellowolrd = new HelloWorld();

@Test
public void testHello() {
hellowolrd.hello();
assertEquals("Hello World!", hellowolrd.getStr());
}
}

分析@Test称为元标记,表明这个函数是一个测试,里面填写要测试的东西,然后使用assertEquals()来比对程序运行结果和我们预期的结果。元标记
还包括@ignore(运行后将会忽略这一个测试)、@BeforeClass(一般是预先实例化一个对象)、@AfterClass(释放资源)。写完之后我们编译和运行测试类就可以了。实训环境也提供了Eclipse开发平台,可以直接在里面添加Junit测试,非常方便。

SonarQube使用

  SonarQube是一个用于代码质量管理的开源平台,它可以帮助程序员改善代码风格和质量,优化代码结构,是一个很好的工具。具体的做法可以参考我的自学报告

阶段2

  阶段二主要是在现有的代码上进行创新,难度不大,这里就不赘述了,有问题的直接看代码。TA检查会比较松,一般看样子对了就过了,建议大家把问答题做好。

阶段3

  阶段三涉及到了图像处理、遍历算法等。这一部分需要大家仔细阅读老师提供的资料,以及自己多上网查一下算法的思路(如宽度优先、深度优先、启发式搜索等),想明白后写的代码其实很少,关键是要弄懂原理。TA检查的时候会对寻路的步数有一定要求。

小结

  经历过大一的实训,可能比较多同学都对实训有一点恐惧。但是大二的中级实训也没有想象中的难,熬熬夜是肯定要的,但是时间也相对起来比较宽裕。建议大家可以提前把一些工作做好,因为实训期间有可能撞上其他课程的大作业。最后还是祝愿大家能够顺利完成实训!

Welcome to my other publishing channels