ブログで趣味でプログラミングからお料理まで呟いています。よろしくー。(^-^)/


先月  2023年 12月  来月





1 2
3 4 5 6 7 8 9
10 11 12 13 14 1516
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31






文字サイズ変更:
トップページ > Perlについて

●Perlについて●

2023-12-15 13:12:25

「SOLID」の原則とは



SOLID(ソリッド)は、ソフトウェア工学の用語の中でも、オブジェクト指向で用いられる五つの原則の頭字語です。
これは、ソフトウェアエンジニアのRobert C. Martinが提唱したものの中から選ばれたものです。
五原則をSOLIDという語呂合わせの頭字語にして普及させたのは、ソフトウェア技術者ミカエル・フェザーズであり、2004年以降に広く知られるようになりました。

ソフトウェア設計をより平易かつ柔軟にして保守しやすくすることを目的にしています。

・単一責任の原則 (single-responsibility principle)
・開放閉鎖の原則(open/closed principle)
・リスコフの置換原則(Liskov substitution principle)
・インターフェース分離の原則 (interface segregation principle)
・依存性逆転の原則(dependency inversion principle)


◆単一責任の原則 (single-responsibility principle)



変更するための理由が、一つのクラスに対して一つ以上あってはならない

これは、クラスは一つだけの責務を持つべきです、とも言い換えられます。
クラスに複数の責任を持たせると、バグを発生させる確率が高くなります。
理由は、責任を一つでも増やすと、知らないうちに他の責任に影響を与える可能性が出るからです。


◆開放閉鎖の原則(open/closed principle)



ソフトウェアの実体(クラス、モジュール、関数など)は、拡張に対して開かれているべきであり、修正に対して閉じていなければならない

クラスの現在の動作を変更すると、そのクラスを使用するすべての処理に影響を与えます。
クラスでより多くの関数を実行したい時、理想的な方法は、既存の関数に追加することであり、変更しないことです。

この原則は、クラスの既存の動作を変更することなく、クラスの動作を拡張することを目的としています。これは、そのクラスが使用されている場所でバグが発生するのを極力減らす為です。


◆リスコフの置換原則(Liskov Substitution)



ある基底クラスへのポインタないし参照を扱っている関数群は、その派生クラスのオブジェクトの詳細を知らなくても扱えるようにしなければならない

子クラスが親クラスと同じ動作を実行できない場合、バグになる可能性があります。
子クラスは、親クラスができることをすべてできる必要があります。
このプロセスを継承と呼びます。

このイラストでは、親クラスがコーヒーを提供しています(コーヒーの種類は問いません)。子クラスがカプチーノを提供することは、カプチーノがコーヒーの一種なので許容されますが、水を提供することは許容されません。

子クラスがこれらの要件を満たさない場合、子クラスが大きく変更され、この原則に違反することになったということです。

この原則は、親クラスやその子クラスがエラーなしで同じ方法で使用できるように、一貫性を保つことを目的としています。


◆インターフェース分離の原則 (interface segregation principle)



汎用なインターフェースが一つあるよりも、各クライアントに特化したインターフェースがたくさんあった方がよい

クラスに使用しない動作を実行させようとするのは、無駄が多く、クラスにその動作を実行する機能がない場合、予期しないバグが発生する可能性があります。

クラスは、その役割を果たすために必要な動作のみを実行する必要があります。それ以外の動作は完全に削除するか、将来的に他のクラスで使用する可能性がある場合は別の場所に移動すべきです。

この原則は、動作のセットをより小さく分割して、クラスが必要なもののみを実行することを目的としています。


◆依存性逆転の原則(dependency inversion principle)



上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも具象ではなく、抽象(インターフェースなど)に依存するべきである

まず、ここで使用されている用語をより簡単に定義します。

上位モジュール(またはクラス):ツールを使って動作を実行するクラス
下位モジュール(またはクラス):動作を実行するために必要なツール
抽象化:2つのクラスをつなぐインターフェイス
詳細:ツールの動作方法

この原則では、クラスは動作を実行するために使用するツールと融合すべきではありません。むしろ、ツールがクラスに接続できるようにするインターフェイスと融合すべきです。具体的な値や狭義の処理を持たせるのを避けましょう。

また、クラスもインターフェイスも、ツールの動作方法を知るべきではありません。ただし、ツールはインターフェイスの仕様を満たす必要があります。抽象的な処理の仕方をすることにより、後の変更をなるべく避けることができます。

この原則は、インターフェイスを導入することにより、上位レベルのクラスが下位レベルのクラスに依存するのを減らすことを目的としています。

出典「The S.O.L.I.D Principles in Pictures

出典「ウィキペディア - SOLID

出典「Qiita - イラストで理解するSOLID原則
Print Twitter(test) short URL いいね:16

back to the TOP


PR (i)