この章ではオブジェクト指向を学ぶための基礎編として、オブジェクト指向の概念やカプセル化について詳しく解説します。
クラスの概要や、コンストラクター、オーバーロード、Propertyの作成と利用方法を、サンプルプログラムを交えながら解説します。
「C#基礎講座」の第9章です。この講座の詳細については以下から確認できます。
全てのサンプルプログラムのダウンロードは0章でダウンロードできます。
オブジェクト指向とは
オブジェクト指向は、プログラミングのパラダイムの一つで、実際の世界をプログラムに置き換えることで、より直感的かつ柔軟なプログラミングをすることを目的としています。
オブジェクト指向には、継承、ポリモーフィズム、カプセル化といった基本的な概念があります。
オブジェクト指向には以下のようなメリットがあります。
- 再利用性が高い: オブジェクト指向では、同じような処理をするクラスを作成し、必要に応じてインスタンスを生成して使用することができます。これにより、同じ処理を繰り返し行うことがなくなり、プログラムの保守性が向上します。
- 拡張性が高い: オブジェクト指向では、新しいクラスを作成して既存のクラスに機能を追加することができます。これにより、プログラムの機能を拡張することが容易になります。
- カプセル化: オブジェクト指向において、クラスの外部からアクセスされないようにするための仕組みであるカプセル化があり、クラス内のデータや処理を隠蔽し、外部からのアクセスを制限することで、データの不正な書き換えや意図しない処理が実行されることを防ぐことができます。これにより、クラス内部の実装を隠蔽し、外部からの依存性を減らすことができます。
カプセル化について
カプセル化とは、オブジェクト指向において、クラスの外部からアクセスされることのないプライベートなデータやメソッドを定義することを指します。
クラス内にてpublicなプロパティやメソッドを定義することで、外部からアクセスできるようになります。
アクセス修飾子 | 説明 |
---|---|
public | クラス内外からアクセス可能 |
private | クラス内からのみアクセス可能 |
protected | 同一アセンブリ内からアクセス可能 |
internal | 同一アセンブリ内からアクセス可能 |
protected internal | 同一アセンブリ内からアクセス可能、または継承したクラスからアクセス可能 |
上記のようにアクセス修飾子を使用することで、プログラムのセキュリティを高めることができます。
クラスの作成
クラスは、オブジェクトを作成するための設計図となります。
クラスは、「class」キーワードを使用して定義します。クラスは、データ(フィールド)と処理(メソッド)を持ちます。
クラスの作成
以下はPersonというクラスを作成する場合の例です。
class Person
{
// フィールド(プライベートなデータ)
private string _name;
private int _age;
// プロパティ(外部からアクセスできるデータ)
public string Name { get { return _name; } set { _name = value; } }
public int Age { get { return _age; } set { _age = value; } }
// コンストラクタ(インスタンス作成時に呼び出されるメソッド)
public Person(string name, int age)
{
_name = name;
_age = age;
}
// メソッド(処理)
public void ShowProfile()
{
Console.WriteLine($"名前:{_name} 年齢:{_age}");
}
}
上記の例にはPersonというクラスを構成するためのプロパティや初期化時のコンストラクタを含んでいます。これらについて解説していきます。
クラスの利用方法
クラスを使用するには、インスタンスを作成します。インスタンスはクラスから作成され、クラスのデータや処理を持ちます。
インスタンスは、new演算子を使用して作成します。
クラス名 変数名 = new クラス名();
下記が先程例で作成したPersonクラスのインスタンス作成例です。
newでインスタンスを生成する際の引数は後述のコンストラクターで使用されます。
Person taro = new Person("Taro", 20);
作成したインスタンスからは、クラスのデータや処理にアクセスすることができます。
taro.Name = "Jiro";
Console.WriteLine(taro.Name); // Jiro
taro.ShowProfile(); // 名前:Jiro 年齢:20
コンストラクターについて
コンストラクターは、インスタンスが作成されるときに自動的に呼び出されるメソッドです。
コンストラクターによって、インスタンスが作成されるときに必要な初期化処理を行うことができます。
以下の例では、インスタンス生成時に引数に名前と年齢を指定して初期化できる作りになっています。
// コンストラクタ(インスタンス作成時に呼び出されるメソッド)
public Person(string name, int age)
{
_name = name;
_age = age;
}
オーバーロードについて
オーバーロードとは、同じ名前のメソッドを複数定義することを指します。引数が異なる同じ名前のメソッドを定義することで、同じ処理を行うが、入力が異なる場合に対応できるようになります。
下記は、オーバーロードの例です。
public void ShowProfile()
{
Console.WriteLine($"名前:{_name} 年齢:{_age}");
}
public void ShowProfile(string message)
{
Console.WriteLine(message);
Console.WriteLine($"名前:{_name} 年齢:{_age}");
}
上記のサンプルでは、引数にmessageを指定した場合と、引数を指定しなかった場合で違う処理を行わせています。
プロパティについて
プロパティは、クラス内にてpublicなデータを扱うための仕組みです。「get」「set」アクセサーを使用して定義します。
以下は、Propetyを定義している例です。
public string Name { get { return _name; } set { _name = value; } }
Propertyを使用することで、外部からアクセスできるデータを定義することができます。
taro.Name = "Jiro";
Console.WriteLine(taro.Name); // Jiro
解いてみよう!オブジェクト指向に関するクイズ
オブジェクト指向において、プライベートなデータを扱うための仕組みは何ですか?
- Property
- Field
- Method
解答
答え: 1. Property
解説: Propertyは、クラス内にてpublicなデータを扱うための仕組みではありません。プライベートなデータを扱うためには、FieldやPrivateメンバーを使用する必要があります。
インスタンスを作成するための設計図は何ですか?
- Property
- Field
- Class
解答
答え: 3. Class
解説: インスタンスを作成するための設計図はクラスです。クラスはオブジェクトを作成するための設計図となり、クラスからインスタンスを作成することで、クラスのデータや処理にアクセスすることができます。
クラスの外部からアクセスされないようにするための仕組みは何ですか?
- カプセル化
- 継承
- ポリモーフィズム
解答
答え: 1. カプセル化
解説: カプセル化は、クラスの外部からアクセスされないようにするための仕組みです。
クラス内のデータや処理を隠蔽し、外部からのアクセスを制限することでデータの不正な書き換えや、本来意図しない処理が実行されることを防ぐことができます。
その他の選択肢に関する解説:継承やポリモーフィズムは、クラスの外部からアクセスされるための仕組みではなく、オブジェクト指向において他の概念です。
継承はクラス間の関係を表すための概念で、子クラスが親クラスの機能を継承します。
ポリモーフィズムは、異なるクラスのインスタンスを同じように扱うための概念で、多様なクラスを同じインターフェイスで扱うことができます。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
この章のまとめ
「オブジェクト指向を学ぶ 基礎編」では以下の内容を学びました。
- オブジェクト指向は、実際の世界をプログラムに置き換えることでより直感的かつ柔軟なプログラミングをすることができる。
- カプセル化は、クラスの外部からアクセスされないようにするための仕組み。
- classは、「class」キーワードを使用して定義し、データ(フィールド)と処理(メソッド)を持つ。
- コンストラクターは、インスタンスが作成されるときに呼び出されるメソッドで、インスタンスのデータを初期化するために使用される。
- オーバーロードは、同じ名前のメソッドを複数定義することで、引数や戻り値などが異なる振る舞いをするメソッドを作成することができる。
- Propertyは、クラス内のプライベートなデータに対して、外部からアクセスできるようにするための機能で、getter/setterを使用してアクセスできる。
オブジェクト指向に対する考え方がわかりました。特に、カプセル化やコンストラクター、オーバーロードなどオブジェクト指向における基本的な概念について詳しく知れてよかったです。
オブジェクト指向は、プログラミングにおいて重要な概念の一つです。本記事を通して、基本的な概念や、C#でのオブジェクト指向の使い方を学ぶことができたと思います。
講座の最後のオブジェクト指向 応用編では、継承やポリもーフィズムといったオブジェクトの再利用がしやすくなる手法を解説します。
次のチャプター
次章では、「オブジェクト指向 基礎編」について学びます。
コメント