カプセル化は3つの主要なものの1つです。オブジェクト指向プログラミング(OOP)の機能。他の2つは、ポリモーフィズムと継承です。これらを合わせて、これら3つの原則を使用してさまざまな言語でプログラムを作成するためのあらゆる可能性を定義するOOPフレームワークを構成します。次に、オブジェクト指向言語は、それらを明確にフォローする必要があります。
OOPの基本
オブジェクト指向プログラミングは、その宇宙の3つの柱に基づいています。
- ポリモーフィズムは、特定のプログラミング言語が相互に関連するオブジェクトを同様に処理する方法の質問に答えます。
- 継承。コードの再利用が促進される方法に対する答えを提供します。
- カプセル化。これは、実装がどのように隠されているかという質問に対する答えであり、したがって、データの整合性が保持されます。
専門用語
カプセル化(プログラミング)はアクセス修飾子を使用して、エンドユーザーからプログラムコードの一部を非表示にします。次に、開発者または継承するオブジェクトを意味します。
「カプセル化」の概念の本質
定義はカプセル化の対象を定義しますプログラムコードの全部または一部を非表示にすることを意味します。 「カプセル化」の概念の本質は、アクセス修飾子を操作することです。つまり、開発者自身が、クライアントクラスに公開するプロパティ、メソッド、クラス、および非表示にするプロパティを決定します。
アクセス修飾子
- public( "public"-public、open、access)-現在のオブジェクトとクラス、および外部の両方に対するパブリックアクセス。
- プライベート(「プライベート」-プライベート、プライベート、隠しアクセス)-閉じたアクセス。その本質は、前のものとはまったく逆です。現在のクラスからのアクセスのみを提供します。
- 保護( "保護"-保護、半隠し、アクセス)-現在のクラスとその派生クラスへのアクセス。
- デフォルト-指定されていないアクセス修飾子は、フィールド/メソッドが現在のクラスパッケージ全体に表示されることを意味します。
C#言語( "C Sharp")では、示されているもの(最後のものを除く)に加えて、次のような修飾子もあります。
- 内部( "内部"-内部アクセス)-現在のコレクションでのパブリックアクセシビリティ、他のすべてのケースではクローズドアクセス。
- 内部保護( "内部保護"-内部保護アクセス)-2つの修飾子を1つに結合し、両方のプロパティを明示します。
カプセル化の役割
カプセル化メカニズムを使用すると、プログラムコードへの外部の影響や、コードに含まれるデータの誤った使用を除外できます。これは、コードとデータを単一の全体に結合することによって行われます。
オブジェクトとカプセル化
ソフトウェアモジュールの実装とコードに埋め込まれたデータは、プログラミングではオブジェクトと呼ばれます。カプセル化との関連の本質は、検討中のメカニズムの統合機能を維持および保証できるのはこの手法であるという事実にあります。
カプセル化の利点
カプセル化は、コーディングプロセスを簡略化する方法です。多数のコード行が舞台裏に残り、メインクラスでは、オブジェクトインスタンスを使用して作業が行われます。
データ保護のアイデア
カプセル化はまたメカニズムですデータ保護のアイデアを実装します。オブジェクト指向プログラミングのプログラミングロジックは、ほとんどのデータがアクセス修飾子private(プライベート)またはprotected(保護)によって隠されるという事実に基づいています。外の世界であるクライアントは、偶然または意図的に、ソフトウェアモジュールの実装に損傷を与えることはありません。実際にこれを行うのは非常に簡単なので、たとえ意図的ではなくても、カプセル化は非常に優れた原則です。
カプセル化ユニット
クラス、カプセル化の主要ユニットとして、データを説明し、このデータを操作できるコードが含まれています。オブジェクトを構築するためのベースでもあります。後者は、クラスのインスタンスとして表されます。
- メンバーは、クラスに含まれるコードとデータです。
- フィールド、またはインスタンス変数-これは、クラスが定義するデータの名前です。
- メンバー関数-コード自体が含まれています。メンバー関数は一般的な名前です。メソッドは特殊なケースです。
特定の例によるカプセル化
カプセル化(プログラミング)の例:
* 注意:
descriptionは、メソッド/プロパティ/変数の説明です。つまり、プログラムで実際に起こっていることについてコメントします。開始/終了タグで実証
システムの使用;
名前空間OOPLibrary.Auto
{
///
///このクラスは、車のプロパティとアクションを記述することを目的としています
///
パブリッククラスAuto
{
///
///開発者がこのプロパティの外部干渉を不要と見なしているため、車の古さを書き込むために作成された変数
///プライベート修飾子、つまり閉じたプライベートアクセスでマークされています(上記の説明を参照)。
///
private int _age;
///
///車が現在動いているかどうかを示すブール変数(2つの値のみ(yesまたはnoのいずれか))
///また、エンドユーザーが誰であっても、それを公開しないでください。したがって、この変数にはプライベートアクセス修飾子「private」も割り当てられます
///
プライベートbool _isMoving;
///
///この文字列変数には、車の色に関する情報が含まれている必要があります。外部からの影響を受ける可能性があります
///したがって、「パブリック」オープンアクセス修飾子が色に選択されます。
///
公開文字列Color;
///
///この特定のケースでは、車の名前も変更できると仮定します
/// public修飾子が割り当てられている(クラスやアセンブリに関係なく、全員にオープンアクセス)。
///
公開文字列の名前。
///
///クラスのコンストラクターが開かれ、変数によって表され、少し前に設定されたすべてのプロパティがその値を取得します
///
公共自動車()
{
_age = 5;
_isMoving = false;
色= "紫";
名前= "Skoda Octavia";
}
///
///メソッドは、車の年齢の値の戻りを実装します。なぜこれが必要なのですか?
///プライベートアクセス修飾子は、クライアントによる変更を防ぎます。
///
///車の年齢を返します。
パブリック文字列GetAge()
{
"現在選択されているマシン" + _age + "古いものです";
}
///
///車が動いていない場合、このメソッドムーブメントの開始を実装します。車の状態(運転中かどうか)を示す変数がチェックされ、結果に応じて適切なアクションが実行されます/対応するメッセージが表示されます。
///
public void Start()
{
if(_isMoving)
{
Console.WriteLine( "移動はすでに開始されています");
}
そうしないと
{
_isMoving = true;
Console.WriteLine( "準備完了、注意..行きましょう!行きましょう!");
}
}
///
///移動が開始された場合、このメソッドはそれを停止します。前に検討したケースと同じプログラムロジック。
///
public void Stop()
{
if(_isMoving)
{
_isMoving = false;
Console.WriteLine( "Stop、car");
}
そうしないと
{
Console.WriteLine( "エラー。車はすでに静止していて、動いていない");
}
}
///
///車両が動いている場合は左に曲がります
///
public void MoveLeft()
{
if(_isMoving)
{
Console.WriteLine( "左折");
}
そうしないと
{
Console.WriteLine( "エラー。車は停止しています。現在、ターン機能は使用できません。");
}
}
///
///右を向いた同様の方法
///
public void MoveRight()
{
if(_isMoving)
{
Console.WriteLine( "右折は正常に行われました");
}
そうしないと
{
Console.WriteLine( "エラー。車はまだ移動していません。現在右折は実行できないアクションです。");
}
}
}
}