Python基礎 オブジェクト指向SOLID(インターフェース分離の原則)
| 登録日 | :2025/09/17 18:32 |
|---|---|
| カテゴリ | :Python基礎 |
I : Interface segregation(インターフェース分離の原則)
インターフェースのクライアントにとって利用しないプロパティやメソッドへの依存を強制してはならない。
インターフェースや抽象クラスの抽象メソッドは、未実装のままではエラー
関係ないメソッドがあったとしても実装しなければならない
インターフェースに用意されている不必要なプロパティやメソッドにクライアントが依存しなくてもいいように、インターフェースは適切に分離すべき
原則に違反すると
-
インターフェースに変更があると、実装側で使っていないメソッドがある場合も修正しなければならなくなる
-
不要なメソッドを使わない(退化させる)ことで、リスコフの置換原則に違反する
-
インターフェースが複数のアクターに使われる場合、単一責任の原則に違反する
解決策
役割ごとにインターフェースを分割する
サンプルプログラム
from abc import ABCMeta, abstractmethod
class Vehicle(metaclass=ABCMeta):
def __init__(self, _name: str, _color: str):
self.name = _name
self.color = _color
class Movable(metaclass=ABCMeta):
@abstractmethod
def start(self):
pass
@abstractmethod
def stop(self):
pass
class Flyable(metaclass=ABCMeta):
@abstractmethod
def fly(self):
pass
class Airplane(Vehicle, Movable, Flyable):
def start(self):
print(f'{self.name}: start')
def stop(self):
print(f'{self.name}: stop')
def fly(self):
print(f'{self.name}: fly')
class Car(Vehicle, Movable):
def start(self):
print(f'{self.name} : start')
def stop(self):
print(f'{self.name} : stop')
if __name__ == '__main__':
plane = Airplane('ANA', 'Blue')
car = Car('Toyota', 'Red')
plane.fly()
car.start()