Transcript
Page 1: パート1 BlueJを使用したオブジェクト指向 · oracle.com/javamagazine ///// july/august 2012 java tech 21 community java in action about us blog //new to java / 状態

ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012

JAVA TECH

19

COMMUNITY

JAVA IN

ACTION

ABOUT US

blog

//new to java /

I前号までのJava Magazineでは、Greenfoot環境を使用し、Javaで

簡単なゲームを作成するプロジェクトについて手順を追って説明しました。Greenfootは、若い学習者の意欲をすぐに引き出すことのできる学習効果の高いツールです。動きのあるグラフィックを簡単に画面上に配置できるため、若者をプログラミングの世界に惹きつけるためには極めて有効です。一方、本シリーズでは、オブジェク

ト指向プログラミングの学習と教育をより体系的に行う方法について考察していきます。そのために、新たにBlueJというツールを使用します。 Greenfootの利点は、視覚的な結

果が簡単に得られるため、プログラミングをすぐに楽しく始められることです。その反面、Greenfootの欠点は、コードの一部が環境(ランタイム・フレームワーク)によって提供されるという、ある種の魔法を使えてしまうことです。また、作成できるプログラムの種類は、2次元のグラフィカル・アプリケーションに限定されています。そこで、一歩前進して、BlueJに切

り替えます。BlueJは汎用開発環境です。つまり、魔法のようにコードが提供

されることはなく、あらゆる種類のアプリケーションを開発できます。その点では、プロフェッショナル向けのIDEとしてよく知られているNetBeansやEclipseなどに近いと言えます。しかし、BlueJはオブジェクト指向の学習に特化したIDEであり、さまざまな理由で、大規模なプロフェッショナル向けの環境よりもはるかに初心者の利用に適しています。本記事では、すでにプログラミング

を習得し、プログラミングを初心者に教えるためのツールを探している読者をおもな対象として、BlueJの概要を説明します。特に、高等学校の上級生に向けた大学レベルの講座(たとえば能力の高い高校生を対象としたコンピュータ・サイエンス・コース)またはプログラミング・クラブでの教育活動には最適の内容となっています。BlueJとは何か、そしてBlueJで何ができるかについて説明します。本記事を読み進めるにあたって、

BlueJをダウンロードしてインストールすることをお勧めします。さらに、「people」プロジェクトをダウンロードして、本記事の記述に沿って実際に操作してください。な お 、次 号 以 降 の J a v a

Magazineでは、BlueJとJavaを利用したオブジェクト指向プログラミングの学習に使用できる、小規模なプロジェクトを紹介する予定です。

単純さ初心者にオブジェクト指向とJavaを教えると言うと、多くの人から最初に「なぜNetBeansやEclipseや(ここにお好きな開発環境を当てはめてください)を使わないのですか」と尋ね

られます。その答えは、初心者向けの開発環境に求められることと、プロフェッショナルのプログラマ向けの開発環境に求められることとは、大きく異なるためです。プロフェッショナルにとって有用な

ソフトウェア・ツールの多くは、初心者にとっては、煩雑で混乱を招く不要なハードルに過ぎません。大規模なプロフェッショナル向けの環境を使用した場合、学習者は、プログラミングの概

体系的かつ実践的なJava学習法MICHAEL KÖLLING

BIO

図1写真: JOHN BLYTHE

パート1

BlueJを使用したオブジェクト指向の学習と教育

Page 2: パート1 BlueJを使用したオブジェクト指向 · oracle.com/javamagazine ///// july/august 2012 java tech 21 community java in action about us blog //new to java / 状態

ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012

JAVA TECH

20

COMMUNITY

JAVA IN

ACTION

ABOUT US

blog

//new to java / 念についてではなく、環境について考えることに労力の大部分を費やすことになります。BlueJの第一の特徴は、単純であることで

す(図1参照)。学習者は、この環境をすぐに使いこなすことができます。そのため、環境について教えるのではなく、概念を教えることができます。BlueJを実際に使用してみると、このことがわかります 。学習者は、わずか数時間でこの環境を完全に使いこなします。

