Java Magazine 徽标
最初发表于 Java Magazine 2014 年 5/6 月刊。立即订阅

第 1 部分:BlueJ 中的交互式对象

作者:Michael Kölling

2014 年 5 月发布

交互性和可视化帮助初学者了解和形成心智模型。

与人们谈论如何学习编程,尤其是如何学习用 Java 编程时,BlueJ 环境是经常被提及的一个很好的入门级环境。并且有很好的理由:BlueJ 是一个优秀的环境,可以通过它很好地了解面向对象的编程的基本原理。当被问及为何初学者不应仅通过使用 Eclipse 或 NetBeans(因其优秀的工具集和强大的功能而著称)开始时,答案通常显示 BlueJ 的简单性和交互性对于深入了解编程原理具有巨大价值。

但这究竟意味着什么?

谈及 BlueJ 时,交互性 的含义和重要性并非显而易见。在这个由两部分组成的系列文章中,我们将详细探讨 BlueJ 的交互特性,了解它们的功用和重要性。

无关语法

学习编程并不是学习语法。至少不是主要关于语法。编程初学者往往疲于将分号放在正确的位置、匹配大括号或记住 for 循环的语法。他们经常认为编程就是学会使用语法。当然,事实并非如此。

远不止语法

学习编程并不是学习语法。至少不是主要关于语法。只要编过程的人都知道语法既不是重点,也不是难点。
只要编过程的人都知道语法既不是重点,也不是难点。事实上,我教过的每个学生最终都会学会他们的第一个编程语言的语法。有些人可能刚开始时觉得语法有点难,但这实际上是比较容易的部分。

不;编程 — 在这种情况下,是面向对象的编程 — 是学习如何将问题转换成程序结构、如何设计对象交互,以及如何构造类。它是关于设计算法和让对象结构交互。这才是难点。

为了有效地解决这个问题,关键的是拥有一个成熟的对象交互心智模型 — 无论是对象交互通常的工作方式,还是它们在您使用的特定程序中的安排方式。

以下是初学者与专家之间的重要差别:专家对于面向对象的基本原理有成熟的心智模型,而初学者没有。初学者需要建立 这种心智模型,而编程教学环境必须帮助学员实现此目标。

专家环境和初学者环境

针对专业人士设计的环境 — NetBeans、Eclipse 等 — 非常适合专家使用。它们为技艺娴熟的程序员提供了很大的工具集,但很少帮助初学者培养他们成为优秀程序员所需的心智模型。

这些环境主要关注的是源代码。使用这些系统的初学者盯着的是代码行,因此无怪乎其所思也是代码行。然而,真正更难也更重要的是学习基本抽象:类、对象和交互。这些在专业环境中少有体现。例如,在典型界面中,对象很少以有形抽象的形式存在。学生们看着一行行 Java 代码,费力理解类与对象之间的区别。

入门工具包

BlueJ 旨在提供适合新手程序员的工具集。它看似简单,做的却是复杂的事,帮助初学者工作和学习。
这对于老练的程序员不是问题,因为他们脑中已经有一个行之有效的模型。但是,这对初学者来说是一个根本性的问题,比分号放在哪儿的问题更难、更基本,而且他们得不到来自环境的帮助。

教学开发环境必须帮助学生建立所需的心智模型,必须将重要抽象(类、对象和方法调用)置于学生眼前,引导他们思考和讨论。

这正是 BlueJ 所做的。这正是从 BlueJ 入手会在编程原理方面为初学者打下更坚实基础的原因。一旦学生开发出好用的面向对象的程序执行模型,他们就准备抛开 BlueJ,转而使用专业环境了。但对程序员而言,基本原理不扎实将是一件很危险的事情。

浅谈简单性

开头我们讲过简单性和交互性是两个重点。简单性比较容易讨论;它易于理解,大多数人很快就能领会。

专业环境提供了许多对专家很有用且经常很重要的工具,但对初学者来说,这些容易成为障碍,而不是帮助。这些工具中,初始者只使用一小部分,但开始时他们并不知道需要使用哪些 部分。由于存在不需要的选项,增加了找到合适的工作流程的难度,第一次遇到时,熟悉环境明显比较困难。

可视化

BlueJ 具有的各种小功能是许多其他环境中没有的;其中最重要的是更高的交互性和可视化水平。这些是学习编程和形成心智模型的重要工具。
对于不需要的人来说,选择是一个麻烦,而不是好事。

BlueJ 旨在提供适合新手程序员的工具集。它看似简单,做的却是复杂的事,帮助初学者工作和学习。很快,用户开始熟悉环境,BlueJ 融入后台。初学者无需考虑环境,只需考虑编程原理。开发环境成为无声的助手,而不是本身构成要掌握的问题。

newtojava-f1

图 1

