前回の続き、
Aggregating Attribute
組織構造などの階層構造において、特定のオーバーライドが無い限り、子が親の属性を引き継いで使用する。
親の特性を子供が共有することはよくある。例えば、会社の会計通過が米ドルであれば、子供となる営業部の会計通過も同じになる。意図的に特性を無効化しない限り、親の属性を子供が引き継ぐことを表現するのが Aggregating Attribute である。
UML でこれを表現することはできないため、モデル中に<
実装例
前回の Organization Hierarchy の例に accountingCurrency の取得メソッドを追加する。
class Organization... Currency getAccountingCurrency() { if (accountingCurrency != null) return accountingCurrency; else { if (parent != null) { return parent.getAccountingCurrency(); } else { Assert.unreachable(); return null; } } }
accountingCurrency が null の場合には親の accountingCurrency を再起的に巡って返却する。
親(getParent())がnullの場合は最上位にあるため、accountingCurrency は null にはできないという制約を加える必要がある。
void setAccountingCurrency(Currency arg) { assertValidAccountingCurrency(arg); accountingCurrency = arg; } void assertValidAccountingCurrency(Currency arg) { Assert.isFalse (arg == null && getParent() == null); }