特定可能性に基づく オブジェクトモデル 腐肉プロジェクト 新田直也 数学用語の確認 • 写像の種類 <1対1の上への写像> A B <1対1の中への写像> A B <多対1の上への写像> A B <多対1の中への写像> A B 写像の種類とクラス図 • オブジェクト間の写像の種類は多重度で表現できる. <1対1の上への写像> A B 1 A 1 A B 1 B 0..1 <多対1の上への写像> 1..* <1対1の中への写像> 1 <多対1の中への写像> A B 0..* 1 無名写像 • 定義域と値域を定めたとき,それらの間の写像が 高々1つしか存在しないとき,その写像を無名写像 という. <無名写像> A <名前つき写像> B A f g B 無名写像の合成 • 無名写像の合成は経路に依らない. B A D C 特定可能性 • 集合Aから集合Bへの上への無名写像が存在する とき,Aの要素からBの要素を特定可能であるという. B A D C B: A C: A D: B D: C D: A 半特定可能性 • 集合Aから集合Bへの中への無名写像が存在する とき,Aの要素からBの要素を半特定可能であると B いう. A D C B: A C<: A D<: B D: C D<: A 集合への特定可能性 • 集合を要素として持つ集合も扱うことができる. • ただし,要素となる集合は互いに素でなければなら ない. B A [B]: A 特定可能性の例1 • Radishの設計の一部 Player [Player]: System [Character]: System Character<: Player [Animation]: Character Animation<: Player System Character Animation 特定可能性の例2 • (抽象クラスも含めて)親クラスも仮想的にインスタン スを持つと考えると… A E B C D A<: B A<: E B<: C B<: D C+D: B C+D+E: A 特定可能性の論理 • 特定可能性の公理系: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ⇒ A: A A: B, B: C ⇒ A: C A: B ⇒ A <: B A<: B, B<: C ⇒ A<: C [B]: A ⇒ A<: B A: B ⇒ [A]: [B] A: B, B<: A ⇒ B: A A: B, C: D ⇒ A+C: B+D [A+B]: C ⇒ [A]: C [A]: C, [B]: C ⇒ [A+B]: C 特定可能性を利用した設計変更 • 上位互換性を保った特定可能性の変更. →機能拡張のための設計変更. • 上位互換性: 外部から見える特定可能性を変える ことなく,全体の特定可能性を減らすこと. A A D C 1..* 1 設計変更 & 機能追加 1..* 1 1..* 1 0..* C B 1 B 1..* 1 B: A, C: B, A: System ⇒ C: A, B: System, C: System B: A, C: A, A: System ⇒ B: System, C: System 特定可能性を利用した仕様変更 • 局所的な特定可能性を維持したまま,外部か ら見える特定可能性を持ち上げる. Document System Page Document: System Page<: Document [Page]: Document ⇒[Page]: System [Document]: System Document<: System Page<: Document [Page]: Document ⇒[[Page]]: System 特定可能性を利用した プログラム理解1 • 外部(System)から特定可能な集合間の関 係は,実行時に不変な内部のデータ構造に 相当する. • オブジェクト指向言語では上記構造は以下の 理由により把握するのが困難. – static変数が散在する. – パスを辿る必要がある. – 異なるパス間でインスタンスを共有するかどうか の判別が困難. – 多相性に阻まれる. 特定可能性を利用した プログラム理解2 • 現在位置からの特定可能性は,実行時の相 互作用の可能性を示唆している. • オブジェクト指向言語では,異なるパス間でイ ンスタンスを共有するかどうかの判別が困難. home Person 0..* House 1 1 0..1 0..1 name 1 1 String Player Main address 2..* 0..* 1 1 1..* Character 特定可能性の利用 • IDEとプログラミング言語の拡張による. IDE 外部から特定可能な集合 とその階数の提示 推論エンジン ソースコード 特定可能性の記述 現在位置から特定可能な 集合とその階数の提示 上位互換性を保った 設計変更 機能の一般化 プログラミング言語の 拡張 言語拡張の方針 • • • • クラスとは別にフレームという一級市民を用意. フレームのみ特定可能性の対象に. コードの依存の方向と特定可能性の方向を独立に. 特定可能なフレームとの直接のインタラクションを可 能に. • フレームのインスタンス化は制限される. • フレームは引数,戻り値,局所変数の型として出現 しない? • フレーム間の継承も可能に?
© Copyright 2024 ExpyDoc