オブジェクト指向プログラミング
カプセル化とは、オブジェクト指向プログラミングにおいて、データとそのデータを操作する関数を結び付け、両者を外部からの干渉や誤用から守ることである。データのカプセル化は、OOPの重要な概念である情報隠蔽(英語版)にも通じる。
クラスがメソッドを通じてのみオブジェクトの内部データへのアクセスを許可し、それ以外の呼び出しコードにアクセスを許可しない場合、これはカプセル化として知られる強力な抽象化、または情報隠蔽の形態である。いくつかの言語 (Javaなど)では、クラスがアクセス制限を明示的に行うことができる。例えば、内部データであることをprivateというキーワードで指定し、クラス外のコードが使用することを意図したメソッドをpublicというキーワードで指定することができる。
アラン・ケイによれば “object-oriented”(オブジェクト指向)という言葉は、1967年ごろケイ自身が考案したものであるという。しかし、現在のオブジェクト指向プログラミングという文脈における「オブジェクト」や「指向」を表す用語が初めて登場したのは、1950年代後半から1960年代前半にかけてのマサチューセッツ工科大学(MIT)においてである。 1960年代初頭の人工知能グループ界隈では、「オブジェクト」はプロパティ(属性)を持つ個体識別可能なアイテム(LISPの atom)を意味していた。 後にケイは、1966年にLISPの内部構造を詳細に理解したことが彼の考え方に強い影響を与えたと述べている。
MITにおける初期の例としては、この他にも、1960年から1961年にかけてアイバン・サザランドが作成したSketchpadが挙げられる。サザランドは、1963年の技術レポートの用語集 (Sketchpadに関する自身の博士論文をもとにしたもの)で、グラフィカルなインタラクションに特化しているとはいえ「オブジェクト」と「インスタンス」の概念を定義している (クラスの概念は"master"または"definition"として把握されている)。 また、MIT版のALGOLであるAED-0では、データ構造 (この言語の方言では"plexes"と呼称)と手続きを直接結びつけ、後に「メッセージ」、「メソッド」、「メンバ関数」と呼ばれるようなものの萌芽がみられる。
1962年、クリステン・ニゴールはノルウェー計算センター(英語版)でシミュレーション言語のプロジェクトを開始した。これは彼が以前に用いたモンテカルロ法と実世界のシステムを概念化する仕事に基づくものであった。
OOPL と関係データベース管理システム (RDBMS) は、どちらも今日のソフトウェアとして非常に一般的であるが、双方を接続する場合、関係データベースは、オブジェクトを直接格納しないため (ただし、今日ではこれに近しい拡張機能を持つ RDBMS も存在する)、この二つの世界を橋渡しすることが一般的な需要として擡頭した。アクセス方法やデータパターンを OOPL と RDB との間で橋渡しする際の問題は、オブジェクト-リレーションのインピーダンスミスマッチと呼ばれている。 この問題に対処するためのアプローチはいくつかある。欠点のない一般的な解決策といえるものはないが、代表的なものとして、オブジェクト関係マッピング(ORM)があり、Visual FoxProなどのIDE言語や、Java Data Objects、Ruby on RailsのActive Recordなどのライブラリが存在する。
また、RDBMS を代替するオブジェクトデータベースも存在するが、技術的にも商業的にも RDBMS ほど広く成功は収めていない。