オブジェクト指向を説明しようとして、Memoについて考えてみた。(Ruby)
例えば メモアプリで 1つのメモをMemo、全てのメモのまとまりをMemoListとして管理するときは、次のように表現できそう。 Memoは通し番号(id)と内容(content)を持っているものとし、MemoListはそれらを取りまとめる役割を担っている。
class Memo attr_accessor :id, :content def initialize(id, content) @id = id @content = content end end class MemoList def initialize @memos = [] end def add(memo) @memos << memo end def find(id) @memos.find {|memo| memo.id == id } end end memo_list = MemoList.new memo_list.add(Memo.new(1, "1番目のメモ")) memo_list.add(Memo.new(2, "2番目のメモ")) memo_list.add(Memo.new(3, "3番目のメモ")) third_memo = memo_list.find(3) third_memo.content #=> "3番目のメモ"
オブジェクト化しておくことで、メモに対する機能を増やしたいときは、class Memo
にメソッドを生やすとさっと実現できる。
例えば memoの文字数を知る機能をつけたい時は、次のようにすると memo.length
を使えるようになる。
class Memo # ...省略... def length @content.length end end
他に、全てのメモの文字数の合計を把握したいとき、それはMemoListの仕事と考えて次のようにしてみた。
class MemoList # ...省略... def all_length @memos.sum {|memo| memo.length } end end
こんな感じで、〇〇をやりたいときは誰(どの"モノ")にやらせるのか考えつつ機能を生やす。 今回のイメージとしては、次のような感覚で考えていた。
- Memo → ペラ1枚の紙としての "モノ"
- MemoList → 紙束としてまとまった "モノ" (ブロックメモとして売ってるね)
他にも動物とかで継承の考え方を示してみたいけど、一旦また今度にしよう。