オブジェクト指向モデルの「オブジェクト」の数学における正式な定義/対応部分


9

これは数学SEフォーラムで私が尋ねた質問であり、ここで紹介されました。だからここに質問があります

私は正式な数学と理論的なコンピュータサイエンスの両方の初心者です。質問が適切に構成されていない場合は、ご容赦ください。オブジェクト指向モデリングは、現実の世界をシミュレーションするときに複雑な相互作用を定義するのに非常に役立ちます。しかし、それは主にプログラミングで使用されます。数学にも同じような考え方があるのか​​と思っていました。プログラミングをしているとき、「オブジェクト」と「オブジェクト指向プログラミング」の概念を理解し、それを実装するだけです。しかし、集合論の観点から「オブジェクト」の正式な定義はありますか?それとも、他の正式な数学理論はありますか?

3つの主要なオブジェクト指向モデリングの概念を実装/正式に定義できますか?1.カプセル化2.継承3.多態性

質問が広すぎることは承知していますが、これらの概念をよりよく理解できるように、いくつかの指針も提供していただければ幸いです。


2
私が見るように、実際には2つの質問があります。1つは、オブジェクト指向の概念の形式化を求めることです。もう1つは、数学におけるオブジェクト指向の概念を求めています。おそらく、2つの別々の質問をする方が良いでしょう。最初の質問に答える資料はたくさんありますが、おそらく2番目の質問はほんの少しです。(そして明日は質問に答える時間を見つけるでしょう。)
Dave Clarke

ありがとう..標準または「教科書」と見なされるオブジェクト指向概念の形式化のための資料を提案していただけませんか?私は2番目の答えを待ちます... :)
user1260776

2
標準的な本(数年前のもの)はA Theory of Objectsです。最近の作品はFeatherweight Javaです。これらの問題を扱うオブジェクト指向言語の基礎と呼ばれる一連のワークショップもあります。
Dave Clarke、

ありがとう!それらを介して行くだろう...また、私は密接に私の質問...に関連して、「ラムダ計算」につまずい
user1260776

回答:


9

答えは2つの理由で複雑です。

  1. コンピュータサイエンスでは、「オブジェクト」という用語の解釈が人によって異なります。1つは、オブジェクトが一緒にパッケージ化されたいくつかのデータと操作で構成されることです。もう1つは、オブジェクトが「状態」を持つだけでなく、オブジェクトが何らかの形の変更可能なエンティティであることです。

  2. 「変化」の意味(および常に変化する「エンティティ」の意味)と、数学的記述が実際に変更可能なエンティティをキャプチャするかどうかには、深い哲学的問題があります。

データ+操作という意味でのオブジェクト:数学ではこれはかなり標準的です。どんなグループ理論の教科書も持ってください。どこかにような定義があります。(これは共役演算子です。)は、この用語では「オブジェクト」です。いくつかのデータ()と操作ます。または、ペアまたはトリプルを使用して、よりオブジェクト-yにすることができますhg(x)=gxg1hggxgxg1g,xgxg1g,xgxg1,xg1xg。これらの種類の「オブジェクト」は、ラムダ抽象化とタプルを形成する何らかの方法を備えた関数型プログラミング言語で構築できます。AbadiとCardelliの「オブジェクト理論」では、この種のオブジェクトを幅広く扱っています。

状態を持つオブジェクト(または変化するオブジェクト):数学にはそのようなものがありますか?私はそうは思いません。私は数学者が彼/彼女の職業生活ではなく、変化することについて話すのを見たことがありません。ニュートンは、おそらく変化していると思われる粒子の位置を表すと、その変化率をを使用していました。数学者は、最終的にニュートンが話していたかについての関数であったことを考え出したベクトル空間に実数から、およびの一次導関数であった別のそのような機能であったに対してxx˙x(t)x˙x(t)t。このことから、多くの深く考えている数学者は、変化は実際には存在せず、すべてが時間の関数であると結論付けています。しかし、ニュートン力学で変化していたのは位置ではなく、粒子でした。位置はその瞬間の状態です。数学者や物理学者は、粒子が数学的アイデアであると偽ることはありません。物理的なものです。

ですから、オブジェクトについてです。それらは「物理的な」ものであり、状態はそれらの数学的属性です。この側面の良い議論については、Abelson and Sussman's Structure and Interpretation of Computer Programの第3章を参照してください。これはMITの教科書であり、彼らはすべての科学者やエンジニアに教えています。

粒子が数学的ではないという事実は、それらを数学的に扱うことができないことを意味しません。数学者に2粒子系のモデル化を依頼すると、彼はすぐに2つの関数を構成し、それらをおよびと呼びます。したがって、2つのパーティクルは2つの無意味なインデックス(1と2)に減少します。これは、これらの粒子が何であるかを知らず、気にしないという数学者の言い方です。私たちが知る必要があるのは、彼らの立場が独立して(または別々に)進化することです。したがって、2つの別々の関数でモデル化します。x1(t)x2(t)

同様に、オブジェクト指向プログラムをモデル化する標準的な数学的方法は、各オブジェクトを状態空間へのインデックスとして扱うことです。唯一の違いは、オブジェクトが行き来し、システムの構造が動的であるため、各世界が基本的にインデックスのコレクションである「可能な世界」モデルにそれを拡張する必要があることです。オブジェクトの割り当てと割り当て解除には、ある世界から別の世界への移動が含まれます。

しかし問題があります。力学とは異なり、オブジェクトの状態をカプセル化する必要があります。しかし、オブジェクトの数学的記述は、あらゆる場所に状態を配置し、カプセル化を完全に破壊します。「関係パラメトリック性」と呼ばれる数学的トリックがあり、これを使用してサイズを元に戻すことができます。数学的トリックであり、カプセル化の概念的な説明ではないことを強調する以外は、ここでは説明しません。、数学的にオブジェクトをモデル化する第二の方法カプセル化は、状態をフィネスし、観察可能な事象に関して、オブジェクトの振る舞いを記述することです。これらのモデルの両方の良い議論については、私がAlgolのような言語でオブジェクトとクラスというタイトルの私の論文を参照することができます。


[追加されたメモ:]

オブジェクトの数学的基盤の優れた分析は、William Cookの記事「On On Data Abstraction、Revisited」にあります。


2
私はここの誰かが答えることができると知っていました...
Andrej Bauer

時間と詳細な回答をありがとう、Uday。この質問をしたとき、「データ+操作」という意味でしか考えていなかったので、グループ理論が「オブジェクト」を「データ+操作」として表すことができるとは思いもしませんでした。また、あなたが参照したリンクについても説明します。
user1260776

@AndrejBauer。ええ、私はおそらく船外に行きました。OPはおそらく、分野とは対照的に、「数学」を形式化のための単語として使用していました。
Udayレディ

@Uday、私は質問を適切にフレーズしなかったかもしれませんが、「数学」を意味するとき、私は明らかに正式な数学を意味しました。私の考えは、「セット理論」が数学の基礎を形成すること、セット理論の観点からオブジェクトモデリングのオブジェクトを「説明」または「導出」する方法でした。これらすべてをどのようにまとめるのでしょうか。一次論理)...」あなたの答えは完全にはわかりませんが、あなたの言ったことを「理解」することができます。確かに、これは私が期待していた答えです。ありがとう!!(私のアイデアは完全に整理されていません、
plz

2
@ user1260776。わかります。しかし、私の主張は、「公式」と「数学」は異なる考えであるということです。概念を数学に還元する(またはそれから派生させる)ことなく、形式化することができます。ニュートンは力学を形式化しましたが、「粒子」を「セット」に減らすことを気にしませんでした。私は個人的にはニュートンのリードに従い、私がセットに還元しないことを認めることにとても満足しています。しかし、削減すべき時と削減すべきでない時を知る必要があると思います。物理学者として訓練を受けたので、それは非常に簡単です。他の多くのコンピューター科学者にとって、それはそれほど簡単ではないかもしれません。
Udayレディ

0

スキームに基づいたabelson&sussmanによる古い古典書「コンピュータープログラムの構造と解釈」[1]には、オブジェクトのかなり良い理論的記述があると考えてください(lispバリアント)。今すぐオンラインで無料!これは、ローカルの状態を保存するメカニズムがある場合に、オブジェクトの向きの概念をラムダ計算(別名Lisp)に組み込む方法を示しています。私が理解しているように、これは何年にもわたるMITの標準的な教科書でした。これがsubjの最良の参照であるとは言わない。このptには他にもっと良いものがあると確信しています。

これは聞いたことのある場所では完全に形式化されていないと思いますが、大まかに言えば、オブジェクトは基本的にコード+データの形式で構成されています

  • メソッド(パラメーター付き)
  • 状態、つまりインスタンス変数

カプセル化された形式で。おそらく、継承などの他の側面は基本的ではありません。abelson&sussmanで述べられているように、それらは「構文糖」と呼ばれています。

[1] abelson&sussmanによるコンピュータプログラムの構造と解釈


3
もちろん、オブジェクト指向プログラミングの意味でのオブジェクトは形式化されています。アバディとカルデッリ、カスタンガ、そしてキムブルースの本に特化した本があります。FOOLシリーズには、オブジェクト指向プログラミングの基礎を専門に扱うワークショップが10年あります。会議ECOOPとOOPSLAには、OOの基礎に関する論文が定期的にありました。実際、OOのセマンティクスに関する最初の論文は約20年前のものです。
Dave Clarke、

@vzn、答えてくれてありがとう。あなたが提案した本を読みます...
user1260776

DC--私はそれを下手に言いました。より正確には、「オブジェクト」を正確に構成するものの正式な定義、またはOOPの主要な/基本的なコンポーネントは何かの正式な定義は、文献によって大きく異なる傾向があると言っても安全だと考えてください。定義はおそらく時間とともに大幅に拡大しました。たとえば、継承は後で追加されたのではないかと思います。元のアイデアは、主にカプセル化された形式のコードとデータだけでした。
vzn 2012年

私が言えることから根本的に合意されていないOOP機能のもう1つの例は、たとえばC ++に見られる多重継承ですが、代わりにインターフェースではなくJavaで意図的に回避されています。etc
2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.