SOLIDの原則4 インターフェース分離の原則
| 登録日 | :2023/03/30 22:59 |
|---|---|
| カテゴリ | :Python基礎 |
概念
インターフェース(抽象クラス)のメソッドが多すぎる場合は、インターフェースを分離します。
目的
インターフェース上に必要ないメソッドを追加して、継承先で無駄なコードを作成することがないようにする。
-
インターフェースを継承した場合、定義されているメソッドは必ずオーバライドして 実際のコードを書かないといけないので、使わない場合はただの無駄なコード。継承するインターフェースのもつメソッドは必要最小限とする。
-
インターフェースのもつメソッドが増えすぎると、コードが複雑になり理解が難しくなる
-
インターフェースの継承先が増えすぎて、インターフェースの修正による影響範囲が大きくなり保守性が低下する
インターフェースとは
メソッドの中身を記載していない継承して利用するためのクラス
# interface_segregatioin.py
from abc import ABCMeta, abstractmethod
# 修正コード
class Athlete(metaclass=ABCMeta):
pass
"""以下のようにインターフェースを分ける"""
class SwimAthlete(Athlete):
@abstractmethod
def swim(self):
pass
class JumpAthlete(Athlete):
@abstractmethod
def high_jump(self):
pass
@abstractmethod
def long_jump(self):
pass
# インターフェースを継承したクラスを作成
class Athlete1(SwimAthlete):
def swim(self):
print('I swim')
# 多重継承によって、複数のインタフェースを継承することも可能
class Athlete2(SwimAthlete, JumpAthlete):
def swim(self):
print('I swim')
def high_jump(self):
print('I jump high')
def long_jump(self):
print(' i jump long')
if __name__ == '__main__':
john = Athlete1()
john.swim()
yuji = Athlete2()
yuji.high_jump()