ツールセット第二の特徴は、提供されているツールセッ

トにあります。BlueJのツールは、プロフェッショナル向けのIDEと比べ、数が少ないだけでなく、内容が異なります。BlueJのツールは、視覚化、対話型操作、そして実験を促して支援します。プログラミング教育の専門家によって教育理論に基づいて設計されているため、標準的なIDEを使用する場合とは異なる方式での学習が可能です。BlueJのツールには、オブジェクトを使用

して積極的かつ直接的に実験を行うためのメカニズムが組み込まれています。このようなメカニズムは、ほとんどの環境に(教育的な観点から言って)欠けている基本機能の1つです。次に、BlueJでもっとも重要なツールを紹介します。

クラス図最初のプロジェクトを開いたときに最初に表示される視覚的なツールが、クラス図です(図1参照)。クラス図は、プロジェクトのメイン・ビューであり、プロジェクトに含まれるクラスとそれらのクラス間の関係を示します。クラス図を活用することで、学習者は、最初からクラスの構造について考えることができます。学習の

初期段階では、空の画面から始めることはまれです。通常は、学習者にプロジェクト(多くの場合は部分的に実装されたもの)を提供し、それを利用して実験や拡張を行います。

対話型操作によるオブジェクトのインスタンス化クラスを記述してコンパイルした後は、クラス図でそのクラスを右クリックしてコンテキスト・メニューを表示できます。このコンテキスト・メニューには、当該クラスのすべてのpublicコンストラクタが含まれ、ここからクラスのオブジェクトを作成できます(図2参照)。コンストラクタにパラメータがある場合は、必要な値を入力するためのダイアログ・ボックスが表示されます。作成されたオブジェクトは、メイン・ウィン

ドウの下部にあるオブジェクト・ベンチに赤色で表示されます(図1参照)。オブジェクト指向を教える際には、1つのクラスから複数のインスタンスを作成することが重要です。これにより、学習者は、クラスとオブジェクトの違いと関係を容易に理解できます。すなわち、クラスからオブジェクトを作成できるということと、1つのクラスからオブジェクトをいくつでも作成できるということがわかるようになります。従来の環境を使用する場合、学習者がな

かなか理解できない概念の1つにクラスとオブジェクトの違いがあることが知られています。もっとも、数行のコードを見るだけでは、理解できないのも当然です。BlueJの視覚化と対話型操作によって、この問題は完全に解消されます。学習者は、クラスとオブジェクトの違いをすぐに「体得」できます。

オブジェクトの対話型操作オブジェクト・ベンチに作成されたオブジェクトは、publicメソッドを呼び出して対話的に操作できます(図3参照)。コンストラクタと同様、メソッドにパラメータがある場合、その値をダイアログ・ボックスに入力できます。メソッドの動作が完了すると、メソッドの戻り値が結果とともに表示されます。このような簡単な対話型操作を利用して、

コードを迅速かつ徹底的にテストできます。これにより、プロジェクトがどのように動作するのかを調べることや、記述したコードをすぐにテストして、期待どおりに振る舞うかどうかを確認することができます。テスト・ドライバのコードを記述せずにテス

トを実行できるため、従来の環境と比較して、テストのハードルが大幅に下がります。そのため、多くの学習者が、より早い段階からより頻繁にテストを実行します。また、テスト・シーケンスの中で複数の結果を確認できるため、前回のテスト結果に基づいて次のテストを調整できます。事前に記述したスクリプトを使用してテストを実行する場合、このようなことはできません。対話型操作によって、テストが容易になる

だけでなく、オブジェクト指向プログラミングにおける以下の基本原則を強調できます。

■■ プログラムは、相互に作用する複数のオブジェクトで構成される

■■ オブジェクトを操作するためには、オブジェクトのメソッドを呼び出す

■■ メソッドはオブジェクトによって提供される■■ メソッドにはパラメータと戻り値がある■■ パラメータには型がある学習者は、オブジェクトを対話的に操作する

ことによって、学習初日からオブジェクトの考え方を身に付けることができます。これは、比較的古い教科書や標準的なIDEを利用する従来の教育法とは正反対のアプローチです。

