OOPが存在する理由:コードは現実世界のものを扱う

Why OOP Exists

この記事は、オブジェクト指向プログラミング(OOP)の核心的な考え方を、著者が大学時代に図書館管理システムを実装したエピソードを通して解説します。著者は友人と分担作業をする中で、本や著者といった実世界のエンティティを抽象化し、操作する関数群を設計する重要性に気づきます。OOPは、データと関数をまとめるための仕組みであり、Pythonのclassによる名前空間の提供がその実現を容易にします。この記事を読めば、OOPがなぜ存在するのか、その本質を理解できるでしょう。

OOPの核心的なアイデアは、扱いたいエンティティに対して高レベルの抽象化を作成し、それらを扱いやすくすることです。
  1. reaanb2

    この記事は、オブジェクト関係マッピング、ボイラープレートコード、データベーススキーマのコードへの重複、ナビゲーショナルデータアクセス、インピーダンスミスマッチにつながるOOPアプローチを説明している。データモデリングと分類法を中心にOOPを定義しており、責任を中心に定義していない。「聞くな、命令しろ」や「単一責任」といった原則は無視されている。図書館管理システムにおいて、本にどんな責任があるだろうか? ない。本は記録された事実の対象に過ぎず、より良いアプローチは、解決空間の振る舞いの構成要素を特定し、それらをクラス/オブジェクトとして構築し、事実をオブジェクト内にカプセル化するか、オブジェクト間で通信させることだ。

  2. mickeyp

    OOPは良い。アーキテクチャや設計が要求するなら、OOPを使わないのも良い。

    人々が忘れているのは、GoFのデザインパターン本と同様に、言語やフレームワークは進化するということだ。

    デコレータパターンは、1990年代にはニッチだが有用な抽象化だった。今日のPythonでは、@decorateをそのように使える。それは進化だ。

    OOPも同じだ。カプセル化と、カプセル化するスロットと同じ場所にメソッドを置くことは、基本的な構造体に対する信じられないほど強力なアップグレードだった。今では、ほとんどの言語が第一級関数とレキシカルスコープを持っているので、自分でカプセル化を構築できる。

    すべて良いことだ。最適なものを使えばいい。

  3. mrkeen

    確かに、これはかなり速く読んだが、これは単なる構造体だ。

    ここでモデル化されている「振る舞い」はデータアクセスだった。.nameの代わりに.name()と書くこと。

    これらの構造体を手動でパッキングする手間を省くには、コンストラクタを完全に書き出すことだ。記事はそれを「自動」と呼んでいた。

    (C99の構造体では、コンストラクタを書き出す必要すらない。おそらく他の現代の言語でも同様だ。)

  4. eru

    比較対照:https://www.youtube.com/watch?v=wo84LFzx5nI

  5. tarix29

    この記事の何もOOPに固有ではない。これらはすべて構造体と静的ディスパッチで実現できる。ドット記法をサポートするGoやZigのような言語のコードも、かなり似たものになるだろう。

この日のほかの記事

2026-08-31