委譲による継承の置き換え Replace Inheritance with Delegation
継承、委譲とは
そもそも継承とは、親にあたるクラスから財産を受け継ぐこと。
多くのオブジェクト指向プログラミング言語は、継承の機能を持っている。
委譲とは、「他のクラスから別のインスタンスのメソッドを呼び出し処理を実現する」こと
要するにおまかせをするということ。
継承と委譲の比較
継承 : クラス同士の関係
委譲 : インスタンス同士の関係
継承を多様する課題
- サブクラスがスーパークラスの機能の一部しか利用していない。
- サブクラスがスーパークラスとIS-A関係にない
- LSPに反している
- 契約を守っていない
結果
- 不適切な継承関係の解消
- クラスが必要としている機能が明確になる
- クラスの改良・機能追加が容易になる
- 以上を行うメソッドを記載する必要がある
サンプルコード
Another.java
Class Another {
void method()
...
}
Class Something extends Another {
}
Something.java
Class Something {
Another _delegate = new Another();
...
void method() {
_delegate.method();
}
}
補足
相続拒否とは
継もとの大半のメソッドを使わっていない。
この相続拒否は、契約違反でもある。
リファレンス・マニュアルを見て、制約条件をまもる必要もある。
Chain Constructors
コンストラクタを複数用意する場合、
重複したコードになる。
それを引数なしのコンストラクタから、引数ありのコンストラクタを呼び出すことで、冗長化を防ぐ。
リスコフの置換原則
Author And Source
この問題について(委譲による継承の置き換え Replace Inheritance with Delegation), 我々は、より多くの情報をここで見つけました https://qiita.com/decoch/items/361eb1681d231ca83e65著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .