Javaを教える

プログラミングを教える&学ぶとき、いつの時代でも一番大事なのは、実体と参照(メモリとポインタ)。そのことを改めて感じた、Javaの特訓もようです。

this

先週は、生徒さんに「今までJavaを勉強してきて、理解できなかったことをリストアップしなさい」という宿題を出すことに。

すると、みんな共通して「this」を挙げてきました。

 return this.name;

はわかるけど、

 return this;

が、なんのことなのかさっぱり・・・。ということのようです。

アレアレ?おやおや?・・もうちょっと探りをいれてみることに。

static

 public class Test{
   public static void main( String[] args ){
     int a = Integer.parseInt( args[0] );
     int b = Integer.parseInt( args[1] );
     int result = a + b;
     System.out.println( result );
   }
 }

前の授業では、こんなプログラムをサラッと書いてのけていますが、osaru326さんからのコメントにもあったとおり、私にも、このプログラムを理解するのはむずかしい!

そこでこちらからは、こんなことを質問してみました。

 私 :staticメソッド使ってるけど、これはどういうものか説明できる?
 生徒:静的なもの
 私 :静的ってどういうこと?
 生徒:・・・・
 私 :じゃあ静的じゃナイって、どういうこと?
 生徒:実体があるもの
 私 :じゃあ静的って、実体がないもののこと?
 生徒:はい
 私 :実体がないのに、なんで実行できるの?
 生徒:・・・・
 私 :実体って、何?

thisの問題も然り、結局は何が理解できていないのか、だんだんわかってきました。


「参照」だ!

 変数 や this や クラス名は、実体を「指す」もの = 参照

生徒さんは、この基本中の基本が体得できてないんですね。

プログラムを書くときに一番大切なことは、

  • 実体(メモリ領域・インスタンス)がどこにあるのか
  • その実体にアクセス(参照)するにはどうすれば良いのか

を、瞬時に判断できること。だと私は思います。

こんな絵を描いてみました。



この絵を描いたら、生徒さんは、thisを含めて、教科書にのってるソースコードがスーッと理解できるようになったそうです。

Javaが登場以来、「ポインタやメモリ管理が不要な言語」なんていって、そのあたりの勉強をおろそかにしがち。確かに楽にはなったのですが、なくなったわけではありません。ココは、解るまでくりかえし学習が必要なところです。

「参照・実体」という言葉がもつ語感も良くないのかもしれませんね。概念的というかなんというか・・。本当は、すこぶる物理的なモノなのに(なにかをゴマカシてる感じもしますw)。

他にも
  • 文 と 式 を説明できるか?
  • クラス と プリミティブ型 を説明できるか?
  • Exception(例外)を説明できるか?その処理をできるか?
  • 入出力をあつかえるか?
  • Collectionをあつかえるか?

こういう基本的なところを、根掘り葉掘り、みっちり復習しました。まずは基本を固めないと、「プログラミングは面白い」とは感じられないのかもしれませんね。これをきっかけに、少しでもJavaの授業が楽しくなることを期待してます。

※javaの教科書からアプレットは外そうよ。と、本気で思います。

今日でJavaの特訓は終わり。来週から本格的にUMLの授業に入る予定です。


コメント

コメントしてください

closed.