C#におけるカプセル化と抽象化の主な違いは、カプセル化がデータとメソッドを1つの単位に包み込むのに対し、抽象化は実装の詳細を隠してユーザーに機能のみを表示することである。
C#は、Microsoft社が開発した高水準の汎用プログラミング言語です。
.NETフレームワーク上に構築されている。
このフレームワークは、アプリケーションを開発・配備するための環境と必要なツールを提供します。
C#の大きな利点の1つは、オブジェクト指向プログラミング(OOP)をサポートしていることです。
そのため、開発者は問題を解決するために実世界のシナリオを容易にモデル化し、表現することができます。
オブジェクト指向の2つの主要な柱は、カプセル化と抽象化です。
C#のカプセル化とは?
カプセル化とは、データとメソッドを1つの単位につなげることです。
例えば、医療用カプセルを想定します。
カプセルの中に入っている薬は、覆いによって保護されています。
カプセル化もそれと同じようなものです。
カプセル化の主目的は、データにアクセスできないようにすることです。
C#では、public、protected、privateなど、いくつかのアクセス修飾子が用意されています。
publicは、他のクラスからアクセス可能なメンバーです。
protectedは、そのクラス内およびサブクラスからアクセス可能です。
しかし、privateは、そのクラス内でのみアクセス可能である。
プログラマーは、データメンバーをプライベートにして、データの読み書きにパブリックゲッターとセッターを使用することができます。
同様に、カプセル化はデータとメソッドを1つのユニットにまとめ、データに直接アクセスできないようにします。
このプログラムでは、Studentはクラスです。
このクラスは、nameというプライベートなデータメンバを持っています。
setNameメソッドは、Stringを受け取り、その値をnameに代入します。
getNameメソッドはnameという文字列を返します。
メインプログラムでは、Student 型の s というオブジェクトがあります。
20行目では、オブジェクトsに対してsetNameが呼び出され、そのメソッドにString “Ann “が渡されています。
21行目では、getNameによって名前が取得されています。
最後に、名前がコンソールに表示されます。
カプセル化は、データとメソッドを1つのユニットにまとめます。
プログラマーはデータメンバーに直接アクセスするのではなく、public setメソッドで値を代入し、public getメソッドで値を取得するのです。
C#の抽象化とは?
抽象化とは、実装の詳細を隠蔽し、ユーザーに機能のみを表示することを可能にすることです。
例えば、テレビのリモコンを想定してください。
ユーザーは、コントローラーの内部回路を知らなくても使うことができます。
抽象化もこれと同じようなものです。
どのように行われるかに注目するのではなく、そのオブジェクトが何を行うかに注目するのです。
C#では、抽象化を実現するために2つの方法があります。
それは、抽象クラスとインターフェイスを使用することです。
抽象クラスは、抽象メソッドと非抽象メソッドを持つことができます。
抽象クラスを継承するクラスは、抽象メソッドの実装を提供する必要があります。
インターフェイスでは、すべてのメソッドが抽象化されます。
インターフェイスを実装するクラスは、抽象的なメソッドの定義を提供しなければなりません。
図2:抽象クラスを用いたC#プログラム
上のプログラムでは,Shapeは抽象クラスです.drawという抽象メソッドを持っています。
TriangleクラスはShapeを継承しています。
したがって、このクラスはdrawメソッドを実装しています。
mainメソッドでは、sはShape型のオブジェクトです。
drawメソッドはTriangleのdrawメソッドと呼ばれます。
上のプログラムでは、Shapeはインターフェースです。
drawという抽象メソッドを持っています。
TriangleクラスはShapeを継承しています。
drawメソッドの定義を提供する。
mainメソッドでは、sはShape型のオブジェクトです。
drawメソッドはTriangleのdrawメソッドと呼ばれる。
C#のカプセル化と抽象化の違い
定義
C#におけるカプセル化とは、データとメソッドを結合して1つの単位とするOOPの概念です。
一方、C#における抽象化とは、実装の詳細を隠蔽し、機能のみをユーザーに表示するOOPの概念です。
したがって、これがEncapsulationとAbstractionの主な違いです。
達成方法
さらに、プログラマはC#でカプセル化を実現するために、データメンバをプライベートにして、パブリックメソッドを使用することができます。
C#で抽象化を実現するために、抽象クラスとインタフェースがあります。
使用方法
EncapsulationとAbstractionのもう一つの違いは、その使用方法です。
つまり、カプセル化はデータ保護のためにデータを隠し、抽象化はコードの複雑さを軽減するために実装の詳細を隠します。
結論
カプセル化と抽象化は、C#プログラミングで実装可能な2つのOOPコンセプトです。
C#におけるカプセル化と抽象化の主な違いは、カプセル化がデータとメソッドを1つのユニットに包み込むのに対し、抽象化は実装の詳細を隠してユーザーに機能のみを表示することです。