オープン/クローズド原則による
。。。ソフトウェアエンティティ(クラス、モジュール、関数など)は、拡張のために開いている必要がありますが、変更のために閉じている必要があります
では、このカテゴリーはこの原則に対する強い違反であると言えますか?
オープン/クローズド原則による
。。。ソフトウェアエンティティ(クラス、モジュール、関数など)は、拡張のために開いている必要がありますが、変更のために閉じている必要があります
では、このカテゴリーはこの原則に対する強い違反であると言えますか?
「変更のためにクローズ」の標準的な解釈は、「新しい機能を追加するために既存のコードを変更する必要がない」ことを意味すると思います。その解釈を使用すると、新しいカテゴリメソッドを作成しても既存のコードを変更することにはならないため、カテゴリはオープン/クローズド原則に違反しません。
カテゴリメソッドがクラスの既存のメソッドを置き換えることができる特殊なケースについては、オープン/クローズの原則に違反しない可能性がありますが、危険であるために眉をひそめています。これは、言語の「これを行うことは可能ですが、実行しない」機能の1つです。
方法がわかりません。カテゴリを使用すると、既存のインターフェイスに依存する機能を追加できます。これらは、元のクラスに実際の変更を加えることを許可しません。新しいメソッドがクラスに追加されたように見せかける構文糖衣を提供するだけです。
つまり、カテゴリはクラスを拡張するのに役立ちます。彼らはそれを変更しません。彼らは開放/閉鎖原則を強化しているようです。