0

2 つのメソッドを持つクラスを作成したいのですが、それ以外の目的はありません。そのため、メソッドを継承する 2 つのサブクラスを作成できます。このクラスは単独では機能しません。これは悪いプログラミング設計または習慣ですか?

4

3 に答える 3

2

他のクラスから派生させる以外に何もしないクラスもあります。スーパークラス自体が有用なインスタンスを持つことができるかどうかは関係ありません。他のクラスから派生するためだけに存在するクラスは、抽象クラスと呼ばれることがよくあります。C ++などの一部の言語には、抽象クラスからオブジェクトを作成しようとしたときにコンパイラーがエラーを出すことができる構文機能もあります。したがって、このようなクラスがあることはそれほど悪いことではありません。

それを超えて、「悪い習慣」とは何ですか?セットアップによってコードが理解しやすくなる場合、それは悪いことではありません。

もちろん、導出しようとしている2つのクラスに共通点がなく、これら2つのメソッドが単に「ねえ、そのクラスの10行のコードが他のクラスの10行と同じであることに気づいた」場合、次にこれを一般的なスーパークラスにすることは、助け以上のものを混乱させる可能性があります。クラスはまだ何らかの形の関係を持っている必要があります。ランダムにあちこちに現れるコードを共有するだけの場合は、スタンドアロン関数の方が適している可能性があります。

基本的に、クラスの名前を見てください。あなたの新しいスーパークラスが「それが何であるかわからないので、いくつかの非常に一般的な名前」に沿った名前が付けられている場合、それはおそらく「良いデザイン」ではありません。一方、スーパークラスに適切な名前があり、派生クラスの名前がスーパークラスと「一種の」関係にある場合は、おそらく悪いことではありません。

何かが「良い」ことを示すもう1つの強力なヒントは、スーパークラスへのポインターを使い始めたときです。これは、どちらのサブクラスを扱っているかを気にしないためです。

于 2012-07-22T09:53:50.450 に答える
0

それは良い習慣であり、機能のより良い組織化につながります。もう 1 つの理由は、継承ツリーを見るだけで、それが 2 つの関数クラスに関連していることがわかるからです。あまり害はありません。

于 2012-07-22T09:41:46.673 に答える
0
  1. 一般的に、固有の善悪はありません。それは状況の詳細に大きく依存します。しかし、一般的には、常にオブジェクト指向の原則に従うように努めるべきです。たとえば、クラスを作成するときはいつでも、抽象クラスか具象クラスかを問わず、クラスにはdatabehaviorの両方が必要です。このルールは非常に重要で、オブジェクト指向の基礎そのものにまで及びます。データのないクラスは、単なるメソッドの集まりです (これは手続き型プログラミングであり、オブジェクト指向ではありません)。動作のないクラスは、一連の変数です (これも手続き型であり、オブジェクト指向ではありません)。したがって、データと動作の両方を一緒に持つことが重要です。ただし、それらはランダムにまとめられるのではなく、互いに論理的な関係を持つ必要があります。たとえば、メソッドは何らかの方法でデータにアクセスする必要があります。

もちろん、この規則からの逸脱があります。たとえば、静的クラス (Java の Math クラスなど) に一連のメソッドしかない場合や、インターフェイスに一連の定数しかない場合があります。しかし、それらはルールではなく例外です。それらは、便宜上、必要に応じて存在します。それらは、厳密なオブジェクト指向の意味での真のクラスではありません。

したがって、常に正しい原則を目指し、それを達成する方法が他にない場合にのみ、原則としてではなく例外としてのみ逸脱してください。

  1. 前のポイントは、クラスを構築する方法について言及していました。クラス間の関係を設計するには、やはり論理パスに従う必要があります。扱っているそれぞれの概念を熟考し、それぞれがクラスとして意味があるかどうかを確認してから、これらのクラス間の関係を確認してください。継承で整理できる 3 つの概念があるように見える場合は、親から派生する 2 つのクラスです。親クラスに 2 つのメソッドがある場合は、問題ありません。方法は一つでもOKです。一貫した論理ユニットを表している限り。
于 2012-07-24T02:15:50.793 に答える