私の同僚は、基本クラスとインターフェイスのどちらを作成するかを選択するための経験則を考え出しました。
彼は言う:
実装しようとしているすべての新しいメソッドを想像してみてください。それらのそれぞれについて、このことを考慮してください。この方法は、内の複数のクラスによって実装されます正確にせずに、このフォームの任意の変化?答えが「はい」の場合は、基本クラスを作成します。他のすべての状況では、インターフェースを作成します。
例えば:
クラスを検討
cat
してdog
クラスを拡張し、mammal
単一の方法を持っているがpet()
。次に、alligator
何も拡張せず、1つのメソッドを持つクラスを追加しslither()
ます。次に、
eat()
それらすべてにメソッドを追加します。実装した場合
eat()
の方法は、のためにまったく同じになりcat
、dog
そしてalligator
、私たちは、基本クラス(LETだと言う、作成する必要がありanimal
、このメソッドを実装します)。ただし、実装が
alligator
少しでも異なる場合は、IEat
インターフェースを作成して作成mammal
およびalligator
実装する必要があります。
彼はこの方法がすべてのケースをカバーすると主張しますが、私には過度に単純化しているようです。
この経験則に従う価値はありますか?
is a
あり、インターフェースはacts like
またはであると教えましたis
。だから犬のis a
哺乳類とacts like
食べる人。これは、哺乳類がクラスであり、食べる人がインターフェースであるべきであることを私たちに伝えます。それは常に非常に役立つガイドでした。追記:例is
だろうThe cake is eatable
かThe book is writable
。
alligator
さんの実装eat
、それは受け入れることで、もちろん異なり、cat
およびdog
パラメータとして。