派生クラスについて知っている基本クラスでメソッドを作成することは、オブジェクト指向プログラミングの良い方法ですか?
たとえば、クラス B が A から継承し、クラス C と D が B から継承するクラス A、B、C、D を考えます。ここで、A から継承するすべてのクラス (A 自体を含む) に共通のメソッドを考えます。動作するためにクラス B について知っておく必要があります (例: オブジェクト B からクラス A/B/C/ または D のオブジェクトの相対距離)。このメソッドはすべてのクラス (A、B、C、D) に共通であるため、クラス A 内に配置する必要があるのは当然のことのように思えます。ただし、この場合、派生を「認識する」基本クラスにメソッドがあります。クラス。
例:
Class A {
# simple coordinate system
distance_to_complex_coordinate_system (B complexCoord) {
return complexCoord.distance_to_simple_coord_system(self)
}
}
Class B extends A {
# complex coordinate system
distance_to_simple_coordinate_system (simpleCoord) {
# do calculations
}
}
Class C extends A {}
Class D extends A {}
...
上記の例distance_to_complex_coordinate_system
は、すべての単純な座標系 (つまり、A、B、C、および D) が持つべきメソッドであり、実装はそれらすべてでまったく同じです。これは抽象クラスではないため、オーバーライドしないでください。
これは OO の観点から理にかなっていますか?もしそうなら、それは本当に良いプログラミングの実践ですか? そうでない場合は、これを回避する方法についての提案をいただければ幸いです。
私の観点では、それは良い習慣ではありませんが、コードを不必要に複製せずに回避する良い方法を見つけることができません. ところで、おそらく重要ではありませんが、私は Perl を使用しています。