前回は、C#の基礎である型や演算子と、if文による分岐処理を学びました。今回は、C#のプログラムの基本である「クラス」や「オブジェクト」を紹介します。

 C#は、オブジェクト指向プログラミング言語の一つです。オブジェクト指向プログラミングをざっくりいえば、プログラムを部品化し、その部品を組み合わせたり、再利用したりして、巨大なプログラムを完成させていく手法です。

 C#では、関連するデータと処理内容をクラスというパーツ(部品)にまとめて記述します。クラスは、ある種の設計図やテンプレートのようなもので、クラスに記述された内容を、コンピュータが実行できるようにメモリー上に配置しなければなりません。

 クラスをベースにして、コンピュータが実行できるようにメモリー上に展開したものが「オブジェクト」です。また、メモリー上に展開することを「インスタンス(instance)化」といいます。

 このように説明すると、わざわざクラスを記述してインスタンス化しなければならないのは、面倒に感じるかもしれません。ですが、データと処理内容をクラスにまとめることで、再利用性や保守性が高まるというメリットがあります。

 例えば、1つのクラスから生成した複数のオブジェクトは、同じようなデータ構造と同じような処理内容を実現できます。このように、1つのクラスから複数のオブジェクトを生成しても、それぞれのオブジェクトは異なるメモリー領域に配置されているため、互いに影響しません。この性質を利用すれば、同じ処理内容でもデータだけが異なるといった処理を、楽に実現できるのです(図1)。また、クラスという単位に部品化できれば、保守範囲を担当クラスだけといったように限定できます。

図1●クラスとオブジェクトのイメージ
図1●クラスとオブジェクトのイメージ
[画像のクリックで拡大表示]

 このようなプログラムの部品化が必要になったわけは、ソフトウエアの巨大化が挙げられます。コンピュータの黎明期のプログラムは、コンピュータに対する命令(処理)がいちから順々に記述されたものでした。ところが、ソフトウエアが巨大化して大規模なソフトウエアが必要になると、複雑なプログラムをいかにわかりやすく、いかにバグを含めないようにするのかが問題になりました。

 このソフトウエアの巨大化に対応するため、1970年代にはプログラム全体をいくつかの小部分に分割して、「順次(逐次)」「反復」「分岐」の3つの構造で論理的に組み合わせていく「構造化プログラミング」というプログラミング手法が登場しました。

 現在は、その構造化プログラミングをさらに発展させた、「オブジェクト指向プログラミング」が主流となっています。