02相手に対する事実と誤解


オブジェクト向けの例


オブジェクト向けのパターンは,知識を抽象化し,抽象化した知識をオブジェクトにカプセル化することによって現実世界問題の内在的複雑さを管理しようとする.
-リベッカ・ウォフス・ブロック

別名オブジェクト


童話のアリスにたとえて、対象、状態、行為を説明しようとする.

アリスはドアをくぐるために、自分の身長を増やして減らした.
この場合、動作とステータスは次のように定義できます.
앨리스의 키를 변화시키는 것 -> 앨리스의 행동 
앨리스의 키 -> 상태 
アリスの状態を決めるのは行動だが、行動の結果を決めるのは状態だ.
문의 사이즈 : 130cm
앨리스의 키 : 140cm 
케익을 먹음: 15cm가 자람
부채질을 함: 5cm가 줄어듬

케익을 먹고 -> 부채질을 함 -> 앨리스와 문의 사이즈가 같아짐
したがって,行動によって状態(キー)を変え,状態によって行動を決定する.
문을 통과함으로써  앨리스의 위치가 정원으로 변화했다고 하면 
문을 통과한 과정이 있었기 때문에 정원에 도착할 수 있었던 것이다. 
そのため、いかなる行動(花園に到着)の成功は、以前にどのような行動があったかの影響を受けます.
上記の内容をまとめます.
  • 対象(アリス)はステータスを持ち、ステータスは変更可能.
  • アリスの状態を変えるのはアリスの行為だ.
    行動の結果は状態に依存し,状態で記述できる.
    行動の順序が結果に影響する.
  • アリスはどんな状態でも唯一受け継ぐことができる.
  • オブジェクト


    識別可能な個体や物事.対象は自動車のように具体的なものに触れることもできるし、時間のように抽象的な概念になることもできる.
    オブジェクトは、区別可能な識別子、特徴的な動作、変更可能な状態を有する.
    ソフトウェアでは、オブジェクトは、ステータスと実行可能なコードを格納することによって実現されます.
    オブジェクト=ステータス+動作+識別子を持つエンティティ

    ≪ステータス|Status|emdw≫


    利用状態は,過去のすべての行動を説明することなく,行動の結果を容易に予測し説明できる.
    保証する
    数値、文字列、量、速度、時間、日付、真/偽などの単純な値はオブジェクトではありません.
    単純な値は、それ自体が独立した意味を持つのではなく、他のオブジェクトの特性を表すために使用されます.
    すなわち,単純値は他のオブジェクトの状態を表す手段として用いられる.
    앨리스가 현재 음료를 들고 있는 상태인지를 표현하고 싶다면 
    앨리스의 상태 일부를 음료라는 객체를 이용해 표현하면 된다.

    上記の例に示すように、オブジェクトは他のオブジェクトの状態を表すためにも使用できます.
    要するに、すべてのオブジェクトの状態は、単純な値とオブジェクトの組み合わせで表すことができます.このときオブジェクトの状態を構成するすべての特徴を総称してオブジェクトの属性と呼ぶ.アリスの身長、位置、飲み物はすべて専門です.

    Property:静的値
    パーセント値:動的値(変動)
    リンク
    オブジェクト(アリス)とオブジェクト(飲み物)を接続することをリンク(link)と呼ぶ.リクエストを送信および受信するには、オブジェクトとオブジェクトの間にリンクが必要です.(=メッセージの送受信が可能です.)
    リンクは、あるオブジェクトが別のオブジェクトを知っている識別子を表します.
    (他のオブジェクトの識別子がわかっている場合は、両者の間にリンクがあることを示します.)
    Property=は、属性(単純値)とリンク(他のオブジェクトを指す)の組み合わせとして表すことができます.

    アクション


    オブジェクトの状態は自分では変わりません.
    オブジェクトの状態を変えるのは、オブジェクトの自発的な動作にすぎません.
    オブジェクトの動作はオブジェクトの状態を変化させ、これは動作が付随効果を生じることを意味します.
    ステータスと動作の関係
  • 客体と行為は状態の影響を受ける.
  • オブジェクトの動作は、ステータスを変更します.
    協力と行動
    オブジェクトは、他のオブジェクトを使用してその役割を果たし、他のオブジェクトにサービスを提供する
  • .
    まとめると,オブジェクトの挙動による結果を2つの観点から説明できる.
    1. 객체 자신의 상태 변경
    2. 행동 내에서 협력하는 다른 객체에 대한 메시지 전송
    客体の行為はこの2つの観点の付随効果を明確に述べなければならない.
    要約すると、行動は外部の要求や受信した情報に応答するために行われる動作と反応の活動である.動作の結果、オブジェクトはステータスを変更したり、他のオブジェクトにメッセージを送信したりすることができます.オブジェクトは、動作によって他のオブジェクトとのコラボレーションに関与するため、動作の外部で可視性を持たなければならない.

    パッケージング状態


    客体を導く世界では、すべての客体が自分の状態を自己管理する自律的な存在である.
    앨리스 객체의 키를 작게 만드는 것이 앨리스 자신인 것처럼 
    음료 객체의 양을 줄이는 것은 음료 자신이어야 한다.
    したがって,状態を定義された挙動の後にカプセル化することで,オブジェクトの自主性を向上させ,連携を容易かつ柔軟にすることができる.

    識別


    すべてのオブジェクトに識別子があり、識別子を使用してオブジェクトを区別します.
    すなわち,オブジェクトにはオブジェクトを区別できる特定のプログラムが存在する.
    この番組は識別者と呼ばれています.
    値とオブジェクトの最大の違いは、値に識別子がなく、オブジェクトがあることです.
    値に識別子がないため、ステータスのピアチェックを使用して2つのインスタンスを比較する必要があります.オブジェクトのステータスが変更される可能性があるため、識別子を使用してコンシステンシチェックを行い、2つのインスタンスを比較できます.
    値とオブジェクトの区別方法
    値とオブジェクトが混同されることが多いため、値とオブジェクトを指す別の用語も使用されます.
    識別子を持つ従来のオブジェクト:参照オブジェクト(reference object)、エンティティ
    識別子なしの値:値オブジェクト(値オブジェクト)

    どうさけっていじょうたい


    ⭐   まず状態を決め、その後行動を決める方法は設計に悪影響を及ぼす.行動に重点を置かなければならない.
    まず状態が悪い原因を決める
    1.状態を決めておくとカプセル化が阻害される.
    상태에 초점을 맞출 경우 상태가 객체 내부로 깔끔하게 
    캡슐화되지 못하고 공용 인터페이스에 그대로 토출되버릴 확률이 높아진다.
  • の対象を協力者ではなく孤立した島にした.
  • 상태를 먼저 고려하는 방식은 협력을 무시하고 개쳋를 설계하므로 옳지 않다.
  • オブジェクトの再使用性が低下しました.
  • 객체의 재사용성은 다양한 협력에 참여할 수 있는 능력에서 나오는데 
    상태에 초점을 맞춘 객체는 다양한 협력에 참여하기 어렵다.
    客体の行為は客体が協力に参加する唯一の方法である.

    オブジェクト向けの設計方法


    オブジェクト向け設計は、アプリケーションに必要なコラボレーションを考慮し、コラボレーションに参加するために必要なアクションを考慮し、アクションを実行するオブジェクトを選択することによって実現されます.
    行動を決定した後、行動に必要な情報を考慮し、その過程で必要な状態を決定する.

    隠喩とオブジェクト


    オブジェクト向けは現実世界の模倣(?)->x
    オブジェクト向けの世界は現実世界の単純な模倣ではない.
    擬人画
    現実のオブジェクトとソフトウェアオブジェクトの最大の違いは,現実において受動的な存在がソフトウェアオブジェクトとして表現されると,アクティブになることである.
    現実のオブジェクトよりも多くのことをすることができるソフトウェアオブジェクトの特徴を擬人化と呼ぶ.
    要するに,ソフトウェアで構築されたオブジェクト向けの世界は現実的な模倣ではなく,模倣でもない.
    現実の面影を参考にして、現実とは全く異なる新しい世界を創造しただけだ.
    隠喩
    隠喩とは,実際に適用されない場合に,一つの概念を用いて別の概念を述べる対話形式である.
    隠喩の本質は別の物事の角度から一つの物事を理解し体験することにある.
    プログラム内のオブジェクトは現実のオブジェクトに対する隠喩である.
    現実の電話が自分で電話をかけることができなくても、私たちが知っている電話という概念を利用してソフトウェアオブジェクトを記述すれば、この事実を簡単に理解し、覚えることができます.

    最終結論


    創造されたオブジェクトの特性を思い浮かべることができるなら、現実のオブジェクトの名前でオブジェクトを記述しましょう.そうでなければ、現実を無視して、自由に世界を創造しましょう.