オブジェクト指向プログラミング
オブジェクト指向プログラミングは、ソフトウェアの大規模化に伴い、より効率的な開発手法が模索される中で1960年代に考案された。OOP言語は歴史的にクラス構造を中心とする"Simula"系統と、メッセージ機能を主体とする"Smalltalk"系統に分けられるが、後に"C++"や"Java"などの言語が派生した前者が主流となった。この前者のオブジェクト指向が示す「内部隠蔽」「継承」「多態性」の三仕様を備えていれば、OOP言語であると見なされる。
オブジェクト指向プログラミング
一方、Smalltalkとは別にSimulaの影響を受け作られたC++（1979年）は抽象データ型のスーパーセットとしてのクラス、オブジェクトに注目し、オブジェクト指向をカプセル化、継承、多相性をサポートするものと再定義した（その際、実行時速度重視及びコンパイラ設計上の制約により、変数メタファである動的束縛の特徴は除外された）。これらは当初抽象データ型、派生、仮想関数と呼ばれ、オブジェクトのメンバ関数を実体ではなくポインタとすることで、継承関係にあるクラスのメンバ関数のオーバーライド（上書き）を可能にしたことで、多相性を実現した（この流儀ではメッセージメタファはオブジェクト指向に必須ではないものと定義し、オブジェクトの持つ手続きをメソッドとは呼ばずメンバ関数と呼ぶ）。この他、Smalltalkにある動的束縛の類似的な機能としてオーバーロード（多重定義）が実装されている。