「こんにちは、アミーゴ! 今日は、新しくて興味深い世界を皆さんに紹介します。私はオブジェクト指向プログラミング(OOP)について話しています。皆さんはすでにクラスとオブジェクトについて理解しています。今日は、彼らについてもっと詳しく知るために。」

まずは OOP の 4 つの柱から始めます。それらは、抽象化、カプセル化、継承、ポリモーフィズムです。(以前は3つありましたが、後に抽象化が追加されました)

1) 抽象化。

実生活における抽象化の良い例は、会社での職務記述書です。役職は別のものですが、その職務はまったく別の問題です。

将来の会社の組織図を作成していると想像してください。秘書の職務を分割して、他のいくつかの役職に分散させることもできます。CEO の仕事を、最高財務責任者、最高技術責任者、最高マーケティング責任者、最高人事責任者など、いくつかの個別の役職に分割することもできます。あるいは、オフィスマネージャーと採用担当者のポジションを 1 つに統合することもできます。

会社の役職の名前を考え出し、それらの役職の責任を「分担」するとします。それが抽象化です。大きくて一体的なものをいくつかの小さな部分に分割します。

OOP: 基本原則 - 1

プログラマーの観点から見ると、抽象化とはプログラムをオブジェクトに適切に分割することです。

大規模なプログラムは、通常、十数の異なる方法のいずれかで相互作用するオブジェクトとして表現できます。抽象化を使用すると、オブジェクトの主な特徴を抽出し、それほど重要でないものは省略できます。

抽象化は軍事戦略のようなものです。間違った戦略を選択した場合、どんな独創的な戦術も窮地を救うことはできません。

2) カプセル化。

カプセル化は、オブジェクトを単純化することでオブジェクト間の相互作用を改善することを目的としています。

OOP: 基本原則 - 2

何かを単純化するための最良の方法は、それについて知る必要のない人から複雑なことを隠すことです。たとえば、ボーイング社製ジェット機のパイロット コントロールの後ろに座った場合、その仕組みを理解するのに長い時間がかかるでしょう。

OOP: 基本原則 - 3

一方、飛行機に乗っている乗客にとっては、すべてが単純に見えます。チケットを購入して飛行機に乗り、その後離陸して着陸します。「チケットを買う」方法と「飛行機に乗る」方法だけを知っていれば、大陸から大陸へ簡単に飛ぶことができます。飛行機の飛行、離陸、着陸、および潜在的なさまざまな緊急事態の準備に関連する複雑さはまったくありません。また、衛星ナビゲーション、自動操縦、航空管制センターについては何も言及していません。これにより私たちの生活が簡素化されます。

プログラミングの観点から言えば、カプセル化は「実装を隠す」ことです。私はその定義が好きです。私たちのクラスには何百ものメソッドを含めることができ、さまざまな状況で非常に複雑な動作を実装できます。しかし、そのすべてのメソッドを (「プライベート」とマークすることで)覗き見から隠し、(「パブリック」とマークすることで) 他のクラスとやり取りするメソッドを 2 つまたは 3 つだけ残すことができます。そうすれば、プログラム内の他のすべてのクラスは、このクラスのこれらのいくつかのメソッドのみを参照し、呼び出すようになります。コックピットが幸せな乗客の視界から遠ざけられているのと同じように、クラスの複雑さはすべて内部に隠されます。

3) 継承。

継承はプログラミングと実生活における概念です。プログラミングにおいて、継承は 2 つのクラス間の特別な関係です。しかし、現実の継承ははるかに興味深いものです。

現実に何かを作成する必要がある場合、次の 2 つの選択肢があります。

1)必要なものをゼロから作り、それに多くの時間と労力を費やします。

2)すでにあるものを使って必要なものを作る。

最善の戦略は次のとおりです。既存の優れたソリューションを採用し、ニーズを満たすように再加工および微調整してから使用します。

人類の進化を考えてみましょう。その始まりを地球上の生命の始まりまで遡ってみると、何十億年も経過していることがわかります。しかし、人間が猿から始まったと考えると、まだ数百万年しか経っていません。ゼロから何かを作成するには時間がかかります。もっと長く。

同様に、プログラミングでも、あるクラスを別のクラスに基づいて作成できます。新しいクラスは、既存のクラスの子孫 (継承) になります。これは、必要なデータとメソッドの 80 ~ 90% を含むクラスがすでにある場合に非常に役立ちます。適切なクラスを新しいクラスの親として宣言するだけです。親クラスのデータとメソッドはすべて、自動的に新しいクラスの一部になります。便利ですよね?

4) ポリモーフィズム。

ポリモーフィズムは、異なる実装が同じインターフェイスの背後に隠されている状況を説明するプログラミングの概念です。現実の類似点を見つけるには、車の運転プロセスに目を向けることができます。

トラックを運転できる人は、救急車やスポーツカーのハンドルを握ることもできます。車の種類に関係なく、ステアリング ホイール、ペダル、ギアシフトという同じ制御インターフェイスを備えているため、人は車を運転できます。車の内部の構成は異なりますが、すべて同じ制御インターフェイスを共有しています。

プログラミングの話に戻ると、ポリモーフィズムを使用すると、異なるクラスのオブジェクト(通常は共通の祖先を持つオブジェクト) を同じ方法で操作できるようになります。この重要性はいくら強調してもしすぎることはありません。プログラムが大きくなるにつれて、その重要性は増します。

OOP は原則です。プログラミング法。それらはそれぞれ何らかの形で私たちを制限しますが、その代わりにプログラムが大きくなるにつれて大きな利点をもたらします。OOP の 4 つの原則は椅子の 4 本の脚に似ています。どれか一つでも外すとシステム全体が不安定になってしまいます。