KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

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()