OOPの背後に理論/抽象化はありますか?


13

関数型プログラミングには、バックアップ理論として非常にエレガントなラムダ計算とその変形があります。OOPにそのようなことはありますか?オブジェクト指向モデルの抽象化とは何ですか?


5
ロードとロード。Googleを試しましたか?たとえば、1993年以来実行されているオブジェクト指向言語の基礎に焦点を当てたFOOLと呼ばれるワークショップシリーズがあります。
デイブクラーク

@DaveClarke。私はまったく同意しません。ラムダ計算は、非常に正確な意味での関数型プログラミングの基盤です。たとえば、Haskellのレポートは、Haskell言語全体が、型付きラムダ計算と同等のコア言語の単なる構文上の砂糖と考えることができると述べています。私は、微積分に関して同様の主張をするオブジェクト指向言語を知りません。だから、あなたは「負荷」があることは正しい。しかし、どれも正しくありません。
Uday Reddy 14

@UdayReddy:これはおそらくオブジェクト指向言語の豊富さによるものです。
デイブクラーク14

1
@DaveClarkeトピックの豊かさは、(1)それが良い流行語である、(2)コンセンサスを構築するのに十分なトピックを実際に理解していない、(3)かなり直交するいくつかの問題を混ぜていることを意味する場合があります。私はオブジェクト指向プログラミングに関する(最近の)文献を厳密には従いませんでしたが、それについて非常に明確に主張することなく問題を混同していると常に感じていました(もちろん、これは理論的な仕事よりも言語に当てはまります)。これらの問題には、タイピング、抽象化、ステートフルネス、並列処理、コードの再利用が含まれます。(1つの)理論がすべてのバリアントを説明する可能性は低いです。
babou

回答:


15

4つの主なアプローチがありますが、これらは利用可能なものの表面をひっかくだけです:

  • ラムダとレコードを介して:アイデアは、より伝統的な構造の観点からオブジェクト、クラス、メソッドをエンコードすることです。90年代半ばからのベンジャミン・ピアスの作品は、このアプローチの代表です。
  • AbadiおよびCardelliのオブジェクト計算(AbadiおよびCardelliの著書A Theory of Objectsを参照:主な抽象化はメソッドの記録であり、アプローチはオブジェクト指向プログラミングのプロトタイプベースの実現に近いが、クラスおよび継承はより原始的な要素の用語。
  • Castagnaのマルチメソッド計算(Castagnaの著書Object-Oriented Programming A Unified Foundationを参照):彼のアプローチはマルチメソッドを採用していることが主要な抽象化です。
  • クラスベースの計算(Kim Bruceの著書Foundations of Object-oriented Languages:Types and Semantics or Featherweight Javaなど):これらのアプローチは、クラスベースのプログラミングの本質を捉え、クラスと継承に焦点を当てることを目的としています。

11

オブジェクトモデルのコアと集合論の関係は、次のドキュメントで説明されています。

ドキュメントは、インスタンスの構造とオブジェクト間の継承関係を提示します。このような構造は、OOPの可能な限り最高の抽象化と考えることができます。特定のプログラミング言語(Ruby、Python、Java、Scala、Smalltalk-80、Objective-C、CLOS、Perl、Dylan、JavaScript)およびオントロジー言語(RDFスキーマおよびOWL 2フル)に構造がどのように適用されるかが示されています。

ドキュメントでは、クラスはオブジェクトであるアプローチが採用されているため、コア構造は単一ソートされます。メイン形式では、構造は(O、 ϵ 、≤、.ec)として表現できます。ここで、

  • Oオブジェクトのセット、
  • (オブジェクト)メンバーシップ関係、インスタンスの関係の改良、
  • ≤は継承関係です
  • .ecは、classの際立った、場合によっては空の下位関係であるpowerclassマップです。

Rubyオブジェクトモデルによるサンプルのコア構造を次の図に示します。青色のリンク-グリーンリンクは青色のリンクは、「包摂削減」の会員の関係を示し、反射的推移の低減に継承関係を示したのxの少なくともコンテナへのポイントのxを。powerclassマップ.ecは、水平の青いリンクで形成されています。このマップの画像のオブジェクトは、パワークラス(灰色)です。Rubyでは、これらは固有クラスまたはシングルトンクラスとも呼ばれます(後者の用語は非推奨です)。オブジェクトsuおよびv(ピンク色)は端末です、残りのオブジェクトは継承ルート rの子孫です。

  r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end

上記のすべての言語のオブジェクトモデルのコア部分は、構造の特殊化と見なすことができ、追加の構成要素はまったくないか、わずかです。理論的な観点から、追加の構成要素の最も重要なケースは、ディランによって導入されたシングルトンマップ.ɛϲと表記)です。これにより、Dylanは(上記の)唯一のプログラミング言語になります。thasは、構成記号○が左から右に解釈される単調性条件(≤)○(ϵ)⊆(ϵ)の影響を受けません。

