OOPでのオブジェクトの状態の定義


11

オブジェクト指向プログラミング(論文用)における「オブジェクトの状態」の簡潔な定義が必要です。

約半日、このトピックについて引用できる論文を探しましたが、見つかりませんでした。私が見つけたすべての論文は、ほとんどがオブジェクト指向プログラミングに関する一般的な論文であり、オブジェクトの状態を定義していませんでした。

私にはわかりませんが、私の推測では次のようなもの があります。オブジェクトの状態は、オブジェクトのインスタンス変数の状態によって定義されます。

オブジェクトの状態の定義やトピックに関する参照を検索しています。

(ところで、この概念を「オブジェクトの状態」と呼んでもいいですか、それとも珍しいのですか?)


ここにはあいまいさの余地があると思います。そのため、「州」が何を意味するのかを論文に正確に記載する必要がありました。もしそれができなかったら、おそらくあなたは論文を発表する立場になかったでしょう。
PJTraill

回答:


9

G. Booch著の"Object-Oriented Analysis and Design"を参照(および引用)できます。

...オブジェクトは、状態、動作、およびアイデンティティを持つエンティティです。類似オブジェクトの構造と動作は、共通のクラスで定義されています。インスタンスとオブジェクトという用語は同義です。

以降のセクションでは、状態、動作、アイデンティティの概念について詳しく説明します。...

そして、状態の概念を説明する全体のサブセクションがあります

...この例から、次の低レベルの定義を作成できます。

オブジェクトの状態には、オブジェクトのすべての(通常は静的な)プロパティと、これらの各プロパティの現在の(通常は動的な)値が含まれます...


4
いつものようにファジー。ブースが言うつもりのこと:状態とは、これらの変数への値の割り当てです。
reinierpost 2018

3

また、オブジェクトの状態は「抽象」エンティティであり、メソッドが何を監視できるかによって決定されることにも注意してください。たとえば、ハッシュテーブルを実装するオブジェクトは、その状態として、すべての内部表現の詳細ではなく、ハッシュテーブルに格納されているコレクションを持っています


1

IBMには、用語「状態」を互いに非常に類似したいくつかの異なる定義で定義する用語集があります。それらはオブジェクト指向プログラミングに関連していると明確に述べていませんが、その文脈でそれらを推定して使用することができます。

Def 3:オブジェクトのライフサイクルのステージで、そのオブジェクトのステータスを識別します。

Def 5:オブジェクトの存続中の条件または状況で、オブジェクトが何らかの条件を満たすか、何らかのアクティビティを実行するか、または何らかのイベントを待機します。

Def 8:パブリックデータメンバーとプライベートデータメンバーに現れるオブジェクトの特性であり、必須状態と非必須状態の2つのカテゴリに分類できます。

Def 9:ビジネスステートマシンにおいて、ビジネストランザクションを構成するために順番に編成された複数の個別のステージの1つ。

Def 10:回路が適切なパルスの適用まで残る状態。

ウェブスターのニューワールドカレッジ辞書では、「州」を次のように定義しています。

特定の時間に人または物を特徴付ける一連の状況または属性。存在の方法または形態:状態

これらすべての共通点は時間です。時間の経過とともに状態が変化します。それが変数の性質です。「あなたの現在の状態は?」今日は結婚していると言うことができ、明日は独身でいることができます。

これらすべての定義を考慮すると、「状態」は、オブジェクトの属性、つまりプロパティ/変数の値によって決定される特定の時点でオブジェクトが存在する方法であると推定できます。

それ以上簡単になるとは思いません。


これは、曖昧さの可能性を他の回答よりも明確にするため、数票の価値があります。
PJTraill

以前のコメントについて:私は、あいまいさをより完全に説明するために、独自の回答を追加しまし
PJTraill

1

