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 是一个用于代码质量管理的开源平台,它可以帮助程序员改善代码风格和质量,优化代码结构,是一个很好的工具。具体的做法可以参考我的 [自学报告](https://github.com/leungyukshing/GridWorld/blob/master/Part1/Report/Part1% E8%87% AA% E5% AD% A6% E6%8A% A5% E5%91%8A.md)。

阶段 2

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

阶段 3

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

小结

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

Welcome to my other publishing channels