LoginSignup
1
0

More than 3 years have passed since last update.

続:オブジェクト指向プログラミングの基本的な概念の話【コンポジション】

Posted at

前回:オブジェクト指向プログラミングの基本的な概念の話【カプセル化・抽象化・ポリモーフィズム・継承】
今回は前回の続きで、扱っていなかった概念である「コンポジション」をまとめます。
参考書:独学プログラマー 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
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0