BlueJ 的界面(参见图 1)看起来很简单,没有压力。不应因此误以为其功能简单。BlueJ 提供了一些高级工具,可帮助初学者成长,稍后我们将讨论其中一些工具。实际上,BlueJ 的一个最大成就是以简单的方式呈现一个复杂的问题领域 — 编程。Antoine de Saint Exupéry 有一段著名的话,很准确地表达了 BlueJ 的主要设计目标之一:

“达到完美的条件,
并不在于无以复加,
而在于减一分则损。”

但同样必须注意的是,这并不意味着教学环境就是专业版的简化版本。BlueJ 的工具集不是一个更大系统的子集。它并不仅仅是提供更少的工具,而是提供不同的 工具。

BlueJ 具有的各种小功能是许多其他环境中没有的;其中最重要的是更高的交互性和可视化水平。这些是学习编程和形成心智模型的重要工具,因此,它们将成为本文接下来讨论的重点。

重磅特性:交互和可视化

有一期 Java Magazine 通过一个小型编程示例介绍了 BlueJ 的特性,另外一期详细讨论了 BlueJ 中的测试。

这两篇文章都提到了 BlueJ 的交互特性并利用了其中部分特性。但也只是通过它们得以一窥 BlueJ 工具集的部分特性。我们将更深入地讨论 BlueJ 的交互特性 — 本文只是开个头,其余内容将在第 2 部分中介绍。

类和对象

与本文有关的 BlueJ 功能的第一个、最明显也是最基础的方面是其类和对象的呈现形式。

打开 BlueJ 时,首先展现在用户面前的是一张展示项目中的类及其关系的关系图。图中箭头显示继承和使用关系 — 当一个类引用另一个类时的关系。

基本知识

BlueJ 是一个优秀的环境,可以通过它很好地了解面向对象的编程的基本原理。
然后,用户可以右键单击其中任何一个类并从该类的菜单中调用构造函数,以交互方式创建对象(参见图 2)。该类的每个构造函数都显示在此菜单中,可以交互调用。对象一经创建,即以红色显示在主窗口底部的对象栏中(参见图 1)。

newtojava-f2

图 2

创建对象后,会通过一个菜单提供对象的所有公共方法,可以从此菜单中选择任何一个公共方法进行交互式调用(参见图 3)。如果该方法有参数,输入即可;否则,该方法将立即执行。

newtojava-f3

图 3

这为什么重要呢?

即便是到目前为止所显示的这几个简单的可视化和交互示例也对了解面向对象原理有重要影响。

首先,演示了如何将程序分解成类。该图传达的信息是:面向对象的程序由一组协作的类表示,而且程序的这些部分可以单独查看和了解。与许多其他环境中使用的简单列表相比,用图的形式显示类可以更好地展示类之间的关系。

第二,类和对象之间的区别并不那么明显。对初学者来说,了解这种差异是一个大难题。大多数教师为此费尽心机。在传统环境中,学生首先是看源代码。他们看到了什么 — 类还是对象?好吧,看到的既不是类也不是对象,也可能两者都看到了。到底是哪一种取决于上下文:学生考虑的是程序的静态属性还是动态属性。了解其中差异是很难的。

在 BlueJ 中,区别显而易见:我们可以从类创建对象。实际上,我们可以创建任意数量的对象。在 BlueJ 中,从来不会出现这个问题。学生几乎是毫不费力地自动感知了类和对象。可视化和交互(创建对象的行为)都支持这种理解。

第三,显然我们可以通过调用方法与对象通信。学生可以尝试用用对象,看看它们的作用,熟悉参数和返回值,研究项目或项目组成部分。学生通过这些活动积累的理解在开始编写代码后会变得非常有用。

了解面向对象主要是了解定义对象的三大概念:状态、行为和身份。即便是这些简单的交互也已经说明了其中两个概念:行为和身份。(我们很快将看到如何显示状态。)

无需测试驱动程序

更多信息


 免费下载 BlueJ

 BlueJ 图书网站上的示例项目

关于 BlueJ,需要强调的一个重要方面是易于交互:方法可以单独执行,无需编写任何测试驱动程序。无需 public static void main。这意味着编写代码之前类和对象(以及学生)就可以变为活动状态。更轻松、更快的交互意味着更多交互。更多交互意味着更好地了解。

交互的可能性从根本上更改了学生了解编程原理的方式。

总结

使用可视化和交互可以形成更好、更强的心智模型,继而形成程序和编程的推理基础。到此为止,我们只看到了 BlueJ 可视化和交互特性的一个小示例。在下一篇文章中,我们将讨论支持此过程的更多工具。


kolling-headshot



Michael Kölling
是英国坎特伯雷市肯特大学计算学院的教授。他的研究方向包括面向对象系统、软件工具、编程语言、计算教育和 HCI 等领域。他著有两本 Java 教科书,领导开发了 BlueJ 和 Greenfoot。