前回まで、変数・制御構文・メソッドと、プログラミングの基礎をやってきました。

今回からは、プログラミング第三の山場、オブジェクト指向に入ります。その入り口、クラスです。

ここは多くの人がつまずくところですが、あせらず、ひとつずつ進めば大丈夫です。

クラスとは、関係するデータと処理を、ひとつにまとめた「設計図」です。

バラバラのデータを、まとめたい

たとえば、「人」の情報をプログラムで扱うとします。名前、年齢、身長。今までの知識だと、こう書きます。

string name = "山田";
int age = 20;
double height = 170.5;

3つの変数で、ひとりの人を表しています。でも、2人目、3人目が出てくると、どうでしょう。

string name2 = "田中";
int age2 = 25;
double height2 = 165.0;

name2age2… と、変数がどんどん増えて、ごちゃごちゃになります。「どの変数が、誰のものか」が分からなくなってきます。

名前・年齢・身長は、ひとりの人のものとして、まとめて扱いたい」。そう思いますよね。それを実現するのが、クラスです。

クラスは「設計図」

クラスは、よく「設計図(せっけいず)」にたとえられます。

たとえば「人」という設計図を作ります。「人には、名前があって、年齢があって、身長がある」と、どんなデータを持つかを決めた設計図です。

この設計図さえあれば、そこから「山田さん」「田中さん」と、具体的な人を何人でも作れます。たい焼きの型(設計図)から、たい焼きを何個でも焼けるように。

設計図そのものは、たい焼きではありません。あくまで「型」です。この区別が、後で大事になります。

書き方を見てみる

「人」を表すクラスを作ってみます。

class Person
{
    public string Name;
    public int Age;
    public double Height;
}

形を見てみましょう。

  • class Person … 「Person(人)」という名前のクラス(設計図)を作る
  • { } の中に、このクラスが持つデータを書く
  • public string Name; … 「Name(名前)という文字列のデータを持つ」

これで、「人は、名前・年齢・身長を持つ」という設計図ができました。

public は「外から使えますよ」という印です。今は、おまじないだと思って大丈夫です。)

設計図から、実物を作る

設計図だけでは、まだ「人」はいません。設計図から、実物を作ります

Person taro = new Person();

taro.Name = "山田";
taro.Age = 20;
taro.Height = 170.5;

Console.WriteLine(taro.Name);   // 山田
  • new Person() … Person の設計図から、実物をひとつ作る
  • taro … その実物につけた名前
  • taro.Name = "山田" … taro の名前に「山田」を設定(ドット . でつなぐ)

taro.Nametaro.Age のように、「だれの、なに」という形で、データがきれいにまとまりました。バラバラの name2age2 とは大違いです。

そして、設計図はひとつでも、実物は何人でも作れます。

Person hanako = new Person();
hanako.Name = "田中";
hanako.Age = 25;

同じ設計図から、taro と hanako、別々の人ができました。

なぜ、まとめると良いのか

クラスの良いところは、「関係するものが、ひとつにまとまる」ことです。

名前・年齢・身長は、バラバラの変数ではなく、「ひとりの人のデータ」として、ひとまとめになりました。

プログラムが大きくなるほど、これが効いてきます。「商品」「注文」「お客さん」…現実のものを、そのままクラスとして表現できる。現実の世界を、プログラムの中に持ち込める。それがオブジェクト指向の発想です。

つまずきポイント

ここでいちばん大事なのが、「設計図」と「実物」は違うということです。

class Person { ... }        // これは設計図(型)。まだ人はいない

Person taro = new Person(); // new して、初めて実物ができる

class Person を書いただけでは、まだ誰も存在しません。たい焼きの型を作っただけで、たい焼きはまだ焼けていない状態です。

new して初めて、実物が生まれます。この「設計図」と「実物」の区別が、次回以降の土台になります。今はっきりさせておきましょう。

まとめ

クラスは、関係するデータと処理をまとめた設計図。

class Person          // 設計図を作る
{
    public string Name;
    public int Age;
}

Person taro = new Person();  // 設計図から実物を作る
taro.Name = "山田";          // ドットでアクセス
  • バラバラのデータを、ひとつにまとめられる
  • クラスは「設計図」、new で作るのが「実物」
  • ひとつの設計図から、実物は何個でも作れる

次回は、クラスが持つデータ(フィールド)と、それを安全に扱う プロパティ の話です。