機能の抽象化とは、ある機能を抽象的な概念やインターフェースによって表現し、実装の詳細を隠蔽した上で、外部からはその機能を使用することができるようにすることを指します。
抽象化によって、プログラムの設計がより柔軟になり、再利用性が高くなります。
また、抽象化によって、関数やクラスなどの設計が簡潔になり、保守性も向上します。
よくあるのは共通した性質や機能を持つものをまとめて一つのクラスや関数として定義することです。それによって、複雑なプログラムをわかりやすく、再利用性の高いものに変更することができます。
例えば複数の異なる種類の車を扱うプログラムを考えます。
それぞれの車には、色や速度などの異なる属性がありますが、車として共通する機能として、走ることや停止することがあります。
これらの共通の機能をまとめて、車クラスとして定義し、それを継承した各車の種類のクラスで実装することで、プログラムを効率よく記述することができます。
抽象化のサンプル例
抽象化のサンプルコードは、複数のシチュエーションに対応するために、関数やクラスを使って、共通した機能をまとめることで実現します。
たとえば、複数の異なるファイル形式(CSV、Excel、JSONなど)からデータを読み込む処理を書く場合、それぞれのフォーマットごとに読み込み処理を書くのは面倒です。
そこで、「ファイルの読み込み」という共通の機能を持つクラスを作り、それを継承して、各フォーマットごとのクラスを作ることで、抽象化を実現します。
以下は、抽象化を使ったサンプルコードの一例です。
class DataReader:
def read(self, file_path: str) -> List[Dict[str, Any]]:
pass
class CSVDataReader(DataReader):
def read(self, file_path: str) -> List[Dict[str, Any]]:
with open(file_path) as f:
data = [row for row in csv.DictReader(f)]
return data
class ExcelDataReader(DataReader):
def read(self, file_path: str) -> List[Dict[str, Any]]:
data = pd.read_excel(file_path)
return data.to_dict(orient='records')
上記のコードでは、DataReaderという抽象クラスを作り、それを継承したCSVDataReaderとExcelDataReaderクラスを作成しています。これにより、readメソッドを呼び出すだけで、CSVやExcelからデータを読み込むことができるようになります。
コメント