Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ コンポジションの基本原則 | セクション
Pythonにおけるオブジェクト指向プログラミング

bookコンポジションの基本原則

メニューを表示するにはスワイプしてください

コンポジションは、より複雑なオブジェクトを、より単純で独立したコンポーネントを組み合わせて構築することに重点を置く手法。継承のように堅牢な階層構造を作るのではなく、コンポジションではクラスが内部に持つオブジェクトを通じて協調することが可能。これにより、システムは柔軟性モジュール性、および保守性の向上が実現され、コンポーネントを全体構造を壊すことなく置き換えたり拡張したりできる。

example.py

example.py

copy

Orderは支払い、在庫、配送のロジック自体を実装しない。 代わりに、個別のオブジェクト(PaymentInventoryShipping)を持ち、それらを利用して処理を完了する。

各コンポーネントは一つの責任のみを持ち、Orderはそれらを調整する役割のみを担う。 支払いや配送の仕組みを変更したい場合、Orderクラスを修正せずにコンポーネントを差し替えることができる。

コンポジションを使用する際の注意点としては、あまりに多くのコンポーネントを集めて管理が困難になるゴッドオブジェクトの生成、外部クラスを通じてコンポーネントのAPIが漏れ出しインターフェースが煩雑になること、コンポーネント同士が内部実装に過度に依存し隠れた結合が生じることなどが挙げられる。

ゴッドオブジェクト
expand arrow

ゴッドオブジェクトは過剰な役割を持ちすぎます。多くのコンポーネントを保持し、多くの責任を担うため、そのクラスは理解・テスト・保守が困難になります。

コンポーネントAPIの漏洩
expand arrow

外側のクラスが、コンポーネントの内部メソッドや属性を公開してしまう場合に発生します。独自の明確なインターフェースを提供せず、ユーザーに内部オブジェクトへ直接アクセスさせてしまいます。

隠れた結合
expand arrow

コンポーネント同士が内部の詳細で密接に結びついてしまいます。一部を変更すると、他の部分が予期せず壊れることがあり、明確な契約ではなく内部構造に依存している状態です。

question mark

コンポジションを使用する際、設計の保守性を損なう一般的なリスクは何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  16

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  16
some-alt