Skip to content

Instantly share code, notes, and snippets.

@kazasiki
Created June 23, 2016 03:49
Show Gist options
  • Save kazasiki/e238c0f186472d5e3e4a104ec7a4a7db to your computer and use it in GitHub Desktop.
Save kazasiki/e238c0f186472d5e3e4a104ec7a4a7db to your computer and use it in GitHub Desktop.
へぇボタンで理解するオブジェクト指向の利点
# このコードでは皆さんご存知のへぇボタンを例にあげてオブジェクト指向のいくつかの利点の説明を試みる。
# オブジェクト指向の概念は理解してるけど何がいいのかわからない人向け。
# まずは「へぇボタン」クラスを作ろう。
# クラス名はもちろん「へぇボタン」(Heyでは意味が変わってしまうのでは?と思うけど気にしないことにする)
class HeyButton
# まずは各へぇボタンが保持する情報を定義する。もちろん「へぇボタンを押した数」だ。
# この定義は外部からはこの情報を"読み取る"ことしか出来ないことを意味する。
attr_reader :hey_count
# つぎに初期値を設定する。
# initializeはRubyではクラスのコンストラクタを表すキーワードだ。
# == 実行例
# tamori_s_button = HeyButton.new
# tamori_s_button.hey_count => 0
MIN_COUNT = 0
def initialize
@hey_count = MIN_COUNT
end
# へぇボタンのインタフェースは基本的に「押す」のみ
# == 実行例
# tamori_s_button = HeyButton.new
# tamori_s_button.push => 1
# tamori_s_button.push => 2
# tamori_s_button.hey_count => 2
MAX_COUNT = 20
def push
return @hey_count if @hey_count >= MAX_COUNT
@hey_count += 1
end
# 1つのトリビアを紹介し終わったらカウントをリセットする
# == 実行例
# tamori_s_button = HeyButton.new
# tamori_s_button.push => 1
# tamori_s_button.push => 2
# tamori_s_button.reset => 0
def reset
@hey_count = MIN_COUNT
end
end
# 利点1: インスタンスの独立性
# へぇボタンは番組中に複数存在する。他の人のpushは他の人に影響を及ぼさない。
tamori_s_button = HeyButton.new
bibiru_s_button = HeyButton.new
tamori_s_button.push
tamori_s_button.push # => 2
bibiru_s_button.hey_count # => 0
# 利点2: hey_countの書き換えに対する制限
# カウントは1ずつしか増えない。(連打するほうが楽しいから!)
# 最大値が20であることは全てのインスタンスに対して守られる。
bibiru_s_button = HeyButton.new
25.times.each { bibiru_s_button.push }
bibiru_s_button.hey_count # => 20
# bibiru_s_button.hey_count = 25 もできない ❌
# 勢いでここまで書いた後悔はしてない
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment