OOPを使用したドメインモデリングの機能





はじめに



OOPの用語を使用している人が私を理解するのは非常に難しいことに注意したい。 実際、OOPが概念に取って代わりました。 OOPでは、数学または言語学で通常受け入れられているように、クラスは多数として理解されていません。 OOPでは、クラスはAristotleのようにオブジェクトタイプと呼ばれます 。 OOPでは、 オブジェクトクラスという用語の代わりにオブジェクトタイプという用語を使用するのが正しいでしょう。 正しい用語を使用して移動すると、正しい用語の折り畳みに戻ることは非常に困難です。 この記事では、OOPによって作成された用語のおに対処したい人を支援しようとします。 私の議論では、OOPの意味ではなく、元の意味で用語を使用します。 クラスという用語は、ドメインモデリングの論理パラダイムから取られます。ドメインモデリングは、セット理論からこの用語を借用しています。 タイプインスタンスという用語は、アリストテレスのタイプの存在のパラダイムに基づいたタイプ理論から取られます。



ロシア語のクラスインスタンスという用語オブジェクトのクラスを示しており、この用語と一致するクラスの要素ではなく クラスのオブジェクトを示していることをOOPの支持者が理解することは非常に困難です。 OOPを研究した多くの人にとって、 インスタンス要素という用語は区別できません。 これらの用語を注意深く扱いましょう。



用語の定義



期間インスタンス



インスタンスは、独自の一連のオブジェクトです。 つまり、マシンインスタンスは、多くの同様のマシンからのオブジェクトです。 アリストテレスは、対象が機械の存在の考えを持っていると信じていました。 このアイデアは、被験者の意識の中に存在する抽象的なタイプのオブジェクト(機械)の形で表現されます。 対象がオブジェクトを見るとき、彼は自分が見ているものと自分が想像しているイメージ(マシンのタイプ)を比較し、同様の機能を見つけた場合、そのオブジェクトをマシンまたはマシンのインスタンスと呼びます。 タイプと呼ばれるアリストテレスの同様の機能のリスト。 そして、これらの機能を備えたオブジェクトは、このタイプのインスタンスです。







ロジックに従って、クラスのインスタンスは、多くの同様のクラスのオブジェクトです。 したがって、ロシア語では、クラスインスタンスという用語はクラスを指します。







マシンは、マシンのクラスを次のように参照します。マシンは、マシンのクラスのオブジェクトです。







したがって、OOPの慣例に従って、マシンはマシンのクラスのインスタンスであると言うと、マシンはマシンのクラスであることがわかります。 激突!



OOPでは、用語クラスは用語タイプを指します。 したがって、OOPのクラスインスタンスという用語は、オブジェクトタイプのインスタンスのように読む必要があります。 次に、画像は次のようになります。







したがって、クラスのインスタンスという用語に出くわした場合、この用語はOOPによって生成される可能性が高いため、オブジェクトタイプであることがわかります。 OOPの外では、クラスは多くのオブジェクトを意味します。



期間要素



要素は何かの一部です。 ボードの要素は抵抗、脚の要素は膝、多数の要素はオブジェクトです。 したがって、要素という用語は、2つのエンティティ間の関係を指す場合があります。 この接続は、構成接続(機械要素は車輪)にすることができます。







または通信分類(車輪のクラスの要素は車輪です)。







誤った用語の他のペア:



さらに、ビジネス分析では、他の誤った用語のペアが一般的になりました:イベントとこのイベントのインスタンス、プロセスとこのプロセスのインスタンス、契約とこの契約のインスタンス。 ロシア語では、オブジェクトやこのオブジェクトのインスタンスなどはありません。 オブジェクトのタイプとこのタイプのオブジェクトのインスタンスという用語があります。



おそらく、用語インスタンスの英語からの誤った翻訳が原因で、用語の誤った使用が生じました。 インスタンスは例として、またはケースとして翻訳されますが、インスタンスとしては翻訳されません。



それがそうであっても、インスタンスという用語の正しい使い方を見てみましょう。





これらの記述は、アリストテレスのパラダイムで行われます。ここでは、オブジェクトのタイプとこれらのタイプのインスタンスがありますが、オブジェクトとオブジェクトのインスタンスはありません。 アリストテレスのパラダイムについては、次の記事で書きました: ドメインモデルを構築するパラダイムの知識



科学との類推



1つの非常に興味深い事実に注意する必要があります。 宗教と科学の類似性はそれ自体を示唆しています。 世界の宗教的記述を相殺するための科学的アプローチが登場しました。 宗教の観点から世界を説​​明する場合、神の存在を確認できないことを理解する必要があります。 信仰の基礎は信仰です。 科学的アプローチは、信仰とは対照的に、実験の優位性を置きます。 つまり、実験によってParadiseの存在が確認されると、Paradiseが存在します。 確認しない場合、存在するかどうかは不明です。 ある概念で使用される用語は、別の概念で使用される用語と混同されません。 例えば、誰かが神の存在を証明したという説を時々聞くことができます。 しかし、誰かがそれを証明するとすぐに、神は神でなくなり、別の概念になります。 したがって、神の存在を証明することは不可能であり、したがって、宗教に用語証明を導入することは不可能です。 宗教のように証拠について話すことは不適切であるように、科学においては文脈を除いて信仰について話すことは意味がありません:この信仰は私が考えるのに役立ちますが、干渉し始めたらすぐにそれを変えます。