オブジェクトモデルのコアと集合論の間の関係を形式化する1つの方法は、x.ecまたはx.ɛϲを考慮することができるため、参照ドキュメントでメタオブジェクト構造と呼ばれる構造のファミリー(O、≤、r、.ec、.ɛϲ)を使用することですxのメタオブジェクトとして。これらの構造においてx.ecすべてのオブジェクトに対して定義され、X及びx.ɛςすべてのために定義される境界(「小」)、オブジェクトX。構造は、以下の9つの公理に従います。公理化は、最初の8つの公理(T子孫ではないもの-端子オブジェクトのセット表し、R、及び.EC *はの反射的推移閉包である.EC)むしろ、最後の公理のために関与します。

  1. 継承は、半順序です。
  2. powerclassマップ.ecは、(O、≤)自体への順序埋め込みです。
  3. T.ec ∗のオブジェクトは最小限です。
  4. すべてのpowerclassはrの子孫です。
  5. セットr.ec ∗には下限はありません。
  6. シングルトンマップ.ɛϲは単射です。
  7. O.ɛϲ.ec ∗のオブジェクトは最小限です。
  8. x.ɛϲが定義されるようなすべてのオブジェクトxyについて、 x.ɛϲ≤y.ec↔x≤y
  9. すべてのオブジェクトxに対してx.ɛϲ↔xd として定義され ます。

最後の公理では、ϖは固定の制限順序であり、.dは定義拡張によって導出されるランク関数です。オブジェクトメンバーシップ関係、は、((. ɛϲ)∪(.ec))○(≤)として取得されます。最後の公理によれば、boundの境界付きオブジェクトのセットに対するドメイン制限は(.ɛϲ)○(≤)に等しくなります。参照されたドキュメントでは、この関係は有界メンバーシップと呼ばれ、∊で示されています。重要な特性として、この関係は十分に根拠があります。これは、r ϵ r以来根拠のないϵとは対照的です。。オブジェクトテクノロジー(のコア部分)と集合論の間の主な対応は、次のように表現できることがわかります。

∊↔∈

すなわち、有界メンバーシップは、十分に確立されたセット間のセットメンバーシップに対応します。特別な場合として、ランクϖ + 1の部分フォン・ノイマン宇宙は、定義拡張によるメタオブジェクト構造です。一般に、すべての抽象(ϖ + 1)- 上部構造 (O、は、定義上、完全なメタオブジェクト構造と同等です。すべてのメタオブジェクト構造は、完全にメタオブジェクト構造に忠実に埋め込むことができ、これは、フォンノイマン宇宙に忠実に埋め込むことができます。

基本構造という用語は、メタオブジェクト構造の一般化に使用されます。この一般化では、.ecおよび.ɛϲは(任意に)部分的で、空である可能性があります。特に、継承ルートrのみを含む最小構造を持つ有限の基本構造が可能です。すべての基本構造は、パワークラス補完とそれに続くシングルトン補完によってメタオブジェクト構造に拡張できます。これにより、基本構造がフォンノイマン宇宙に忠実に埋め込まれます。


@ラファエルはるかに良い-ありがとう、パオン!
デビッドリチャービー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.