🍜

ラーメンで学ぶオブジェクト指向の3要素

2024/02/19に公開

■はじめに

こんにちは。TKです。
私はラーメンが好きです。多い時は週5くらい食べてます。

話は変わりますが社内のnotionに「つよいエンジニアになるには!」的なページにこんな事が書いてありました。

「心...?心で理解するってなんだ...?」
「そんなことより今日は何のラーメン食べようかな・・・」

「・・・これが・・・そうか」
「この丼にあるものが」


 心
 か
  」

というわけで僕が好きなラーメンでオブジェクト指向の3要素を例えて
”心”で理解したいと思います。

■オブジェクト指向の3大要素

1. クラスとインスタンス(カプセル化)

一般的な説明

オブジェクト指向の中でも最も基本的な仕組みです。
クラスは英語のclassで「分類」「種類」といった「同種のものの集まり」という意味を持ちます。
インスタンスは英語のinstanceで「具体的なモノ」「実例」を意味します。
OOPで作られたプログラムが動く時、定義したクラスからインスタンスが作られて、それらが相互作用し合いながら、ソフトウエアの機能を実現します。
言い換えるとクラスはある事物の「設計図」であり、インスタンスはその設計図から作られる具体的な「実例」です。

ラーメンに例える

クラスは「ラーメン屋」という枠組みそのものと表現でき、インスタンスは特定のラーメン屋の実例を指します。
つまりクラスが一般的なラーメン屋の特性(メニュー、場所、営業時間など)を定義しているとすると、インスタンスは「山岡家」や「大勝軒」といった具体的なラーメン屋の実例を指します。
インスタンスはクラスに基づいて作られる実際のオブジェクトであり、それぞれが独自の属性(例:店名、具体的なメニュー内容)を持つことができます。

2. ポリモーフィズム(多態性)

一般的な説明

ポリモーフィズム(polymorphism)は英語で「いろいろな形に変わる」といった意味を持つ言葉で、日本語では「多態性」「多相性」などと訳されます。
OOPにおいては同じ名前のメソッドが異なるクラスで異なる振る舞いをするという概念です。
つまり、同じメソッド名を使っていても、そのメソッドが呼ばれるインスタンスによって実行される内容が変わるということです。

ラーメンに例える

先程、「クラスはラーメン屋の枠組みそのものである」という表現をしました。
ラーメン屋(クラス)には「ラーメンを提供する」という動作(メソッド)があります。
この動作はラーメン屋であれば共通する機能ですが、具体的な提供方法は各ラーメン屋(インスタンス)によって異なります。

  • 「一蘭」のインスタンスは、オーダー用紙に記入された「薬味の有無」「こってり度」などに応じて味を調整してから提供します。
  • 「吉村家」のインスタンスは、ラーメンを提供時に「麺の硬さ」「味の濃さ」「鶏油の量」を客の好みに応じて調整してから提供します。
  • 「二郎」のインスタンスは、「ヤサイ」「ニンニク」「アブラ」「カラメ」のパラメーターを客が宣言することで、それぞれの量を調整してから提供します。[1]

これにより、各ラーメン屋は独自の特徴を保持しながらも、一般的な「ラーメンを提供する」という行動を共有できます。

3. 継承

一般的な説明

あるクラスが特性を引き継いで、新たなクラスとして定義されることをいいます。
クラスBを定義する時、クラスAを継承することを「クラスBがクラスAを継承した」と表現します。
現実世界に例えるならば「動物(Animal)」がクラスであり、これを継承(extends)したものが「両生類(Amphibian)」「哺乳類(Mammal)」などに相当します。

ラーメンに例える

俗に言う「インスパイア系」です。
「家系」「二郎系」「ちゃん系」「ラーショ系」といったラーメンのジャンルには其々オリジナル(基底クラス)となるラーメンが存在します。
このラーメンに対して「オリジナルのレシピを踏襲した上でアレンジすること」が継承になります。

・二郎系を継承したラーメン

「ラーメン二郎」の特徴である、大量のモヤシとキャベツ、オーション麺、大型のブタ(焼豚)、豚肉や背脂を基本としつつ、スープの方向性を変えたりオリジナルのトッピングの追加などを行います。

・家系を継承したラーメン

「吉村家」が提供するラーメンを基幹クラスとし、豚骨醤油ベースの濃いスープ、中太の麺、そして海苔、ほうれん草、チャーシューなどのトッピングが特徴です。
さらに「本家の免許皆伝を経て独立した直系」、「乳化率の高いスープが特徴の壱系」など様々なサブクラスが存在します。

・ちゃん系を継承したラーメン

昔ながらの中華そばに近いビジュアル、動物系の清湯スープ、薄口醤油、切りたてのチャーシューというスタイルが特徴。
早朝から営業している場合も多く、食券購入時にご飯用の食券が別で設置されている事が多い。

このように、「〜〜系」というクラスを継承したインスパイア系ラーメン店(サブクラス)は、基本的なレシピや特徴を継承しながら、店舗ごとに独自の個性や特色を加えることができます。

■感想

自分にとってはこれ以上ないくらいわかりやすい内容になったと思います。
ただ正直に言って穴だらけの理解なのは認識していますので、これをベースにさらに理解を深めていきたいと思います。
ちなみに私は新潟県上越市にある「ミサ」の味噌ラーメンが一番好きです。
二郎だと目黒が好きです。

■参考書籍

オブジェクト指向でなぜつくるのか 第3版

私とラーメンについて語りたい人は、記事下部のカジュアル面談から備考に「ラーメンの件」と書いて申し込みください。

脚注
  1. 二郎が「ラーメン」に文類されるか否かの議論については一旦省略させていただきます。 ↩︎

ソーシャルデータバンク テックブログ

Discussion