第4章: C#のクラスとオブジェクト指向

C#はオブジェクト指向プログラミング(OOP)の強力な機能を提供する言語で、効率的で再利用性の高いコードを書くために不可欠な知識です。この章では、クラスとオブジェクト指向プログラミングの基礎について詳しく説明し、プログラムの構造化と効率化を実現する方法を学びます。


4.1 クラスとインスタンスの概念

まずは、C#での「クラス」と「インスタンス」の基本的な概念を理解しましょう。

  • クラスは、オブジェクトを生成するための設計図のようなものです。クラスには、データ(プロパティ)と動作(メソッド)が定義され、共通の特性を持つオブジェクトをまとめる役割を持ちます。
  • インスタンスは、クラスを基に生成された具体的なオブジェクトです。インスタンスはクラスの特性を引き継ぎ、必要に応じて複数のインスタンスを生成して管理することができます。

次の例を使って、クラスとインスタンスの概念を理解しましょう。

public class Car
{
public string Color;
public string Model;

public void Drive()
{
Console.WriteLine("The car is driving.");
}
}

// インスタンスの生成
Car myCar = new Car();
myCar.Color = "Red";
myCar.Model = "Sedan";
myCar.Drive();

ここで、Carクラスは車の特徴を定義した「設計図」です。このクラスからmyCarというインスタンスを生成し、ColorModelの値を設定してDriveメソッドを呼び出しています。

4.2 プロパティ

プロパティは、クラスが保持するデータ(フィールド)にアクセスするための特別なメソッドです。通常、直接データにアクセスするのではなく、プロパティを介してデータを操作します。これにより、データの整合性を保ちながら、アクセス方法を制御できます。

C#ではプロパティの宣言は次のように行います。

public class Car
{
public string Color { get; set; }
public string Model { get; set; }
}
  • getアクセサはプロパティの値を取得するためのメソッドで、setアクセサは値を設定するためのメソッドです。
  • プロパティを使うと、次のようにしてインスタンスにデータを設定できます。
Car myCar = new Car();
myCar.Color = "Red";
myCar.Model = "Sedan";
Console.WriteLine("Car Color: " + myCar.Color);
Console.WriteLine("Car Model: " + myCar.Model);

プロパティはデータを直接アクセスする代わりに、クラス内でカプセル化して操作する方法を提供するため、コードの保守性が向上します。

4.3 メソッド

メソッドは、クラスのインスタンスが実行する動作や操作を定義します。メソッドはコードの再利用性を高め、各クラスに適切な機能を持たせるために使います。次に、CarクラスにDriveというメソッドを追加してみましょう。

public class Car
{
public string Color { get; set; }
public string Model { get; set; }

public void Drive()
{
Console.WriteLine(Model + " is driving.");
}
}

ここでDriveメソッドは、車が走行中であることを示すメッセージを表示します。このメソッドはインスタンスの動作を定義し、各インスタンスは自身のプロパティに応じて動作します。

Car myCar = new Car();
myCar.Color = "Blue";
myCar.Model = "SUV";
myCar.Drive();

4.4 コンストラクタ

コンストラクタは、クラスのインスタンスが生成されるときに自動的に呼び出される特別なメソッドです。コンストラクタを使うと、インスタンス生成時に初期設定を行うことができます。

public class Car
{
public string Color { get; set; }
public string Model { get; set; }

// コンストラクタ
public Car(string color, string model)
{
Color = color;
Model = model;
}

public void Drive()
{
Console.WriteLine(Model + " is driving.");
}
}

Carクラスのコンストラクタには、colormodelの初期値を設定する引数を持たせています。これにより、インスタンス生成時にプロパティの値を指定することができます。

Car myCar = new Car("Green", "Convertible");
myCar.Drive();

4.5 カプセル化

カプセル化は、クラスの内部のデータや動作を外部から隠蔽するためのオブジェクト指向の概念です。C#では、データをprivateアクセス修飾子で保護し、publicなプロパティやメソッドで操作できるようにすることで、カプセル化を実現します。

次の例では、CarクラスのColorプロパティをprivateにし、GetColorメソッドを使ってアクセスできるようにしています。

public class Car
{
private string color;
public string Model { get; set; }

public Car(string color, string model)
{
this.color = color;
Model = model;
}

public string GetColor()
{
return color;
}
}

カプセル化により、インスタンスの内部データが予期せぬ変更から保護され、プログラムの安定性が向上します。

4.6 継承

継承は、既存のクラスを基にして新しいクラスを作成する仕組みです。これにより、コードの再利用が容易になり、特定の機能を追加した派生クラスを効率的に作成できます。

public class Vehicle
{
public int Speed { get; set; }

public void Accelerate()
{
Speed += 10;
Console.WriteLine("Speed is now " + Speed);
}
}

public class Car : Vehicle
{
public string Model { get; set; }
}

Vehicleクラスを基にしてCarクラスが作成されました。CarクラスはVehicleのプロパティとメソッドを継承しており、新たに定義しなくても使うことができます。

Car myCar = new Car();
myCar.Model = "SUV";
myCar.Accelerate();

4.7 ポリモーフィズム

ポリモーフィズムは、同じメソッドを異なるクラスで異なる形で実装することができるオブジェクト指向の概念です。メソッドをオーバーライドして、派生クラスで独自の動作を定義することが可能です。

public class Vehicle
{
public virtual void Drive()
{
Console.WriteLine("The vehicle is driving.");
}
}

public class Car : Vehicle
{
public override void Drive()
{
Console.WriteLine("The car is driving.");
}
}

public class Truck : Vehicle
{
public override void Drive()
{
Console.WriteLine("The truck is driving.");
}
}

ポリモーフィズムにより、Vehicle型としてCarTruckクラスのオブジェクトを扱うことができ、それぞれのクラスに応じたDriveメソッドが実行されます。

Vehicle myCar = new Car();
Vehicle myTruck = new Truck();
myCar.Drive();
myTruck.Drive();

まとめ

この章では、クラスとオブジェクト指向の基本概念を学び、クラス設計のコツとオブジェクト指向の特性を理解しました。オブジェクト指向を活用することで、保守性の高いプログラムが作れるようになります。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

p-school

Recent Posts

第6章: PHPのデータベース操作

PHPを使用してデータベースに…

2週間 ago

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング…

2週間 ago

第4章: PHPの関数

プログラミングにおいて、関数は…

2週間 ago

第3章: PHPの配列とコレクション

PHPでの配列とコレクションの…

2週間 ago

第2章: PHPの基本文法

PHPの基本的な構文や使い方を…

2週間 ago