2章 準備勉強
2.2 FORTRANのモデルをC#で制作する (その2)
オブジェクト指向において、派生関係は非常に重要な概念なので、別の喩えを用いて説明します。
namespace FamilyProg { public class Human { public virtual void WakeUp() { Console.WriteLine("起床"); } public virtual void Breakfast() { Console.WriteLine("朝食"); } public virtual void GoToOffice() { Console.WriteLine("通勤"); } public virtual void Work() { Console.WriteLine("仕事"); } public virtual void Lunch() { Console.WriteLine("昼食"); } public virtual void ComeHome() { Console.WriteLine("帰宅"); } public virtual void Supper() { Console.WriteLine("夕食"); } public virtual void Relax() { Console.WriteLine("寛ぐ"); } public virtual void GoToBed() { Console.WriteLine("就寝"); } } } |
class Program Human csHman = new Human();
Console.WriteLine("★一日の開始");
Console.WriteLine("★一日の終了"); |
public class Husband : Human { public override void GoToOffice() { Console.WriteLine(">夫< 会社へ出勤します"); } public override void Work() { Console.WriteLine(">夫< 会社で仕事をします"); } public override void Lunch() { Console.WriteLine(">夫< 社員食堂で食べます"); } public override void Relax() { Console.WriteLine(">夫< 読書をして過ごします"); } } |
static void Main(string[]
args)
//Human csHman = new Human(); <--
コメントアウト
Console.WriteLine("★一日の終了"); |
public class Son : Human { public override void GoToOffice() { Console.WriteLine(">息子< 大学へ通います"); } public override void Work() { Console.WriteLine(">息子< 大学で講義を聴講します"); } public override void Lunch() { Console.WriteLine(">息子< 学生食堂で食べます"); } public override void Relax() { Console.WriteLine(">息子< 宿題をします"); } } |
//Human csHman = new Human(); // <--
コメントアウト
Console.WriteLine("★一日の開始"); |
実行結果を次に示します。
やはり、 派生クラスで実装したメソッドのみが、固有の処理を行なっています。
( 制作したプログラム: (FamilyProg.lzh) )
親クラス「人」と、派生クラスの「夫」「息子」は 同じ名称のGoToOffice,
Work, Lunch, Relax メソッドを実装しています。 しかしながら 「多態性」の性質により new
するクラスによって 異なる処理が実行されています。
これで オブジェクト指向の重要な性質が揃いました。すなわち、「情報の隠蔽」、「継承」、「多態性」です。 オブジェクト指向でプログラムを作成することで、次のようなメリットが生じます。
<呼び出す側から見ると>
・上位概念クラスを定義し、上位概念クラスとしての実行手順を規定していれば、細かな処理の違いを意識する必要がない。 また、フレームワークを壊さない限り、新しい状況が発生しても派生クラスを新たに制作すれば対処できる。
<派生側から見ると>
・フレームワーク全てに対応する処理を実装しなくても、自分の固有処理だけを実装すれば フレームワーク内に処理を組み入れることができる。
さて オブジェクト指向の 派生関係の説明がひと通り終わったので 水理モデル作成の話に戻ります。
初版:2013/06/12 |