例付きのOOP(パート1)

運命では、大学でデザインパターンに関する特別なコースを読む必要があります。 特別なコースが必要であるため、生徒たちは私とはまったく違った方法でやって来ます。 もちろん、その中には実践的なプログラマーがいます。 しかし、残念なことに、ほとんどは基本的なOOP用語を理解することすら困難です。



これを行うために、OOPの基本概念(クラス、オブジェクト、インターフェイス、抽象化、カプセル化、継承、およびポリモーフィズム)を説明するために、多かれ少なかれ実例に挑戦しました。



以下に示す最初の部分は、クラス、オブジェクト、およびインターフェースに専念します。

2番目の部分は、カプセル化、ポリモーフィズム、および継承を示しています。







OOPの概念



クラス


あなたが車を設計していると想像してください。 車にはエンジン、サスペンション、2つのフロントヘッドライト、4つの車輪などが含まれている必要があることを知っています。 また、あなたの車が拾い上げ、減速し、方向転換し、逆方向に動くことができることを知っています。 そして、最も重要なことは、カムシャフトとクランクシャフトの動きの法則、およびディファレンシャルの配置方法に従って、エンジンとホイールがどのように相互作用するかを正確に知っていることです。 知識に自信があり、設計を開始します。



車を構成するすべての部品と、これらの部品が互いにどのように相互作用するかを説明します。 さらに、車のブレーキまたはメインビームをオンにするためにユーザーがしなければならないことを説明します。 作業の結果はスケッチになります。 OOPがクラスと呼ぶものを開発しました。



クラスは、状態とこの状態に依存する動作を定義するエンティティを記述する方法であり、このエンティティとやり取りするためのルール(契約)も定義します。



プログラミングの観点から見ると、クラスはデータ(フィールド、属性、クラスメンバー)とそれらを操作するための関数(メソッド)のセットと見なすことができます。



プログラム構造の観点では、クラスは複雑なデータ型です。



この場合、クラスはエンティティ(車)を表示します。 クラス属性は、エンジン、サスペンション、車体、4輪などです。 このクラスの方法は、「ドアを開ける」、「ガスペダルを押す」、「ガソリンの一部をガソリンタンクからエンジンに注入する」です。 最初の2つのメソッドは、他のクラス(特にDriverクラス)による実行に使用できます。 後者は、クラス内の相互作用を説明し、ユーザーはアクセスできません。



将来、「ユーザー」という言葉はソリティア「コシンカ」と「Microsoft Word」に関連付けられているという事実にもかかわらず、あなた自身を含め、クラスを使用するプログラマーのユーザーを呼び出します。 クラスの作成者である人は、開発者と呼ばれます。



対象


あなたは素晴らしい仕事をし、図面に従って設計された機械は組立ラインから外れます。 ここで、彼らは工場の庭に均等に並んでいます。 それぞれが正確に図面を繰り返します。 すべてのシステムは、設計どおりに相互作用します。 しかし、各車はユニークです。 それらはすべてボディとエンジンの番号を持っていますが、これらの番号はすべて異なっており、車は色が異なり、一部にはスタンプされたディスクの代わりにキャスティングがあります。 実際、これらの車はクラスのオブジェクトです。



オブジェクト(インスタンス)は、クラスによって完全に決定される特定の状態と動作を持つクラスの個々の代表です。



簡単に言えば、オブジェクトには特定の属性値と、クラスで定義されたルールに基づいてこれらの値を操作するメソッドがあります。 この例では、クラスが「アイデアの世界」からの抽象的な自動車である場合、オブジェクトは窓の下に立っている特定の自動車です。



インターフェース


コーヒーやドライブを持って自動販売機に来ると、彼らとやり取りし始めます。 通常、相互作用は特定の要素セットの助けを借りて行われます。コインを受け入れるスロット、飲み物を選択するボタン、コーヒーマシンでグラスを分配するコンパートメント。 車のハンドル、ペダル、ギアレバー。 対話できるコントロールのセットは常にいくつかあります。



インターフェイスは、他のクラスで使用できるクラスメソッドのコレクションです。



明らかに、クラスのインターフェースは、パブリック属性のセットとともに、すべてのパブリックメソッドのセットになります。 本質的に、インターフェイスはクラスを指定し、クラスで可能なすべてのアクションを明確に定義します。

インターフェースの良い例は車のダッシュボードです。これにより、速度の増加、ブレーキ、回転、ギアのシフト、ヘッドライトの点灯などのメソッドを呼び出すことができます。 つまり、車と対話するときに別のクラスが実行できるすべてのアクション(この場合はドライバー)です。



クラスインターフェイスを記述するときは、柔軟性とシンプルさのバランスをとることが重要です。 シンプルなインターフェースを持つクラスは使いやすいでしょうが、それで解決できないタスクがあります。 同時に、インターフェイスが柔軟な場合、多くのことを可能にする多数のパラメータを持つかなり複雑なメソッドで構成される可能性が高いですが、それを使用すると大きな困難とエラーを引き起こすリスクが伴います混同。



シンプルなインターフェースの例は、自動変速機を備えた機械です。 2週間の運転コースを修了したブロンドは、すぐに自分のコントロールを習得できます。 一方、現代の旅客機の制御をマスターするには、数ヶ月、または数年の厳しい訓練が必要です。 私は、2週間の飛行経験がある人が管理しているボーイングに搭乗したくありません。 一方、車を空に飛ばして、モスクワからワシントンに飛ぶことはありません。



All Articles