[雑談] ファミリーレストランで考えるクラスとオブジェクト
単なる思い付きレベルですが、クラスとインスタンスの関係をファミリーレストランなどの外食チェーンでたとえてみるとわかりやすいかも。
外食チェーンの場合、メニューは本部が決めて、調理方法も標準化しており、各店舗は本部が決めたメニューを本部が決めた調理方法で提供しています。
これはオブジェクト指向におけるメソッドの定義と実装に近いのではないかと考えています。
チェーン本部が決めたメニューはクラスでのメソッド定義に当たり、調理方法はメソッドの実装に当たると考えると実行主体は各店舗、つまりインスタンスですが、その定義と実装は本部、つまりクラスで行われているということです。
そしてメニュー提供に必要な食材、ジャガイモなり玉ねぎなりといったものがインスタンス変数として定義され、それらの各店舗での在庫がインスタンスにおけるインスタンス変数の値に該当するという感じでしょうか。
これも食材と指定用意すべきものはチェーン本部で決めて、各店舗がその在庫を管理するといったことを考えるとインスタンス変数の定義と値の保持に近い概念のように思われます。
外食チェーンの規模が拡大して各地に展開するようになると地域ごとの限定メニューなどが登場するようになります。
例えば関西圏を担当する関西地区本部を設立して限定メニューを出すといった場合、関西地区本部は本部に対してサブクラスとしてふるまい、基本メニューに関してはメソッドを継承する関係になります。
そして関西本部で基本メニューの味付けを関西風に変えるといった変更を入れるといったことはメソッドのオーバーライドと同じような意味を持ちますし、関東、関西の2本部体制にしたような場合には基本メニューは抽象メソッドとなって、実装は各本部で行うといった形式になるという感じです。
と、ここまで考えてみると継承とポリモーフィズムも外食チェーンでたとえられるので、かなりいい感じです。
ただ、ちょっと難しいのが隠蔽の概念をたとえること。感覚的には店内調理だと裏メニューが出せるけれども、裏メニューを出してしまうとセントラルキッチン方式に切り替えられないといった実装に対する制約が発生するという話もあるのですが、これだと裏メニューというインスタンス独自のメソッドが作れることが前提となってしまうので、一般的なオブジェクト指向型言語とうまく整合しないという難点があります。
この辺は少し説明の方法を考えなければならなそうです。
0コメント