【ちゅうしょうか】

抽象化 とは?

最終更新:
💡 「中身を知らなくても使える」を実現する魔法

複雑な詳細を隠して、本質的な部分だけを取り出して扱えるようにする設計手法。利用者が内部の仕組みを知らなくても使えるようにすることで、複雑さを管理する。

📌 このページのポイント
必要な操作で複雑な仕組みを扱う 利用者は必要な操作を使う ハンドル 方向を変える 必要な操作を表す接点 内部に任せる エンジン制御 燃焼などの詳細 ギア制御 切り替えの詳細 目的に必要な部分を取り出す 動作やエラーの約束も大切
車の操作を使ったたとえ。矢印は利用側から内部処理へ任せる関係で、制御手順の詳細ではない。青は使う接点、灰は省略した内部、橙の線は抽象化の境界。
ひよこ ひよこ
抽象化ってどういうことなの?
ペンギン先生 ペンギン先生
車の運転を思い浮かべてみて。ハンドルを回したりアクセルを踏んだりすれば、エンジンの燃焼を逐一指示しなくても運転できるね。プログラミングでも、必要な操作を取り出して、利用側が扱わなくてよい詳細を隠すんだよ。
ひよこ ひよこ
具体的にプログラミングではどう使うの?
ペンギン先生 ペンギン先生
たとえばsendEmail(to, subject, body)という関数なら、使う側は通信手順を毎回書かなくて済むね。内部を変えても、引数だけでなく戻り値・エラー・動作の約束を保てば、利用側の変更を抑えやすくなるよ。名前と引数が同じだけでは互換性を保証できないんだ。
ひよこ ひよこ
抽象化で気をつけることってある?
ペンギン先生 ペンギン先生
内部の事情が表に出る「漏れのある抽象化」があるよ。SQLの処理手順を隠しても、遅い問い合わせを調べるには実行の仕組みを知る必要がある場合があるね。抽象化は詳細をすべて不要にする魔法ではないんだ。層を増やしすぎて処理を追いにくくすることにも注意しよう。
ひよこ ひよこ
ちょうどいい抽象化のレベルってどうやって判断するの?
ペンギン先生 ペンギン先生
使う人が何をしたいか、どの変更を内部に閉じ込めたいかを考えよう。似たコードでも、別の理由で変わるなら無理に共通化しないほうが分かりやすいこともあるよ。重複の回数だけで決めず、操作の意味やエラーの扱いまで共通にできるか確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「抽象化」って出てきたら「複雑な詳細を隠して必要な部分だけ見せるようにする設計の考え方だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「abstraction」 = 抽象化・抽出
💬 具体的な仕組みのうち、目的に必要な部分を取り出して扱うというイメージだよ

参考資料

← 用語集にもどる