カプセル化とは?C#での実装方法をコード例付きで解説
カプセル化とは
カプセル化(Encapsulation)は、オブジェクト指向プログラミングにおける重要な概念の一つです。クラスの内部データやメソッドを外部から隠蔽し、意図しないアクセスや変更からデータを保護する役割を果たします。
C#では、アクセス修飾子(access specifier)を使用することでカプセル化を実装します。アクセス修飾子は、クラスメンバー(フィールドやメソッド)のスコープ(有効範囲)と可視性を定義するキーワードです。
C#で使える主なアクセス修飾子
- public:すべてのコードからアクセス可能
- private:同じクラス内からのみアクセス可能
- protected:同じクラスおよび派生クラスからアクセス可能
- internal:同じアセンブリ内からアクセス可能
- protected internal:同じアセンブリ内、または派生クラスからアクセス可能
privateによるカプセル化の具体例
カプセル化は、privateアクセス修飾子を使うことで分かりやすく理解できます。privateを指定したメンバー変数やメソッドは、他の関数やオブジェクトから隠され、そのクラスの内部からしか操作できなくなります。
次の例では、長方形を表す Rectangle クラスにおいて、length と width の2つの変数に private アクセス修飾子を指定しています。
サンプルコード
using System;
namespace RectangleApplication {
class Rectangle {
private double length;
private double width;
public void Acceptdetails() {
length = 20;
width = 30;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
コードのポイント
このプログラムでは、Rectangle クラスの length と width フィールドが private として宣言されているため、Main メソッドを持つ ExecuteRectangle クラスから直接アクセスすることはできません。
代わりに、public として公開されている Acceptdetails()、GetArea()、Display() メソッドを経由して、これらのデータへ間接的にアクセスします。
このようにデータを隠蔽し、公開メソッドを通じてのみ操作を許可することで、データの整合性が保たれ、クラスの内部実装を後から変更しても外部コードへの影響を最小限に抑えられます。これこそがカプセル化の大きなメリットです。
-
C#で配列を宣言する方法とは?基本構文とサンプルコードを解説
C#で配列を宣言するには、次の構文を使用します。 datatype[ ] 配列名; それぞれの構成要素の意味は以下のとおりです。 datatype … 配列に格納する要素のデータ型を指定します。 [ ] … この変数が配列であることを示します。 配列名 … 配列につける名前を指定します。 たとえば、double型の配列「balance」を宣言する場合は次のように書きます。 double[ ] balance; なお、この段階では配列の実体(メモリ領域)はまだ確保されていません。実際に要素を格納するには、new演算子を使って配列をインスタンス化し、要素数を指定する必要があります。 続いて、
-
Java 9のJShellでカプセル化の概念を実装する方法
JShell(Java Shell)とはJShell(Java Shell)は、Javaの学習やコードのプロトタイピングに役立つREPL(Read-Eval-Print Loop)型の対話ツールです。入力された宣言、ステートメント、式をその場で評価し、結果を即座に出力します。コマンドラインから起動して手軽に利用できるため、小さなコード断片を素早く試すのに最適です。カプセル化(Encapsulation)とはカプセル化は、Javaにおける重要なオブジェクト指向の概念の一つで、「センシティブな(機密性の高い)データ」をユーザーから隠蔽することを目的としています。これを実現するには、クラス変数をpr