第9回 C#入門 C#プログラミングでクラスとオブジェクト指向を理解しましょう!
今回はクラスとオブジェクト指向の基礎について説明させていただきます。ここはC#において大変重要な章です。少し長い講座になりますが、プログラミングで詰まる最初の難関ですので二回見ることをお勧めします。もうすでにみなさんはご存知かもしれませんが、C#はオブジェクト思考という考え方に基づいて設計されたプログラミング言語です。オブジェクト思考について勉強した人の中には、次のような説明を聞いたことがある人がいるかもしれません。オブジェクト指向とは、「オブジェクト(物)を中心とする考え方」のことです。これを聞いいて、感の言い方はすぐに把握できるかもしれませんが、お恥かしながら、私は全く理解できませんでした。
私と同じように思った方も中にはいるかもしれませんが
安心してください、これから順を追って説明させていただきます。
まず、オブジェクトととは、何かと言いますと
簡単に言いますと、変数を扱うようにプログラムも扱うという意味です。どいうことかと言いますと、例えば、このように学校で学生番号、生年月日、名前を管理する。プログラムなどがあったします。このプログラムをそのまま変数化させどこでも使えるようにするのがオブジェクト指向です。
はい、ここで実際にプログラムを見ていきましょう。オブジェクト思考を考えるためにクラスを使って学校の生徒をを表現して見たいと思います。Class Schoolと言う名前のプロジェクトを新規作成し、そこにStudentクラスを定義します。
ここでは、「学籍番号(StudentNumber)」「生年月日(Birthday)」「名前(Name)」の3つの性質を持つクラスとします。
namespace ClassSchool
{
class Management
{
static void Main(string[]args)
{
}
}
class Student
{
public int StudentNumber { get ; set ; }
public int Birthday { get ; set ;}
public string Name{ get ; set ;}
}
}
このようにStudentクラスを利用したい場合は後半に定義しておきます。これで、学校の生徒の型をC#で表現したことになります。
クラス名はclassキーワードの後に書きます。今回ですと、ManagementとStudentがクラス名になります。
このクラス名は変数名や配列名と同じで自由に決めて大丈夫です。
ここで重要なのがクラスはオブジェクト指向プログラミングでの基本単位です、ですのでクラス名を書いた場合は中身を書かなくてはならないという意味です。はい、ここでプロパティの定義について説明したいと思います。みなさん気になっていると思いますが、このpublic int StudentNumber { get ; set }とはプロパティです。
プロパティというのはクラスが持つ(性質、特徴)というイメージです。
このクラスのプロパティを詳しく説明しますと先頭のpublicはアクセス修飾語(しゅうしょくご)と呼ばれるものでこれは「StudentNumberと言う性質を外に公開します」と言う意味になります。私の経験上プロパティにはpublicをつけるものだと思ってもらって構いません。しかし場合によっては、非公開にしたい場合もあります。その時はprivateと記載します。
private
注意点として、アクセス修飾子を省略した場合はこのprivateが指定されたものとして見なされます。
次にこのintですが、もう皆さんご存知ですよね。そうですこのプロパティの型を表しています。つまりこのプロパティは整数の型ですよという意味ですね。
そして次にこのStudentNumberがプロパティの名前です。
そして最後のこの{ get ; set ; }というのは、StudentNumberがプロパティでありますよと宣言しています。
get ;と set ;の意味は、変数のように値を取り出せる(get)、値を代入できる(set)という意味です。
もし、学校の生徒に新しい項目が必要になったとしても、Studentクラスのプロパティとして追加すればよいわけです。例えば、「性別」という項目を扱いたくなったら、Studentクラスの中に、次のようにgender プロパティに追加すればよいのです。
このように
public string Gender { get ; set ; }
ただ、実はクラスだけを書いただけでは、このプログラムは使用することはできません。どういうことかと言いますと。このクラスはまだ設計図の段階というイメージです。難しいですがクラスを使用するにはこの設計図を実態化させる必要があります。
どのようにするかと言いますと。配列の宣言と同じくインスタンスを宣言する必要があります。このように宣言します。
var student = new Student( );
Var 変数名 = new クラス名( ); あるいは
クラス名 変数名 = new クラス名( );
これで、Studentオブジェクトは実態化できましたが、まだ、このStudentオブジェクトの性質には何も値が代入されていません。それでは値を代入して見ます。
値を代入する時はこのように記載します。
class Management
{
static void Main()
{
var student = new Student();
student.StudentNumber = 10;
student.Birthday = 1010;
student.Name = ”watson”;
student.Gender=“boy”
}
class Student
{
public int StudentNumber { get ; set ; }
public int Birthday { get ; set ; }
public string Name{ get ; set; }
public string Gender { get ; set ; }
}
私のイメージですが、
このStudentクラスをそのままstudent という変数にいれて、そのクラスの性質に何か値を入れたい場合は変数名の後にドットをつけ続けてプロパティ名を記載し値を代入します。
●●● 変数名.プロパティ名
このようになります。
わかりやすく言いますと。このドットを日本語の「の」と置き換えるとイメージしやすいかもしれません。では実際本当に値が入っているか確認するため、プロパティに値をいれ、それを画面に出力したいと思います。
class Management
{
static void Main()
{
var student = new Student();
student.StudentNumber = 10;
student.Birthday = 1010;
student.Name = ”watson”;
student.Gender=“boy”
var a = student.StudentNumber
var b = student.Birthday
var c = student.Name
var d = student.Gender
Console.WriteLine($”StudentNumber : { a }”);
Console.WriteLine($”Birthday : { b }”);
Console.WriteLine($”Name : { c }”);
Console.WriteLine($”Gender : { d }”);
}
}
class Student
{
public int StudentNumber { get ; set ; }
public int Birthday { get ; set ;}
public string Name{ get ; set ;}
public string Gender { get ; set ;}
}
これで実行して見たいと思います。
このような結果が表示されました。上記ではあえてこのように書きましたが、そのままライトラインで表示することができます。
Console.WriteLine($”StudentNumber : { student.StudentNumber }”);
Console.WriteLine($”Birthday : { student.Birthday }”);
Console.WriteLine($”Name : { student.Name }”);
これでも同じ結果ができます。
クラスの面白いところは先ほども言いましたが、クラスは設計図のようなものです。この設計図から作られた製品がオブジェクトというイメージです。
はい、今回はクラスとオブジェクト指向についてということでオブジェクト思考の概念から、実際にクラスを用いてオブジェクトを扱って見ました。また、補足としてプロパティについても説明致しました。
次回の講座ではクラスの名前空間についての内容となっています。ですので是非ご覧ください。以上で、C#入門を終了と致します。ご静聴ありがとうございました。(๑╹ω╹๑ )
コメント