同様に、オントロジーには2つのアプローチがあります。1つはアリストテレスによって発明されました。 これは型理論です。 2番目は、アリストテレスのタイプとは対照的に造られました。 このアプローチは論理パラダイムと呼ばれ、クラスという用語を使用します。 これら2つのパラダイムは、科学と宗教のように混ざり合いません。 したがって、クラスという用語は型理論では使用できず、タイプという用語はクラス理論では使用できません。 ただし、PLOはこの禁止事項に違反しています。 このため、彼はfuを言う必要があります。



私のプレゼンテーションでは、オブジェクトがあり、オブジェクトのクラスと呼ばれる多くのオブジェクトがある論理パラダイムに頼っていますが、OOPの意味でインスタンス、タイプ、および用語クラスという用語はありません。 論理的なパラダイムの概要については、Chris Partridge Business Objects:Re-Engineering for Re-useMatthew West Development High Quality Data Modelsを読むことをお勧めします。



論理的パラダイムの基礎:通信の分類と専門化



wheelと呼ばれるオブジェクトのクラスがあるとします。 このクラスには、世界のすべての車輪が含まれています。 定義により、このクラスのオブジェクト(ホイール)がホイールのクラスに属するという事実は、分類関係によって示されます。







OOPにはそのような関係はなく、UMLダイアグラムで指定することはできません。



このクラスのサブクラス(サブセット)があるとします—検討中のホイールのクラス(たとえば、1台のマシンに属するホイールのクラス)。 定義により、このクラスがすべてのホイールのクラスのサブセットであるという事実は、特殊化によって示されます。







OOPでは、クラス間のこの関係は継承と呼ばれます。 クラス2はクラス1から継承されると言われています。







しかし、本来、クラス2はクラス1のサブセットです。明らかに、属性またはパラメーターが継承されることを意味します。 ただし、パラメーターは型の説明にのみ含まれています! そして再び、用語の混合に遭遇します。 クラスは何も継承できません。 しかし、型はできます。



接続については、専門化と分類をここで読むことができます: 情報オブジェクトまたは1つのエラーの原因 (「論理的パラダイムの解決策」の段落で、これらの用語を使用してサブジェクトエリアをモデル化する方法を示しました)。



クラスとクラスオブジェクトに分割すると、象クラス(象の寿命、さまざまな段階での牙の長さを調べるため)、象クラス(象の平均寿命、平均身長を調べるため)など、調査するクラスのオブジェクトを考慮することができますおよび平均重量)。 クラスの象は、すべての象の平均寿命に関する情報を「知る」ことができないことは明らかです。 象のクラスのみがこの情報を「知っています」。 アリストテレスのパラダイムを試して、用語セットを使用せずに、象の平均身長を「知っている」オブジェクトを考え出してください。 成功する可能性は低いです。 したがって、アナリストである場合、オブジェクトおよびオブジェクトのクラスを操作する必要があります(ただし、クラスはOOPを意味するものではありません)。



論理的パラダイムのクラスとOOPのクラスは2つの異なるものです。 論理パラダイムにおけるクラスの説明は、このクラスのオブジェクトの列挙であり、これらのオブジェクトのプロパティではありません。 OOPでは、クラスの説明はオブジェクトのプロパティの説明を指し、実際にはオブジェクトのタイプの説明を意味します。 OOPを教える人は、OOPのクラスがオブジェクトの一種であるという事実を隠しません。 しかし、これがタイプがクラスと呼ばれ、開示されていない理由です。





OOPのクラス定義が実際に機能しない理由を理解するには、クラスで最も簡単な操作を試してください。このクラスのすべてのサブクラスのクラスを作成します。 そして、OOPに適用されるクラス定義を、作成する各サブクラスに適用してみてください。



例:3つのリンゴの木{1; 2; 3}があるとします。 これはクラスです。 OOPでは、このクラスの共通機能のオブジェクトが必要です。 リンゴの存在の兆候としましょう。 これらのリンゴの木のクラスのすべてのサブクラスで構成されるクラスを作成します。 このクラスは、クラスで構成されます:{{empty}; {1}; {2}; {3}; {1; 2}; {1; 3}; {2; 3}; {1; 2; 3}}。







つまり、このクラスクラスには8つの要素があります。 OOPクラスの定義に従う場合は、これらのクラスの区別された説明を提供してみてください(別のクラスは無意味です)。 そして、これらは花です-クラスには3つの要素しかありません。 そして、1000があり、可算セットがあり、連続体がある場合は? したがって、OOPでは、クラスに対する最も単純な操作(セットの加算と減算)さえありません。



All Articles