オブジェクト指向プログラミング(OOP)継承について考える

継承

継承機能の理由

まずは結論から述べると継承はプログラミングの合理化、プログラマーの手間を小さくするためです。
具体的には同じコードを何度も書く手間を省くこと、それから整理整頓です。

当然手続き型でも工夫すれば綺麗に無駄なくコードを書くことができると思いますが、言語の機能としてそれを提供しています。

漠然とした継承のイメージ

まずは漠然としたイメージを掴みます。
継承というのはある集合です。
例えば犬や猫、牛や馬といった動物。トラックやバス、乗用車などの車。
そしてそれらには共通の特徴があります。
動物なら鳴く、歩く、走る、寝るなど。
車なら走る、止まる、鍵を閉めるなど。

これらの特徴を新しく作ったオブジェクトにくっつけることです。

具体的な継承

ここではC#を例に説明します。
オブジェクト指向プログラミングは現実を例に説明されることがあります。
実はそれが混乱の元ではないかとも私は感じています。
プログラミングをしたことがない初心者はそれで意味が掴みやすいと思いますが、他の言語をある程度知っているなら具体的な方法を説明するだけで納得できてしまうはずです。

使用頻度の高い機能をひとまとめにしておいて、新しく作るクラスに取り付けることです。
新しくクラスを作るととにいちいち変数やメソッドを設定しなくて済むような機能です。

class 派生クラス : 基底クラス
{
   派生クラスの定義
}

基底クラスとは継承するクラスが使用する変数やメソッドなどの機能を整理整頓したクラス、つまり親のクラスです。
派生クラスとは親となる基底クラスからひとまとまりの機能を引き継ぐクラスです。

具体例で動物クラスを継承する猫クラスを作ってみます。

class Animal //基底クラス
{
   //必要な機能
   public string name;
   public int   size ;  
  public Walk()
   {
     //歩く
   }
   public Sleep()
   {
     //眠る
   }
}

class Animal//基底クラス : Cat //派生クラス
{
    //継承した機能は書かなくいい
  public Atack()
    {
       //攻撃
    }
}

通常の動物は優しくて基本的に無害ですが、一人だけ狂暴で攻撃性の高い動物を作りたいとします。
その場合普通の動物に共通する歩く、寝るといったコードはAnimalクラスに記述しまう。
そしてクラスに個別に必要な攻撃コードだけCatクラスに記述します。

class Class
{
  public static void Main()
    {
       Cat cat = new Cat();
       Cat.Atack();
       Cat.Walk();
       Cat.Sleep();
    }
}

Catクラスに記述していないメソッドをAnimalクラスから継承しているので使用することができます。

シールクラス(sealed class)

英語だとシールド。シールよりシールドの方がピンとくる方も多いと思います。
つまり守られています。

sealed class クラス名 …

このように定義し、他のクラスがこのラベルのついたクラスを継承するのを禁止します。

プログラミングおすすめ書籍

おすすめ書籍

なぜプログラムが動くのか。
平易な言葉で学べますが、初心者には難しいかもしれません。
でも読み終わった頃にはなんとなく理解しているでしょう。
初心者には家にあって損はありません。

UNIXの思想を学べます。
高尚なタイトルですが、コードはおろか難しい言葉も殆どありません。取っ掛かりに最適でその後のプログラミングに対する理解を一変させます。
なぜならこの思想はプログラミングそのものだからです。
一読の価値ありで、これは良書なので今後紹介したいと思っています。

まだまだありますがまたの機会に紹介したいと思います。

コンピューター プログラミング 勉強
スポンサーリンク
himazinをフォローする
私の頭の上の消しゴム

コメント

タイトルとURLをコピーしました