第 8 回 : 科学的モデリング 継承 8~ タイプ ( 型 ) 置換原理 と 論理状態空間 第 8 回の話題 ~ タイプ ( 型 ) 置換原理 と 論理状態空間 今回は継承関係をより科学的に理解するために タイプ ( 型 ) 置換原理 (the principle of type substitution/type substitution principle) 自身の解説をします 前回のコラムまでの解説において 継承関係を正しく理解し 活用するには タイプ ( 型 ) 置換原理 の理解と適用が不可欠であることを強調してきました そして サンプルの継承関係のクラス図を用いて タイプ ( 型 ) 置換原理 の適用も解説してきました 今回は タイプ ( 型 ) 置換原理 をより良く理解するために基本的かつ重要事項であるタイプ ( 型 ) の 論理状態空間 の解説を行います 論理状態空間 による タイプ ( 型 ) 置換原理 の理解は 数学的に正確でありながら 同時に直観的に分かり易いというメリットがあります そこで 今回のテーマは : タイプ ( 型 ) の タイプ ( 型 ) 置換原理 と 論理状態空間 から継承関係を理解する です タイプ ( 型 ) 置換原理の基本原理 第 7 回のコラムでは タイプ ( 型 ) 置換原理 とその代表例である リスコフ置換原理 (Liskov substitution principle) を紹介しました リスコフ置換原理 は最も広く知られている タイプ( 型 ) 置換原理 ですが 極めて厳しい ( 制約が大きい ) タイプ ( 型 ) 置換原理 です このように書くと : なぜ 他の タイプ ( 型 ) 置換原理 よりも厳しい ( 制約が大きい ) 置換原理なのか? 厳しい ( 制約が大きい ) とはどういう事か? という疑問が生じます この疑問を解消するには まずは タイプ ( 型 ) 置換原理 についてもう少し色々なことを 理解する必要があります そこで今回は タイプ ( 型 ) 置換原理 の基本的な考え方を理解していきます 科学的モデリング 第 8 回 ~ 継承 8 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
なおここから解説は リスコフ置換原則 に焦点を当てた解説ではなく 専門家が提案している色々な タイプ ( 型 ) 置換原理 の根底となる基本解説であることに留意してください まず 多くの専門家が提案している タイプ ( 型 ) 置換原理 のどれもが クラスのタイプ ( 型 ) の 属性の不変条 件 クラス不変条件 操作の事前条件 操作の事後条件 に注意を払います さらにこの中でも最も基本となるのが クラスの 属性の不変条件 ( 制約 ) と クラス不変条件 です そこで 今回はクラスの 属性の不変条件 と クラス不変条件 に焦点を当てて タイプ ( 型 ) 置換原理 を解説していきます タイプ ( 型 ) の 論理状態空間 図 8-1 には クラス 自動車 とクラス スポーツカー およびクラス トラック が継承関係にあります スーパークラスであるクラス 自動車 に注意を向けると 特性 ( プロパティ ) として3つの属性が定義されていることが分かります 図 8-2 (* 今回のコラムは 属性の不変条件 と クラス不変条件 に焦点を当てて解説するので 操作はクラス図から省略しています ) 図 8-1 PAGE 2 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
図 8-2 3つの属性の制約はその属性の値の有効範囲を指定していることが分かります ここで この3つの属性 速度 エンジン回転数 走行距離 を 図 8-3 に示すように次元軸で表現してみます 1 エンジン回転数 1 走行距離 3 速度 図 8-3 図 8-3 が示しているのはクラス 自動車 のタイプ ( 型 ) の 論理状態空間 (logical state space) と呼ばれる 論理状態空間を構成する各次元軸になります 逆に言えば 全ての次元軸を組み合わせるとクラス 自動車 のタイ プ ( 型 ) の 論理状態空間 が構成されます 論理状態空間 が意味することは クラス 自動車 から生成されるオブジェクト ( インスタンス ) は 全てこの 論理状態空間 の各次元軸の範囲内に収まるという事です PAGE 3 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
別の表現をすれば 正当な値を持つクラス 自動車 のオブジェクト ( インスタンス ) の各属性の値は この 論理 状態空間 の次元軸の範囲の外部に存在することはありえないということです 表 8-1 科学的モデリング規則 : クラスのタイプ ( 型 ) の 論理状態空間 を明確にせよ クラスのタイプ ( 型 ) の全体の制約を クラス不変条件 と呼ぶ クラス不変条件 はクラスの全てのオブジェクト ( インスタンス ) が常に満たさなければならない制約である 1 2 論理状態空間 は クラス不変条件 で指定された 全ての状態の集合 を表現した空間である 論理状態空間 を表現する各次元軸はオブジェクト ( インスタンス ) の値を指定する次元軸である 表 8-1 論理状態空間 の継承と 同型 特殊化 拡張 タイプ置換原理 は この 論理状態空間 を用いて表現することが可能です 下記 表 8-2 の様になります 科学的モデリング規則 : サブタイプ ( 型 ) の論理状態空間はスーパータイプ ( 型 ) の 論理状態空間 内に含まれる サブタイプ 論理状態空間 は完全にスーパータイプの 論理状態空間 の中に含まれる必要がある 表 8-2 表 8-2 から分かることは下記の2つ点です スーパータイプの 論理状態空間 は サブタイプに継承される ( サブタイプは何も再定義しなければスーパータイプと同じ論理状態空間を持つ ) スーパータイプの 論理状態空間 は スーパータイプの 論理状態空間 よりも 同じ あるか 小さい 必要があるこのことを少し詳しく見ていきます クラス スポーツカー は 独自の属性を追加していません またスーパークラスのタイプ ( 型 ) の制約を再定義していません このことからクラス スポーツカー のタイプ ( 型 ) は スーパークラス 自動車 のタイプ ( 型 ) と 同型 ですから 全く同じ 論理状態空間 であることは簡単に判断できます 図 8-4 PAGE 4 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
一方 クラス トラック は 独自の属性 積載重量 を追加しています またスーパークラスのタイプ ( 型 ) の属性 速度 の制約を ( 速度 >= && 速度 <=15) と再定義しています このことからクラス トラック のタイプ ( 型 ) は スーパークラス 自動車 のタイプ ( 型 ) を 特殊化 かつ 拡張 していることが分かります クラス トラック の 論理状態空間 を 図 8-6 に示します 図 8-5 図 8-6 を見るとクラス トラック の 論理状態空間 は スーパークラス 自動車 のタイプ( 型 ) を 特殊化 した分だけ狭い空間になっていることが分かります ここで重要なことは 表 8-2 からの論理的帰結で サブタイプによる 特殊化 は 制約を 強く( 厳しく ) する ことは可能ですが 弱く ( 緩く ) することは不可能であるということです 1 エンジン回転数 1 走行距離 特殊化 されたクラス トラック の次元軸 15 3 速度 図 8-6 PAGE 5 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
ただし クラス トラック は独自の属性 積載重量 を追加しています 属性 積載重量 はスーパークラスで あるクラス 自動車 のタイプ ( 型 ) には存在しない特性 ( プロパティ ) ですから クラス トラック の 論理状態空 間 は スーパークラスであるクラス 自動車 の 論理状態空間 より 1 つ次元が多くなります つまり クラス トラック の 論理状態空間 は クラス 自動車 の 論理状態空間 を 拡張 しています ここで重要なことは 拡張 された次元軸はスーパータイプには存在しない次元軸であるため スーパータイプの制約の影響を受けないということです クラス トラック の 論理状態空間 の全ての次元軸は 図 8-7 のようになります 1 エンジン回転数 1 走行距離 特殊化 されたクラス トラック の次元軸 15 3 速度 拡張 されたクラス トラック の次元軸 3 最大積載量 図 8-7 ここまで解説してきたことを 表 8-3 に整理します PAGE 6 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
科学的モデリング規則 : タイプ置換原理を満たすサブタイプ ( 型 ) の 論理状態空間 サブタイプの 論理状態空間 はスーパータイプ 論理状態空間 の次元軸を含んでいなければならない サブタイプの 論理状態空間 は独自の次元軸を追加して持つことができる サブタイプによる 特殊化 は スーパータイプの制約条件を 強く ( 厳しく ) する ことは可能だが 弱く ( 緩く ) することは不可能である サブタイプの 論理状態空間 はスーパータイプの 論理状態空間 よりも 狭く することはできるが 広く することはできない サブタイプの 論理状態空間 がスーパータイプより多くの次元を持つ場合は スーパータイプの 論理状態空間 を 拡張 している 拡張 された次元軸はスーパータイプには存在しない次元軸であるため スーパータイプの制約の影響を受けない 表 8-3 なお 表 8-1 から 表 8-3 の 科学的モデリング規則 は 単一継承(single inheritance) だけでなく 多重継承 (multiple inheritance) にも完全に当てはまる規則であることを付け加えておきます 条件の比較と 強い ( 厳しい ) と 弱い ( 緩い ) ここで 条件同士の比較 について考え方を述べておきます まずは 厳密ではないものの 理解と記憶のための 簡易的な方法 として下記の 表 8-4 様に覚えると良いでしょう 科学的モデリング規則 : 制約の 強い ( 厳しい ) と 弱い( 緩い ) より大きな 範囲は 弱い( 緩い ) 条件 小さい 範囲は 強い( 厳しい ) 条件 表 8-4 もう少し正確に 条件同士の比較 について考えてみます 補足ノート参照 条件同士の 同じ ( 等しい ) 強い( 厳しい ) 弱い( 緩い ) を判定するには 比較する条件同士間に 図 8-8 のような関係があるときに比較が可能となります このとき 2つの条件間の 同じ ( 等しい ) 強い( 厳しい ) 弱い ( 緩い ) の順序関係が判定できます そのため 条件の範囲 の比較をする場合は まずは各条件の設定と条件の注意を払う必要があります PAGE 7 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
ケース 1 ケース 2 ケース 3 ケース 4 条件 1 条件 2 条件 1& 条件 2 条件 1 条件 2 条件 1 条件 2 比較可能 比較可能 比較不可能 比較不可能 図 8-8 図 8-8 から見て分かる通り 2 つの条件の範囲が どちらかの条件にもう片方の条件が含まれる ( ケース 1) あ るいは 完全に一致する ( ケース 2) ときのみ条件の比較が可能なことが分かります 実はケース 1 とケース 2 のような関係は 必要条件 (necessary condition) 十分条件 (sufficient condition) 必要十分条件 (necessary and sufficient condition) という用語があります 表 8-5 つまり 条件の比較は 必要条件 十分条件 必要十分条件 の関係が成立させるように 条件を設定する必 要があることが分かります ケース 解説 条件 2 が条件 1 の範囲内にある : 比較可能 条件 1 は条件 2 の 必要条件 (necessary condition) と呼ばれる ケース 1 条件 1 は条件 2 よりも 弱い ( 緩い ) 条件 条件 2 は条件 1 の 十分条件 (sufficient condition) と呼ばれる 条件 2 は条件 1 よりも 強い ( 厳しい ) 条件 条件 1 と条件 2 の範囲が等しい : 比較可能 ケース 2 条件 1 と条件 2 は互いに 必要十分条件 (necessary and sufficient condition) と呼ばれる 条件 1 と条件 2 の条件は 論理的同値 (logical equivalence) とも呼ばれます 条件 1 が条件 2 の範囲が交差している : 比較不可能 ケース 3 条件 1 と条件 2 が互いに 必要条件 (necessary condition) 十分条件 (sufficient condition) 必要十分条件 (necessary and sufficient condition) のいずれにもなっていないので比較 不可能 ケース 4 条件 1 が条件 2 の範囲が独立している : 比較不可能 PAGE 8 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
条件 1と条件 2が互いに 必要条件 (necessary condition) 十分条件(sufficient condition) 必要十分条件(necessary and sufficient condition) のいずれにもなっていないので比較不可能 表 8-5 科学的モデリング補足ノート : 命題 ここまで 条件式や条件文 と呼んでいたものは数学や論理学では 命題 (proposition) と呼びます 命題とは文章や数式の 真 (true) 偽(false) が判定できるものを意味します 命題と書くと難しく感じますが まずは高校 1 年生のときに数学の教科書に掲載される命題の内容で間に合います 命題を扱う時に検討することの1つに 十分条件である 必要条件である 必要十分条件 ( 論理的同値 ) である を判定があります 十分条件である 必要要件である 必要十分条件( 論理的同値 ) である の判定は 命題の中の登場する条 件を P Q の形式で表現すると判定しやすくなります 真 (true) 十分条件 必要条件 P Q が常に真(true) であれば PはQの十分条件となり これはPが成立すれば 必ず Qが成立しなければならないことを意味します P Q が真(true) になるときがあるのであれば QはPの必要条件となります P Q が常に真(true) であり 同時に Q P も常に真(true) であるときはPとQは必要十分条件の関係になります なお 記号 は ならば(implies) と読みます 例 1:x=y=であることは xy=であるための 十分条件 必要要件 必要十分条件 ( 論理的同値 ) のいずれの条件であるか? x=y=ならばxy=である が必ず成立するか? 成立する xy=ならばx=y=である が必ず成立するか? 常には成立しない ( 反例 ) xy=を成立させるものとして x=1でy=などがある PAGE 9 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
以上からx=y=であることは xy=であるための 十分条件 です逆にxy=であることは x=y=であるための 必要条件 です 例 2:x 2 =y 2 であることは x=yであるための 十分条件 必要要件 必要十分条件 ( 論理的同値 ) のいずれの条件であるか? x 2 =y 2 ならばx=yである が必ず成立するか? 常には成立しない ( 反例 ) x 2 =y 2 を成立させるものとして x=-1 y=1などがある x=yならばx 2 =y 2 である が必ず成立するか? 成立する 以上からx 2 =y 2 であることは x=yであるための 必要条件 です逆にx=yであることは x 2 =y 2 であるための 十分条件 です それから 命題の真偽は 図 8-8 に条件の比較を図式化したように 集合の包含関係で判定することができ 命題 P Q が真(true) とは {x P} {x Q} と表現きでます 上記の例であれば x 2 =y 2 やx=y=を成立させる集合の包含関係を比較することになります 十分条件 となる集合が小さく 必要要件 の集合に含まれことになります 集合が重なるときは 必要十分条件 のときです 命題については必要に応じて 科学的モデリング 補足ノート で解説することにします 表 8-6 まとめ & 次回 今回のコラムは タイプ ( 型 ) 置換原理 を直観的に理解するために基本的かつ重要事項であるタイプ ( 型 ) の 論理状態空間 の解説をおこないました 多相 ( ポリモフィズム / 多態 ) を利用する場合の継承関係は 専門的な呼び方として タイプ ( 型 ) 継承 (type inheritance) があります 第 2 回コラム参照 この呼び方から分かるとおり タイプ ( 型 ) 継承 (type inheritance) では タイプ( 型 ) に着目し タイプ ( 型 ) を継承 することを意味します そしてスーパークラスのタイプ ( 型 ) とサブクラス ( 型 ) にサブタイプ ( 部分型 ) 関係が成立しなければなりません さらに 振る舞い ( 意味的 ) のサブタイプ ( 部分型 ) 関係の成立が必要 であることもコラムで再三解説してきました タイプ置換原理 により 振る舞い( 意味的 ) のサブタイプ ( 部分型 ) 関係が成立するかどうかを判定しますが これはタイプ ( 型 ) 間の 論理状態空間 の包摂関係を理解することで タイプ置換原理 の考え方の基本が理解できます PAGE 1 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.
振る舞い( 意味的 ) のサブタイプ ( 部分型 ) 関係の成立 を判定するには タイプ ( 型 ) のプロパティ ( 特性 ) を明確にし クラスのタイプ ( 型 ) の 属性の不変条件 クラス不変条件 操作の事前条件 操作の事後条件 を明確にしなければなりません そして 属性の不変条件 クラス不変条件 操作の事前条件 操作の事後条件 は 継承関係の正確な設計と実装だけでなく インスペクションやテストにとっても極めて重要な意味を持ちます 表 8-7 科学的モデリング規則 : クラスのタイプ ( 型 ) の条件を明確にしなければ検証 & 妥当性確認が不可能である クラスの 正当性 (correctness) や 妥当性(validity) を表現するタイプ( 型 ) の 属性の不変条件 クラス不変条件 操作の事前条件 操作の事後条件 を明確にしなければ クラスに対する検証すべき内容が明確にならず検証 (verification) と妥当性確認 (validation) が不可能である インスペクションやテストが漠然と実施される 何をもってクラスの 正当性 や 妥当性 を満たすかが不明瞭なので 適切なテストケースやテストデ ーターを作成できない 以上からインスペクションやテストが漠然と実施しても品質保証にならない 表 8-7 す 次回以降は 操作の事前条件 操作の事後条件 に焦点を移して タイプ置換原理 について解説をする予定で 参考文献 文献 [8-1] [BARBARAH. LISKOV 1994] A Behavioral Notion of Subtyping 文献 [8-2] [Peter Wegner 1991] Concepts and Paradigms of Object-Oriented Programming 文献 [8-3] [Markku Sakkinen] Inheritance and Other Main Principles of C++ and Other Object- Oriented Languages 文献 [8-4] [Luca Cardelli, Peter Wegner1985] On Understanding Types,Data Abstraction, and Polymorphism PAGE 11 C O P Y R I G H T 2 1 4 ~ 2 1 5 H AS H I M O TO S O FT W A R E C O N S U LTI N G I N TE R N AT IO N A L I N C. AL L R I G H T S R E S E R V E D.