石橋秀仁です.

At Wed, 26 May 1999 22:32:42 +0900
  gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

> ぼくは、中学生にやってもいいと思うんだけど、英語(英単語)に抵
> 抗がないかというのと、良いエディタを準備できるかというのと、
> readline付きで irb を使える環境があるかどうかくらいが壁だと
> おもいます。文部省はかたや高校数学でBASIC、かたや100校プロジェ
> クトなので学校でやるなら環境が整ってるかどうかがアヤシイ。

識別子や予約語が英単語ということについては, 「ごめんね,
日本語は使えないの」と謝ってローマ字でやってもらう(^^;
Windows環境はやっかいですが, 本気でやる(教える/学ぶ)気なら,
Linuxくらい入れるでしょう.

# ちょっと乱暴ですか?

> >2. オブジェクトの中身(属性=データと機能=メソッド)
> >「例として時計を考える. 現在時刻(time)という属性.
> >  時刻の表示(show), 時刻の設定(set)という機能...」
> 
> 僕はクラスを説明するとき電化製品の操作を例に取ってます。

そうですね. 能動的機能(メソッド)を持つことと, メッセージを
受け取り活動する受動性の両方をもつものが, よい例だと思います.

# あまりに能動的な主体は, 昨今ではエージェントと呼ぶし.
# オブジェクトのメッセージ交換はパッシブな活動だと思う.

> >3. オブジェクトの概念のOOPL的な表現
> >「現在時刻を設定するときは, clock.setというメッセージを送る...」
> 
> 僕の場合は冷蔵庫を一台作るには new を使うとか、
> 
> 	俺の冷蔵庫 = 冷蔵庫.new
(以下略)
> とここまできて、refrigerator.rb を渡して、冷蔵庫は英語で
> refrigerator で、口語では fridge だよーんとかいいながら、 
> irb で次のを実行して見せる:
> 
> require "refrigerator"
> 
> my_fridge = Refrigerator.new
> my_fridge.store(Cabbage.new)
> my_fridge.contain?(Cabbage)
> my_fridge.contain?(Caviar)

なるほど, 日本語プログラミングができなくてもいいんですね.
便宜上, 概念的な説明は日本語疑似コードですすめて,
コーディングの直前に...
「あっ, ごめん. 日本語使えなかった〜〜〜(^^;;;」
# 説明のためのウソ :-)

# see
# Subject: [ruby-list:14562] Re: 中学生に Ruby (Re: Re: Hater)
# From: Ryuichi Danno <daxanya / rr.iij4u.or.jp>

> 確かにオブジェクトというときは、例えば俺んちの冷蔵庫と君んち
> の冷蔵庫は違うんだという風にオブジェクトの個別性で納得しても
> らうのをとりあえずの主眼にしてもよいと思ってます。一方、クラ
> スといったとき継承は多少副次的な気がしますが、道具にはそれ相
> 応の扱い方があるのは割と本質的に思えます。

最初は,
  オブジェクト=「固有名詞」
  クラス=「一般名詞」
という程度の説明で十分だと思うように, だんだんなってきました.
これでも, "my_fridge = Refrigerator.new"は自然に分かるはず.

> >また, "clock.show"が, 表示するのではなく時刻を返すという点も
> >OO的には普通(問題領域のクラスと見れば)ですが, 初心者にはむしろ
> >  def show; p @date; end
> >となっているほうが分かりやすいかもしれない.
> ># どうでしょうか?
> 
> これは、irb を使うと(多分)解決します。

そうですね. そして, Model-View分割でいうViewのほうを書き換えて,
GUIに表示とか, デジタル時計をアナログ時計にするとか, いろいろ
デモしてみると納得してくれそう(時刻を「返す」ということを).

# このばあいは, showメソッドが上記のようだと, むしろ困る.

---
Hideto Ishibashi <http://vip.cis.kurume-nct.ac.jp/%7Es34204/>