状態」という用語は、さまざまな意味で使用されている可能性があり、正確な定義の影響を受けにくい場合もあります。したがって、用語の使い方明確にするために、論文に定義を含めることが重要でした。以下では、オブジェクトの状態の一意の定義を提供するのではなく、さまざまな状況で適切である可能性がある、オブジェクトについてのさまざまな考え方をスケッチしてみます。

ただし、最初に、「オブジェクト」の意味を考える必要があります。概念的なオブジェクト、つまり、モデル化しようとしているエンティティ、または特定のプログラムのクラスのインスタンスについて考えていますか。おそらく、特定のユーザーインターフェイスを介してアクセスされたときに、さまざまなオブジェクトまたはシステムを参照する可能性のある変数の状態についても考えたいと思います。

OOPでオブジェクトの状態を定義する際の難しさの1つは、特定の言語でエンティティをモデル化する場合、その言語では、同じエンティティの概念上一部であるオブジェクト属性とそうでない他のオブジェクト属性を区別できないことが多いことです。たとえば、リストのリンクされたリストは、次の(場合によっては前の)へのポインタを含むCar多数の- Linkオブジェクトで構成されますが、Link概念的にはリストは単一のオブジェクトです。リンクはまたに埋め込まれるかもしれませんCar-objectsまたはそれらへのポインタを含むが、この場合、リンクされたオブジェクトはリストの一部ではなく概念的に分離されています。ただし、最近の変更のリストでは、変更はリストにのみ存在し、その一部と見なされる場合があります。これらのさまざまなケースでは、リンクされたオブジェクトの状態を含むように1つのオブジェクトの状態を考慮するかどうかを決定する必要があります。さらに、a CarへのリンクがあるRegistering_Authority場合があります。登録機関がWebサイトのURLを変更しても、車の状態が変化するとは考えていません。実装言語でさまざまな種類のリンクを区別できない限り、オブジェクトの状態を言語だけで一般的に定義することはできません。

external」または「functional状態は、「動作」として定義できます。メソッドの呼び出しやユーザーインターフェイスに対する反応。見られる:クラスのインスタンスとしてオブジェクトのこの定義は、オブジェクトが属すると見されたタイプに依存しCircle、Aの色Coloured_Circle見えないため、その状態とは無関係です。これの問題は、「どのように反応するか」が、返される値に関して定義する必要があり、これらの「値」が他のオブジェクトの状態である可能性があることです。これを形式化する1つの方法は、オブジェクトが埋め込まれているシステムの将来のすべての実行が、入力からそのシステムへの出力からオブジェクトへの出力への同じマッピングになる場合、オブジェクトの2つの状態は同じであると言うことです。この囲い込みシステムは、その環境に関係なく実行できる自己完結型システムである必要がある場合があります。一方、問題のオブジェクト自体と同じくらい小さくすることもできます。いずれの場合でも、数学的アプローチは、状態を等価クラスとして定義することです

内部状態は、表現の状態として定義することができます。最初の試みは、明らかに循環的ですが、おそらく役立つでしょう:「オブジェクトの内部状態は、そのメンバーの状態です」。ここでは、表現の重要な側面と重要でない側面を区別するように注意する必要があります。最下位レベルでは、オブジェクトの表現に他のオブジェクトのアドレスが含まれている可能性がありますが、そのようなアドレスの変更を検討することは役に立ちそうにありません状態の変化として。一方、パフォーマンステストを検討するときは、クエリの結果のキャッシュの状態を変更しても、機能の状態は変化しません(前述のとおり)。


0

オブジェクト指向システムは、「オブジェクト」の概念を使用してコードとデータの条件を統合します。オブジェクトには、状態(データ)と動作(コード)があります。したがって、オブジェクトの状態は、データを含むオブジェクト内のインスタンス(変数)です。


これは事実ですが、既存の回答に多くを追加することはありません。
David Richerby 2014

1
多分それは誰かのために理解するのは簡単でしょう:)
Syed MEhran Hussain '31 / 12/31

1
これは間違っています。つまり、状態とは、これらの変数への値の割り当てです。
reinierpost 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.