【継承】と【委譲】の違いとは?例文付きで使い方や意味をわかりやすく解説
継承と委譲の分かりやすい違い
継承は、すでにあるクラスの持ち物や振る舞いをそのまま引き継ぎ、自分の一部として使える形にする仕組みです。委譲は、別のオブジェクトを内側に持ち、その仕事を任せて結果だけ受け取る形を指します。
継承は「である」の関係、委譲は「持っている」の関係だとよく言われます。継承は結びつきが強く、親を直すと子まで影響が及びます。
委譲は任せる相手を差し替えやすく、変更に強いとされます。
継承とは?
継承は、あるクラスがすでに定義されている別のクラスの持ち物と振る舞いを引き継ぎ、自分のものとして扱えるようにする仕組みです。引き継ぐ側を子、引き継がれる側を親と呼び、子は親の定義に加えて、独自の要素を足したり、一部を作り替えたりできます。共通する部分を親にまとめておけば、同じ内容を何度も書かずに済むのが利点です。
「犬は動物である」のように、子が親の一種だといえる関係のときに素直に当てはまります。ただし結びつきは強く、親を直せば子すべてに影響が及びます。共通化したい一心で無理に親子関係を作ると、実際には一種とはいえないものまで親の都合に縛られ、あとから解きほぐしにくくなります。
継承は便利ですが、使いどころを選ぶ道具だと考えたほうが安全です。
継承の例文
- ( 1 ) 共通部分を親クラスにまとめ、継承で引き継ぐようにした。
- ( 2 ) 継承は「である」の関係が成り立つときに素直に当てはまる。
- ( 3 ) 親を修正したところ、継承しているすべての子に影響が出た。
- ( 4 ) 共通化したいだけの理由で継承を使うと、あとで解きほぐしにくくなる。
- ( 5 ) この子クラスは、親の振る舞いの一部だけを作り替えている。
- ( 6 ) 継承の階層が深くなりすぎて、どこで定義されているか追えなくなった。
継承の会話例
委譲とは?
委譲は、自分では処理を抱え込まず、内部に持っている別のオブジェクトに仕事を任せ、その結果を使う形です。「印刷する」という呼びかけを受けた部品が、実際の印刷処理は内部に持つ印刷担当のオブジェクトに回す、といった具合です。関係でいえば「持っている」にあたり、親子ではなく、依頼者と担当者の間柄になります。
この形の強みは、任せる相手を後から差し替えられることです。担当を別のものに取り替えれば、外から見た呼びかけ方を変えずに中身の振る舞いを変えられます。試験のときに、本物の担当の代わりに簡易なものを差し込むこともできます。
一方、任せる呼びかけを一つずつ書く手間が増えるため、コードはやや長くなりがちです。設計の指針として、まず委譲を検討し、継承は本当に一種だといえるときに限る、という考え方も知られています。
委譲の例文
- ( 1 ) 実際の処理は内部の担当オブジェクトに委譲している。
- ( 2 ) 委譲なら、任せる相手を差し替えるだけで振る舞いを変えられる。
- ( 3 ) 試験のときは、本物の代わりに簡易なものを委譲先に差し込む。
- ( 4 ) 委譲は「持っている」の関係で、親子関係にはならない。
- ( 5 ) 呼びかけを一つずつ書き足す必要があり、委譲はコードがやや長くなる。
- ( 6 ) まず委譲を検討し、継承は本当に一種といえるときに限る方針にした。
委譲の会話例
継承と委譲の違いまとめ
継承と委譲は、機能を再利用するための二つの道具ですが、結びつきの強さが違います。継承は親クラスの定義を引き継いで自分のものにする仕組みで、「子は親の一種である」と言い切れるときに素直に当てはまります。
ただし親を直せば子すべてに影響し、無理に共通化すると後で解きほぐしにくくなります。委譲は別のオブジェクトを内側に持ち、仕事を任せて結果を受け取る形で、「持っている」の関係です。
任せる相手を差し替えられるため変更に強い反面、呼びかけを書き足す手間が増えます。似ているだけなら委譲、一種だと言い切れるなら継承、と考えると判断を誤りません。
継承と委譲の読み方
- 継承(ひらがな):けいしょう
- 継承(ローマ字):keishou
- 委譲(ひらがな):いじょう
- 委譲(ローマ字):ijou