特定可能性

特定可能性に基づく
オブジェクトモデル
腐肉プロジェクト
新田直也
数学用語の確認
• 写像の種類
<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
外部から特定可能な集合
とその階数の提示
推論エンジン
ソースコード
特定可能性の記述
現在位置から特定可能な
集合とその階数の提示
上位互換性を保った
設計変更
機能の一般化
プログラミング言語の
拡張
言語拡張の方針
•
•
•
•
クラスとは別にフレームという一級市民を用意.
フレームのみ特定可能性の対象に.
コードの依存の方向と特定可能性の方向を独立に.
特定可能なフレームとの直接のインタラクションを可
能に.
• フレームのインスタンス化は制限される.
• フレームは引数,戻り値,局所変数の型として出現
しない?
• フレーム間の継承も可能に?