前回:オブジェクト指向プログラミングの基本的な概念の話【カプセル化・抽象化・ポリモーフィズム・継承】
今回は前回の続きで、扱っていなかった概念である「コンポジション」をまとめます。
参考書:[独学プログラマー Python言語の基本から仕事のやり方まで]
(https://www.amazon.co.jp/dp/B07BKVP9QY/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)(第13章)
参考記事:オブジェクト指向によるクラス設計
コンポジション
やること・出来ること
- 「is-a関係」(継承)に対応する「has-a関係」を実現する。(例えば飼い主と飼い犬の関係など)これにより、オブジェクトで表現できる幅が広がる。具体的にはクラス間の関係を表現することができる。(=人間の思考に合わせたデータの持ち方・処理を実現できる)
お気持ち
個人的な理解としては、人間は人間の思考で考えるので、基本的に人間の考える方法で処理できるほうがわかりやすい。そのためデータや処理の持ち方も、人間の言語や思考と似た形にしたほうが扱いやすい。
(高水準言語は、低水準言語より扱いやすいという話と同じ)
となると、思考方法が文化によって異なるので、日本語文化圏に合った処理方法、プログラミング言語もあるのだろうか。(研究されてそう。)
具体例
Composition.py
class Dog:
def __init__(self, name, breed, owner):
self.name = name
self.breed = breed
self.owner = owner
class Person:
def __init__(self, name):
self.name = name
## 飼い主
gian = Person("Goda Takeshi")
## 飼い犬(引数にPersonオブジェクトを渡している)
muku = Dog("Muku", "Crossbreed", gian)
## Dogオブジェクトに内包(コンポジション)されている
## Personオブジェクトのnameメソッドを呼び出している
print(muku.owner.name)
実行結果
Goda Takeshi