RSS

 

RSS


オブジェクト指向テーマで記事書いているが、内容はランダムアクセス的。

オブジェクト指向はなにかの例え話から入る場合があるがここでは、ある意味逆に(?)、Cとの対比で。

Cでのプログラミングから見ていって「クラス」とはどんなもんかということを。

XY上斜めに移動する物をプログラムで書くと例えば、


void move()  // ループに1回呼ばれる
{
     g_x++;    // xとyに1個ずつ増やす
     g_y++;
}

/////

それと同じ動きをする物体が10個あるとして、動きの関数を共有して書くとるすと

struct ObjInfo  // 物体の情報
{
   int x;
   int y;
};

ObjInfo g_objinfo[10];  // 初期値が設定されているとして毎回の動きは


void move(ObjInfo *objp)
{
   objp->x++;
   objp->y++;
}

void moveall()
{
    for(i=0;i<10;i++){
        move(&g_obj[i]);    
    }
}

/////
それをクラスを使って書くと

class Obj
{
   int m_x;
   int m_y;


   public move()
  {
      m_x++; 
      m_y++; 
    }
 };

class ObjAll
{
   Obj m_obj[];

   void moveall()
   {
       for(int i=0;i<10;i++){
          m_obj[i].move();    ④
       }
   }
};

/////

ということでクラスで書いた利点の一端をあげると

■表記がスッキリ
 ②で書いた矢印つきの③でスッキリ書けている。

■知らなくていい情報は知らない形
 ④のところで各オブジェクトに動いてねというお願いをしている。
 ObjAllにはObjの中身(x,yの値、さらにはどんな情報があるかまで)知れない形になっている。
 もしも、なにか、越権行為を犯そうとすると、そのことは、コンパイル時にチェックチェックできる。
 この点①番のCだとObjAllがObjのことがまる見えでよくない。

■ObjAllも軽くふやせる
 もしも、Objが10個あるObjAll自体を複数個増やしたいときに
 Objを10個にしたのと同様にObjAllも軽く増やせる。

とか。


  • コメント (0)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/55389