続:オブジェクト指向プログラミングの基本的な概念の話【コンポジション】
前回:オブジェクト指向プログラミングの基本的な概念の話【カプセル化・抽象化・ポリモーフィズム・継承】
今回は前回の続きで、扱っていなかった概念である「コンポジション」をまとめます。
参考書:独学プログラマー Python言語の基本から仕事のやり方まで(第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
Author And Source
この問題について(続:オブジェクト指向プログラミングの基本的な概念の話【コンポジション】), 我々は、より多くの情報をここで見つけました https://qiita.com/alumite/items/af260711be31229c61fc著者帰属:元の著者の情報は、元の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 .