オブジェクト指向プログラミング (OOP)についてもう少し詳しく

結構難解ですよねオブジェクト指向・・

オブジェクト指向プログラミング (OOP) は、プログラミングのパラダイムの1つで、プログラミング言語によって実装されます。 OOPは、プログラムを「オブジェクト」と呼ばれる概念に基づいて設計・開発することを特徴としています。

オブジェクトとは

オブジェクトは、データとそれを操作するためのメソッドを持つ概念です。

例えば、「車」というオブジェクトは、車の色や車のナンバーなどのデータを持ち、走る、停止するなどのメソッドを持っています。

OOPには、以下のような特徴があります。

  • インカプセル化 : オブジェクトのデータを隠蔽し、外部からアクセスできないようにすること。
  • 継承 : 既存のクラスから新しいクラスを作成すること。 新しいクラスは、既存のクラスから継承したプロパティやメソッドを使用できます。
  • ポリモーフィズム : 一つのインターフェースに対して、複数のオブジェクトを扱うことができる。

pythonでは、クラスを定義することで、オブジェクト指向プログラミングを行うことができます。 クラスを使用することで、インスタンスを生成し、それぞれのインスタンスに対して、データやメソッドを持たせることができます。

インカプセル化とは

インカプセル化(encapsulation)とは、オブジェクト指向プログラミングにおいて、オブジェクトのデータや機能を隠蔽し、外部からのアクセスを制限する概念です。

インカプセル化によって、オブジェクト内部に実装されている処理の詳細を隠蔽し、外部からは必要最小限のインターフェースを提供することで、プログラムの保守性や拡張性を高めることができます。

Pythonでは、インカプセル化を実現するために、クラスの変数やメソッドに対して、プライベートアクセス(private)やプロテクテッドアクセス(protected)を行うことができます。 これにより、外部からの直接アクセスを防止し、クラス内部でのみ使用することができるようにすることができます。

ただし、pythonはアクセス修飾子がないので、それを表すために、変数やメソッドの名前の先頭にアンダースコアをつけることで表現します。

継承とは

継承(inheritance)とは、オブジェクト指向プログラミングにおいて、既存のクラスの機能を引き継いで新しいクラスを作成する概念です。

継承を行うことで、既存のクラスに実装されている機能を活用しながら、新しいクラスを作成することができ、コードの再利用性を高めることができます。

Pythonでは、継承を行うために、クラス定義の中で、継承元のクラスを指定します。

class 新しいクラス名(継承元のクラス名):
    # クラスの中身

継承元のクラスを継承した新しいクラスは、継承元のクラスに実装されているすべてのメソッドや変数を継承します。 また、新しいクラスは、継承元のクラスを拡張したり、上書きしたりすることで、独自の機能を追加することができます。

ポリモーフィズムとは

ポリモーフィズム(polymorphism)は、オブジェクト指向プログラミングにおいて、異なるクラスのオブジェクトに対して、同じメソッドを呼び出すことができる概念です。

ポリモーフィズムを使用することで、プログラマは、具体的なクラスを意識せずに、抽象的なインターフェイスを使用してプログラミングを行うことができ、コードの再利用性を高めることができます。

Pythonでは、多態性を実現するために、Duck Typingと呼ばれる手法を使用します。 Duck Typingとは、「鳴き声がアヒルの声のようだったらアヒルだ」という考え方で、オブジェクトがどのようなクラスに属しているかを意識せずに、そのオブジェクトが持っているメソッドや属性を見て判断するという考え方です。

これにより、異なるクラスのオブジェクトでも同じメソッドを呼び出すことができ、同じように振る舞うことができます。

class Duck:
    def quack(self):
        print("Quack, quack!")

class Goose:
    def quack(self):
        print("Honk, honk!")

duck = Duck()
goose = Goose()
duck.quack() # "Quack, quack!"
goose.quack() # "Honk, honk!"

上記のように、DuckクラスとGooseクラスは異なるクラスでありながら、quack()メソッドを呼び出すことができます。

これは、duckとgooseは、quack()メソッドを持っているという共通の点があるため、同じように振る舞うことができるということで、 これが、pythonにおけるポリモーフィズムの概念です。

コメント

タイトルとURLをコピーしました