組み立てメソッドのパラメータは、事前定義型やプリミティブ型だけでなく、オブジェクトの場合もあります。図4に、Personオブジェクトをパラメータとする例を示します。パラメータのダイアログ・ボックスが表示されたときに、オブジェクト・ベンチにある(型が一致する)任意のオブジェクトをクリックするだけで、そのオブジェクトをパラメータとして渡すことができます。

図2

図3

図4

極めて簡単BlueJは、JUnit テストを作成するためのあらゆる環境の中で、おそらくもっとも便利な手法を提供しています。

Page 3: パート1 BlueJを使用したオブジェクト指向 · oracle.com/javamagazine ///// july/august 2012 java tech 21 community java in action about us blog //new to java / 状態

ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012

JAVA TECH

21

COMMUNITY

JAVA IN

ACTION

ABOUT US

blog

//new to java / 状態BlueJには、オブジェクトを開いて、その中を確認できるインスペクタ機能があります(図5参照)。クラスが同じオブジェクトを2~3件開き、それぞれのフィールドを比較することで、高い教育効果が得られます。すべてのオブジェクトに同じフィールドが存在し、フィールドの値がそれぞれ異なるという事実を確認できます。また、インスペクタを開いたままでオブジェクトのメソッドを呼び出し、値の変化を観察することもできます。これにより、もう1つの重要な概念である、オブジェクトの状態を強調できます。

mainメソッドなしJavaプログラミングの経験者であれば、本記事に沿ってBlueJを操作する中で、あることに気づくでしょう。mainメソッドが見当たらないということです。お気づきのとおり、mainメソッドはありません 。mainメソッドは、Javaプログラムとオペ

レーティング・システムを接続するための手段であり、極めて不格好です。オブジェクト指向とはまったく関係なく、学習者を常に混乱させてきました。BlueJでは、単純な原則から始め、言語特

有の要素は後から追加します。言うまでもなく、必要に応じて、mainメソッドを作成して使用することも可能です。その場合、mainメソッドは、他のすべてのpublic staticメソッドとともにクラスのメニューに表示され、

このメニューから呼び出すことができます。ただし、BlueJにおけるmainメソッドは特別なメソッドではありません。そのため、public、static、void、そしてString[]の意味を学習者が完全に理解してから導入することができます。

コード・パッド教育に役立つもう1つのツールが、コード・パッドです。図1の右下にある領域がコード・パッドです。コード・パッドには個々の式や文を入力でき、入力した式や文はすぐに実行されます。式を入力した場合は、結果が即座にコード・パッドに表示されます。結果がオブジェクトである場合、そのオブジェクトをオブジェクト・ベンチにドラッグして、詳細に調べることができます。学習者は、コード・パッドを使用すること

で、任意のコード・スニペットをすばやく簡単に試し、その結果を確認できます。

エディタBlueJのテキスト・エディタでは、メソッド、if文、ループなどのスコープが、それぞれ異なる背景色で強調表示されます(図6参照)。このエディタによる視覚化も、高い教育効果があります。色分けによって、スコープを理解しやすくなり、スコープに関する誤りに簡単に気づくことができます。

単体テストBlueJは、JUnitを使用した単体テスト(ユニット・テスト)と緊密に統合されています。実際、BlueJは、JUnitテストを作成するためのあらゆる環境の中で、おそらくもっとも利便性の高い手法を提供しています。標準的なテスト・クラスを作成できるだけでなく、対話型テストやリグレッション・テストを組み合わせることができます。一連の対話型テストを実行して、その手順をJUnitのテスト・

ケースとして記録し、後で再生することもできます。この機能については、今後の記事で詳し

く説明します。

まとめ本記事では、BlueJ環境における重要なツールについて、概要を説明しました。次回からは、具体的なプロジェクトを題材として、これらのツールを使用して初心者にJavaとオブジェクト指向の基本を教える方法を説明します。それまで、ご自分でBlueJをインストールし、実験を始めてください。 </article>

LEARN MORE• Java SE 7 API

図5

図6


Top Related