top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_536

Ruby:◇継承 ・・・ 【童話で学ぶ Ruby:20歩目】

 2008-12-09
第20歩
 ◇継承

  ・リンゴを食べる小人さん(?)
   ※Rubyプログラムを書いて実感するための
    例題プログラムが続く
   ・(前回はこちら

  今回の ◎ コロボックルのいる森 ◎
  で新しいキャラクターが登場!

  [ 第三話:エノキノヒコ 登場 ]
  respect for 「佐藤さとる」さん
  thanks for 「アンの小箱」さん

長いので、追記に ▼

※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:196頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  [ 第三話:エノキノヒコ 登場 ]
      [ 前回 ]

 ヒイラギノヒコは今日も黙
々と働いている。弟の「ツバキノヒコ」が、今日も楽しみに
待っている。おいしい「ハタノメウオ」をじっと待っている。
 いつものように、ヒイラギノヒコの帰り道。
 と、いつもと違うぞ。カアサノキという、森の入り口に立
つ大きな木。雨に濡れた下の葉の陰に、何かがいる。うまく
隠れたようだが、お腹が出ていて、ヒイラギノヒコは笑いを
こらえ切れない。
 ヒイラギノヒコが、カアサノキが完全に見えるところまで
廻りこんだ、と同時、勢いよく飛び出した。エノキノヒコだ!
 「腹減った」
 それしか言わない。この「エノキノヒコ」が話す言葉は3
つだけだ。「腹減った」「うまい」、そして「ありがと」。
ちゃんとお礼を言うから仕方がない。ヒイラギノヒコは、い
つも「ハタメノウオ」を分けてやるのだ。


 ●登場人物・物(オブジェクト)
  ・ヒイラギノヒコ
  ・エノキノヒコ
  ・ハタノメウオ


 ●継承を使った クラス作り
 ◆いつもお腹が空いている(クラスの継承)
  ※class Hiiragi を継承する

・エノキノヒコは、いつもお腹が減っている
 「うまい」「ありがと」は言うけれど
 ずっと「腹減った」だ。

 ※前回、作った
  Hiiragiクラスは
class Hiiragi
def hitting(a) # メソッドの定義
a.shift
end
def carry(a,b)
sakana = hitting(a) # 先頭の要素をひとつとりだす
b.push sakana # 取り出した要素を格納
puts "ほい" # しゃべる
end

def eats(a) # メソッドの定義(追加)
if a.sweets > 6 # 7以上であれば「うまい」
puts "やりー!"
else
puts "ケッ!"
end
end

def hungry? # メソッドの定義(追加)
rand(3)==0 # 0であれば 真(true)返す
end

def tumamigui(a) # メソッドの定義(追加)
return if a.empty? # びくになければ戻る
if hungry? # お腹減って 1匹食べてしまう
fish = hitting(a) # びくから ひとつとりだす
eats fish
else
puts "我慢我慢"
end
end
end


 ・このクラスの次に、次のようにして
  これを継承したクラスを作る
class Enokino < Hiiragi
end

 ※この  < Hiiragi が継承していることを示し
  この場合
  クラス「Enokino」は、クラス「Hiiragi」を継承している

  ●スーパークラス
   継承されるクラスのこと
  ●サブクラス
   継承を使って新しく作成されたクラス

  ・クラス「Enokino」は、スーパークラス「Hiiragi」の
   サブクラスだ。

  ・継承を使って作成された新しい (サブ)クラスは
   スーパークラスの機能をすべて引き継ぐ

 ◆お腹空いてる!(継承したクラスのメソッド利用)
  ※Enokino(エノキノヒコ)は
   いつも お腹が空いているわけだが
   
   普通に、クラス Hiiragi(ヒイラギノヒコ)
   を利用したのでは

  0 から 2 までの値を返し、
  0 のときにつまみ食いをしてしまう (1/3 確率)
  であるから、
class Hiiragi
def hungry? # メソッドの定義(追加)
rand(3)==0 # 0であれば 真(true)返す
end
end

 これでは、「いつもお腹を空かせている」こと
 にならない。

 ◆お腹いつも空いてる!(メソッドのオーバーライド)
  ※Enokino(エノキノヒコ)は、いつも
   「お腹を空かせている ことを利用できるように
   前述の hungry メソッドを書き換える
   
   スーパークラス「Hiiragi」のメソッド
   hungry を書き換えるわけではなく

   新しく作成する
   ・クラスEnokino(エノキノヒコ) に
class Enokino < Hiiragi
def hungry? # メソッドの定義(追加)
true # 常に 真(true)返す
end
end

 を定義する

  ●オーバーライド
   スーパークラスのメソッドを継承したサブクラスの中で
   再定義すること

この、新しい クラス Enokino を利用した全ソースは

 ●本日の脚本(ソース)
class Hatanome
def initialize # 初期化(一度だけ実行)
@hits = rand(10); # 魚の番号 確定
end

def hits
@hits
end
def sweets
@sweets = rand(10); # 魚のうまさ
end
def inspect
"ハタノメウオ(#{@hits})"
end
end
class Hiiragi
def hitting(a) # メソッドの定義
a.shift
end
def carry(a,b)
sakana = hitting(a) # 先頭の要素をひとつとりだす
b.push sakana # 取り出した要素を格納
puts "ほい" # しゃべる
end

def eats(a) # メソッドの定義(追加)
if a.sweets > 6 # 7以上であれば「うまい」
puts "やりー!"
else
puts "ケッ!"
end
end

def hungry? # メソッドの定義(追加)
rand(3)==0 # 0であれば 真(true)返す
end

def tumamigui(a) # メソッドの定義(追加)
return if a.empty? # びくになければ戻る
if hungry? # お腹減って 1匹食べてしまう
fish = hitting(a) # びくから ひとつとりだす
eats fish
else
puts "我慢我慢"
end
end
end

class Enokino < Hiiragi
def hungry? # メソッドの定義(追加)
true # 常に 真(true)返す
end
end


river = Array.new(3){Hatanome.new}
biku = []
enokino = Enokino.new # エノキノヒコ

while river.size > 0
enokino.carry(river, biku)
p biku.size #= > 獲って「びく」に入れた
end

while biku.size > 0
enokino.tumamigui(biku)
if biku.size > 0
p biku
end
end



今日の 留意!
継承は機能を引き継ぎ、その動きを変えたいときは
 オーバーライド する
継承 の書き方

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/536-95336cc0
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。