C++ は継承とクラスに大きく依存しているため、サンプル言語として C++ を使用します。これは、Windows などの単純な OS 用のコントロールを作成する方法に関する簡単なガイドです。コントロールには、ボタン、スライダー、テキスト ボックスなど、ウィンドウ上の単純なオブジェクトが含まれます。
基本クラスの構築。
ガイドのこの部分は、(ほぼ) すべてのクラスに適用されます。十分に計画されていても、半分は完了していることを忘れないでください。私たちはどのようなクラスに取り組んでいますか?その属性と必要なメソッドはどれですか? これらは、私たちが考える必要がある主な質問です。
ここでは OS コントロールに取り組んでいるので、単純なクラスから始めましょうButton
。では、ボタンの属性は何でしょうか? 明らかにそれposition
は窓に必要です。また、すべてのボタンを正確に同じサイズにしたくないのでsize
、他の属性も同様です。ボタンも「必要」label
です(ボタンに描かれたテキスト)。これが各クラスで行うことであり、設計してからコーディングします。必要な属性がわかったので、クラスを作成します。
class Button
{
private:
Point m_position;
Size m_size;
std::string m_label;
}
コードを短くするために、すべてのゲッター、セッター、およびその他のメソッドを省略していることに注意してください。ただし、それらも含める必要があります。Point
また、クラスがあることも期待していSize
ますが、通常は自分で構造化する必要があります。
次のクラスに移動します。
1 つのクラス ( Button
) が終了したので、次のクラスに移ることができます。Slider
たとえば、ウェブページを上下にスクロールするのに役立つバーです。
ボタンの場合と同じように始めましょう。スライダー クラスには何が必要ですか? position
ウィンドウとsize
スライダーの位置 ( ) があります。また、最小値と最大値があります (最小値はスクローラーがスライダーの上部に設定されていることを意味し、最大値はスライダーが下部にあることを意味します)。現在の値、つまりスクローラーが現在どこにあるかも必要です。今はこれで十分です。クラスを構築できます。
class Slider
{
private:
Point m_position;
Size m_size;
int m_minValue;
int m_maxValue;
int m_currentValue;
}
基底クラスの作成。
2 つのクラスを取得したので、最初に気付くのは、両方のクラスでPoint m_position;
およびSize m_size;
属性を定義したことです。これは、共通の要素を持つ 2 つのクラスがあり、同じコードを 2 回記述しただけであることを意味します。コードを 1 回だけ記述して、両方のクラスに、書き直す代わりにそのコードを使用するように指示できたら素晴らしいと思いませんか? まあ、できます。
共通の属性を持つ 2 つの類似したクラス (この場合はButton
とSlider
. size
これらは両方とも、とを備えた OS のコントロールposition
です。これから、 と呼ばれる新しいクラスを取得しますControl
。
class Control
{
private:
Point m_position;
Size m_size;
}
共通の基本クラスから同様のクラスを継承します。
Control
すべてのコントロールに共通の項目を含むクラスを取得したので、それを継承するようにButton
andを指定できます。Slider
これにより、時間、コンピューターのメモリ、そして最終的には時間を節約できます。新しいクラスは次のとおりです。
class Control
{
private:
Point m_position;
Size m_size;
}
class Button : public Control
{
private:
std::string m_label
}
class Slider : public Control
{
private:
int m_minValue;
int m_maxValue;
int m_currentValue;
}
2 回書いてクラスを作成するPoint m_position; Size m_size;
よりも、2 回書く方がはるかに簡単だと言う人もいるかもしれません。これが当てはまる場合もありますが、特にクラスを作成する場合は、同じコードを 2 回記述しないことをお勧めします。: public Control
Control
さらに、最終的にいくつの共通属性が見つかるかは誰にもわかりません。後で、コントロールが保持されているウィンドウ (またはパネルなど) を指すクラスControl* m_parent
のメンバーが必要であることに気付くかもしれません。Control
もう1つのことは、後で の上に がSlider
必要Button
であることに気付いた場合、すべてのクラスでサイズ、位置、および親の代わりに、テキストボックス固有のメンバー変数のみを記述して記述するだけでTextBox
、テキストボックスコントロールを作成できることです。 class TextBox : public Control { ... }
.
最終的な考え。
基本的に、共通の属性またはメソッドを持つ 2 つのクラスがある場合は常に、基本クラスを作成する必要があります。これが基本ルールですが、例外もあるかもしれませんので、自分の頭脳を使っても構いません。
私自身もプロのコーダーではありませんが、学んでおり、教育者が私に教えてくれたように、すべてをあなたに教えてきました. あなた(または少なくとも誰か)がこの回答が役立つことを願っています。また、Python やその他のダック タイピング言語は継承を使用する必要さえないと言う人もいますが、それらは間違っています。継承を使用すると、大規模なプロジェクトで時間とお金を大幅に節約でき、最終的には基本クラスを作成してくれたことを感謝することになります。プロジェクトの再利用性と管理が何十億倍も簡単になります。