序文
ヘッド5つの原則(SOLID 5つの原則)オブジェクト指向プログラミングとオブジェクト指向設計の前に書かれた記事があります。カプセル化、継承、ポリモーフィズム - 今日は、オブジェクト指向の三つの特徴について話してきます
パッケージ
それは以下のように定義される「物理的または論理的なパケットで囲まれた一つ以上のアイテム。」オブジェクト指向の設計手法では、パッケージは、実装の詳細へのアクセスを防止することです。パッケージは、特定の実装の詳細を隠し、特定の外部インタフェースを開示しています。特定のセキュリティを追加し、漏れや被害情報を防ぎます。
パッケージを述べ、我々は、アクセス修飾子を置く必要があります。
-
- パブリック:すべてのオブジェクトにアクセスすることができます。
- プライベート:オブジェクト自体は、オブジェクトの内部にアクセスすることができます。
- 保護:唯一のクラスのオブジェクトは、オブジェクトとそのサブクラスにアクセスすることができます
- 内部:同じプログラムのオブジェクトのセットにアクセスすることができます。
- 内部保護:へのアクセスを制限またはクラスを含むタイプの現在のアセンブリに由来します。
受け継ぎます
継承は、ソフトウェアの再利用の一形態です。継承を使用すると、既存のデータや行動のクラスを再利用し、彼らに新しいクラスを作成するための新しい機能を与えることができます。
継承と呼ばれている既存のクラス(基底クラス、親クラス)に基づいて、新しいプロセス(派生クラス、サブクラス)を作成します。派生クラスが自動的に基底クラスのコンストラクタとデストラクタを除くすべてのメンバーを取得することができ、新しい属性および派生クラスでその機能を拡張メソッドを追加することができます。
ここで、連続は、次のシリーズに分けることができます。
-
- 単一継承:この継承を使用して、基本クラスから派生したクラスを表すのC#
- 多重継承:多重継承は複数のクラスから派生したクラスは、C#は多重継承をサポートしていないことができますが、多重継承のインタフェースを可能に
- 多層継承:継承は、BがクラスAに由来するより大きな多層この層構造を可能にし、また、中間ベースクラスBクラスと呼ばれるクラスCから派生クラスB、C#が、それをサポートしても非常に一般的です。
- インタフェースの継承:インターフェイスは多重継承を可能に
ポリモーフィズム
同じ名前で異なる多型の方法が存在することを指すが、主に親クラス多型カバーのサブクラスを通じて、プログラミングに存在する、1つの設計原理は、柔軟性を高めるために、特定に依存することなく、抽象的に依存することです。多型は、この原則を反映しています。
説明する例
ここでは、グラフィック領域のシーンが計算されていることを前提としています。ここでは、抽象基底クラスの形状を有しています。その後、他のデザインは、それを継承します。
クラス設計
/// <要約>
/// 抽象类
/// </要約>
パブリック 抽象 クラスの形状
{
プライベート 文字列 ShapeName { 取得します。セット; }
パブリック状(列shapeName)
{
この .ShapeName = shapeName。
}
/// <要約>
/// 计算面积
/// </要約>
/// <戻る> </戻り>
パブリック 抽象 ダブルCalculateArea()。
}
/// <要約>
/// 长方形
/// </要約>
パブリック クラスの長方形:形状
{
/// <要約>
/// 长
/// </要約>
公共 ダブル Longm { 取得します。セット; }
/// <要約>
/// 宽
/// </要約>
公共 ダブル Widem { 得ます。セット; }
パブリック矩形():ベース(" 長方形" )
{
Longm= 0 ;
Widem = 0 ;
}
公共 オーバーライド ダブルCalculateArea()
{
戻り Longm * Widemと、
}
}
/// <要約>
/// 圆形
/// </要約>
パブリック クラスサークル:形状
{
/// <要約>
/// 半径
/// </要約>
公共 ダブル R { 得ます。セット; }
パブリックサークル():ベース(" サークル" )
{
R = 0 。
}
公共 オーバーライド ダブルCalculateArea()
{
戻りにMath.PI * R * Rと、
}
}
コール
クラスプログラム
{
静的 ボイドメイン(文字列[]引数)
{
Console.WriteLineを(" 計算されたパターン領域を選択してください:(B)長方形(A)/ラウンド" );
文字列の答え= Console.ReadLine();
IF(解答== " A " )
{
ダブル longm = 0 ;
ダブル widem = 0 ;
試み
{
Console.WriteLineを(" 長さを入力してください:" );
longm = 二重.Parse(Console.ReadLine())。
Console.WriteLineを(" 请输入宽:" );
widem = 二重.Parse(Console.ReadLine())。
}
キャッチ(例外)
{
Console.WriteLineをは(" 输入请数字!" );
}
長方形の矩形 = 新しい長方形()。
rectangle.Longm = longm。
rectangle.Widem = widem。
Console.WriteLineを($ " これは矩形rectangle.CalculateArea {()}の面積である" );
}
他
{
ダブル R&LT = 0 ;
試み
{
Console.WriteLineを(" 半径を入力してください:" );
R&LT = INT .Parse(コンソール.readline());
}
キャッチ(例外)
{
Console.WriteLineを(" 数値を入力してください!" );
}
サークルサークル= 新規新しいサークル();
circle.R = R&LT;
Console.WriteLineを($ " これは円circle.CalculateArea {()}の領域です" );
}
}
}
概要
この効果は、大きな実際的な場合ではない、それは理解主パッケージ継承多型を説明することが便利であり、実施例では、グラフィックス・パッケージの名前は、抽象クラスグラフィック抽象基底クラスは、この円形と矩形のベースクラスを継承します。多型オーバライド領域の計算を達成書き換えます。もっとまだ実用化の実際のプロジェクトを必要とします。
次のFanger魏コードをスキャンするために歓迎し、より多くの私は一緒にC#の知識を学びます