『科学的モデリング』2回〜継承② 無断転載&無断配布を禁じます。
第2回:『科学的モデリング』継承②〜『継承される特性(プロパティ)』
第2回の話題〜継承は何を継承するのか?
今回のコラムの話題は『継承される特性(プロパティ)』についてです。 「そもそもサブクラスはスーパークラスからどのような特性(プロパティ)を継承するのか?」 という疑問に回答し説明します。 『科学的モデリング』の視点から継承される特性(プロパティ)を明確にして、今後の連載コラムの中 で正確に継承の意味を探ります。継承は全ての特性(プロパティ)を継承する
継承される特性(プロパティ)を説明するときに利⽤する【図2-1】のような簡単なUMLのモデルを考 えます。 操作(メソッド/関数)の継承 JavaやC++などの特定のプログラム⾔語の固有の仕様は別にして、オブジェクト指向設計の概念では、 スーパークラスの特性(プロパティ)は「全て」がサブクラスに継承されます。【図2-1】 【図2-1】を⾒るとサブクラス「person」はスーパークラス「animal」から全ての属性と操作(メソッ ド/関数)を継承しています。 継承により全ての属性と操作(メソッド/関数)がサブクラスに継承されることは良く知られていま す。 【図2-1】のサブクラス「person」のグレー色で表示されている特性(プロパティ)が、継承されたこ とを示しています。 UMLではサブクラスがスーパークラスから継承する特性(プロパティ)をオーバーライドしない場合 は、表記しない規則があります。 しかし、科学的に正確に継承を検討に時に必要になるので、本コラムでは表示して解説していきます。 関連、関連端(ロール名)および多重度の継承
『科学的モデリング』2回〜継承② 無断転載&無断配布を禁じます。 【図2-2】のサブクラス「person」の関連がグレー色で表示されていて、スーパークラス「animal」か ら関連「pair」が継承されたことを示しています。 【図2-2】 関連の制約の継承 【図2-3】を⾒るとサブクラス「person」はスーパークラス「animal」から関連「pair」、関連端(ロ ール名)「male」「female」そして、関連の両端の多重度も継承していますが、関連「pair」の制約 {symmetry}、関連端(ロール名)の制約{immutable}も継承しています。なお多重度も制約の1種で す。 【図2-3】のサブクラス「person」の関連の制約{symmetry}および関連端(ロール名)の制約 {immutable}がグレー色で表示されていて、スーパークラス「animal」から継承されたことを示してい ます。
『科学的モデリング』2回〜継承② 無断転載&無断配布を禁じます。 【図2-4】 【図2-4】は関連端をクラスの属性として表示させた図です。【図2-4】においてステレオタイプ≪ A≫ は 関連属性であることを示しています。 サブクラス「person」はスーパークラス「animal」から関連属性を継承していることが分かります。 初期値とデフォルト・パラメーターの継承 【図2-5】のクラス「animal」の属性「age」に初期値「0」が付与されています。また、操作(メソ ッド/関数)である「setAge(int newAge):void」に、デフォルト・パラメーター「0」が付与されてい ます。 また、サブクラス「person」はスーパークラス「animal」から属性「age」の初期値「0」と 「setAge(int newAge):void」に、デフォルト・パラメーター「0」が継承されていることが分かりま す。
【図2-6】
クラス不変条件の継承
【図2-6】ではクラス「animal」の属性「age」に制約{age>=0 and age <150}が付与されていま す。属性「gender」に制約{gender==” male” or gender ==” female” }が付与されています。
この2つの属性の制約は「不変条件」と呼ばれるものです。
【図2-6】では第4番目の区画に「クラス不変条件」を表示しています。
クラス「animal」の「クラス不変条件」は、属性「age」の制約{age>=0 and age <150}と属性 「gender」の制約{gender==” male” or gender ==” female” }の2つであることが分かります。
サブクラス「person」は、スーパークラス「animal」から属性「age」と属性「gender」を継承して いますが、その際に2つの属性の制約である「不変条件」も継承します。
『科学的モデリング』2回〜継承② 無断転載&無断配布を禁じます。 次回以降のコラムで「不変条件」と「クラス不変条件」について詳細に解説しますので、今回のコラム では「不変条件」と「クラス不変条件」も継承される特性(プロパティ)であることが理解できればOKで す。 【図2-6】 操作の「事前条件(pre-condition)」と「事後条件(post-condition)」の継承
【図2-7】ではクラス「animal」の操作(メソッド/関数)「setAge(int newAge = 0) : void」に 「Pre-condition(newaAge >=0 and newAge <150)」と「Post-Condition((age >=0 and age <150) and (age == newAge))」付与されています。
この操作(メソッド/関数)の2つの制約は
サブクラス「person」は、スーパークラス「animal」から操作(メソッド/関数)「setAge(int newAge = 0) : void」を継承していますが、同時にこの操作(メソッド/関数)の事前条件(pre-condition)」「事後条件(post-condition)」「Pre-condition(newaAge >=0 and newAge <150)」と「Post-Condition((age >=0 and age <150) and (age == newAge))」も継承してい ます。
「事前条件(pre-condition)」「事後条件(post-condition)」は、各操作(メソッド/関数)に付与 されるの制約で、各操作(メソッド/関数)の実⾏時に満たさなけばならない制約です。
『科学的モデリング』2回〜継承② 無断転載&無断配布を禁じます。 「事前条件(pre-condition)」「事後条件(post-condition)」についても、今後のコラムの中で詳し く解説します。