オブジェクト指向プログラミングの概念を6歳の子供に説明する方法

同じ決まり文句の質問が就職の面接で常に何度も何度も尋ねられることに気づきましたか?

あなたは私が何を意味するか知っていると確信しています。

例えば:

5年後の自分はどこにいると思いますか?

さらに悪いことに:

あなたの最大の弱点は何だと思いますか?

うーん…ちょっと休憩して。この質問に答えることは大きな弱点だと思います!とにかく、私のポイントではありません。

このような質問は些細なことかもしれませんが、あなたについての手がかりを与えるので重要です。あなたの現在の心の状態、あなたの態度、あなたの視点。

後で後悔していることが明らかになる可能性があるため、回答するときは注意が必要です。

今日は、プログラミングの世界で同様のタイプの質問について話したいと思います。

オブジェクト指向プログラミングの主な原則は何ですか?

私はこの質問の両側にいます。それはあなたが自分自身に知らないことを許すことができないほど頻繁に尋ねられるそれらのトピックの1つです。

ジュニアおよびエントリーレベルの開発者は通常、それに答える必要があります。インタビュアーが3つのことを言うのは簡単な方法だからです。

  1. 候補者はこの面接の準備をしましたか?

    すぐに答えを聞いた場合のボーナスポイント—それは真剣なアプローチを示しています。

  2. 候補者はチュートリアルフェーズを過ぎていますか?

    オブジェクト指向プログラミング(OOP)の原則を理解することは、チュートリアルからのコピーと貼り付けを超えたことを示しています。すでに、より高い視点から物事を理解しています。

  3. 候補者の理解は深いですか、それとも浅いですか?

    この質問の能力のレベルは、多くの場合、他のほとんどの主題の能力のレベルと同じです。私を信じて。

オブジェクト指向プログラミングの4つの原則は、カプセル化抽象化継承ポリモーフィズム

これらの言葉は、後輩の開発者にとっては怖いように聞こえるかもしれません。また、ウィキペディアでの複雑で長すぎる説明は、混乱を倍増させることがあります。

そのため、これらの各概念について、簡単、簡潔、明確に説明したいと思います。お子さんに説明しているように聞こえるかもしれませんが、実際に面接をする際には、その答えを聞いてみたいと思います。

カプセル化

プログラムがあるとしましょう。プログラムで定義されたルールに従って、相互に通信する論理的に異なるオブジェクトがいくつかあります。

カプセル化は、各オブジェクトがクラス内でその状態をプライベートに保つときに実現されます。他のオブジェクトは、この状態に直接アクセスできません。代わりに、メソッドと呼ばれるパブリック関数のリストのみを呼び出すことができます。

そのため、オブジェクトはメソッドを介して独自の状態を管理します。明示的に許可されていない限り、他のクラスはオブジェクトにアクセスできません。オブジェクトと通信する場合は、提供されているメソッドを使用する必要があります。ただし、(デフォルトでは)状態を変更することはできません。

小さなシムズゲームを作っているとしましょう。人がいて猫がいます。彼らは互いに通信します。カプセル化を適用したいので、すべての「猫」ロジックをCatクラス。次のようになります。

ここでは猫の「状態」であるプライベート変数moodhungryおよびenergy。プライベートメソッドもありmeow()ます。いつでも好きなときに呼び出すことができ、他のクラスは猫にいつニャーと鳴くかを伝えることができません。

彼らは何を行うことができますすることで定義されているパブリック・メソッドsleep()play()およびfeed()それらのそれぞれは、何らかの方法で内部状態を変更し、を呼び出す可能性がありmeow()ます。したがって、プライベート状態とパブリックメソッドの間のバインドが行われます。

これがカプセル化です。

抽象化

抽象化は、カプセル化の自然な拡張と考えることができます。

オブジェクト指向設計では、プログラムが非常に大きくなることがよくあります。そして、別々のオブジェクトは互いにたくさん通信します。そのため、このような大規模なコードベースを何年にもわたって維持することは(途中で変更を加えて)困難です。

抽象化は、この問題を緩和することを目的とした概念です。

抽象化を適用するということは、各オブジェクトがそれを使用するための高レベルのメカニズムのみを公開する必要があることを意味します。

このメカニズムは、内部実装の詳細を隠す必要があります。他のオブジェクトに関連する操作のみを明らかにする必要があります。

考えてみてください—コーヒーマシン。それは多くのことをし、ボンネットの下で風変わりな音を立てます。しかし、あなたがしなければならないのは、コーヒーを入れてボタンを押すことだけです。

できれば、このメカニズムは使いやすく、時間の経過とともに変化することはめったにありません。これは、他のクラスがどのように機能するかを「知らなくても」呼び出すことができるパブリックメソッドの小さなセットと考えてください。

抽象化のもう1つの実際の例は?

スマートフォンの使い方を考えてみましょう。

いくつかのボタンを使用するだけで電話を操作できます。ボンネットの下で何が起こっているのですか?知る必要はありません—実装の詳細は隠されています。あなたは行動の短いセットを知る必要があるだけです。

ソフトウェアの更新などの実装の変更が、使用する抽象化に影響を与えることはめったにありません。

継承

OK、カプセル化と抽象化が大きなコードベースの開発と維持にどのように役立つかを見ました。

しかし、OOP設計におけるもう1つの一般的な問題は何か知っていますか?

多くの場合、オブジェクトは非常に似ています。それらは共通のロジックを共有します。しかし、それらは完全に同じではありません。うーん…

では、どのようにして共通ロジックを再利用し、一意のロジックを別のクラスに抽出するのでしょうか。これを実現する1つの方法は、継承です。

これは、別の(親)クラスから派生して(子)クラスを作成することを意味します。このようにして、階層を形成します。

子クラスは、親クラス(共通部分)のすべてのフィールドとメソッドを再利用し、独自の(一意の部分)を実装できます。

例えば:

プログラムで公立および私立の教師だけでなく、学生などの他のタイプの人々も管理する必要がある場合は、このクラス階層を実装できます。

このように、各クラスは、親クラスとの共通ロジックを再利用しながら、必要なものだけを追加します。

ポリモーフィズム

最も複雑な言葉になりました!ポリモーフィズムとは、ギリシャ語で「多くの形」を意味します。

ですから、私たちはすでに継承の力を知っており、それを喜んで使用しています。しかし、この問題が発生します。

親クラスとそれを継承するいくつかの子クラスがあるとします。これらすべてのクラスを組み合わせたコレクション(リストなど)を使用したい場合があります。または、親クラスに実装されたメソッドがありますが、それを子にも使用したいと思います。

これは、ポリモーフィズムを使用して解決できます。

簡単に言えば、ポリモーフィズムは、親とまったく同じようにクラスを使用する方法を提供するため、タイプの混合と混同することはありません。ただし、各子クラスは独自のメソッドをそのまま保持します。

これは通常、再利用する(親)インターフェイスを定義することで発生します。それは一般的な方法の束を概説します。次に、各子クラスはこれらのメソッドの独自のバージョンを実装します。

コレクション(リストなど)またはメソッドが親のインスタンス(一般的なメソッドの概要が示されている)を予期するときはいつでも、どの子が渡されるかに関係なく、言語が一般的なメソッドの正しい実装を評価します。

幾何学図形の実装のスケッチを見てください。それらは、表面積と周囲長を計算するための共通のインターフェースを再利用します。

親を継承し、これらの3つの図を持つことは、Figure Interfaceあなたが混在のリストを作成することができますtrianglescirclesrectangles。そして、それらを同じタイプのオブジェクトのように扱います。

次に、このリストが要素の表面を計算しようとすると、正しいメソッドが検出されて実行されます。要素が三角形の場合、三角形はCalculateSurface()と呼ばれます。それが円の場合—そしてcirclceのCalculateSurface()と呼ばれます。等々。

パラメータを使用してFigureを操作する関数がある場合は、3回定義する必要はありません。1回は三角形、円、長方形です。

あなたはそれを一度定義し、受け入れることができます Figure引数として。三角形、円、または長方形を渡すかどうか—それらが実装されている限りCalculateParamter()、それらのタイプは重要ではありません。

これがお役に立てば幸いです。あなたは就職の面接でこれらのまったく同じ説明を直接使用することができます。

それでも理解が難しいものを見つけた場合は、下のコメントで遠慮なく質問してください。

次は何ですか?

これまでの面接の質問の古典の1つに答える準備ができていることは素晴らしいことですが、面接を求められることがない場合もあります。

次に、雇用主がジュニア開発者に何を望んでいるか、そして就職活動の際に群衆から目立つ方法に焦点を当てます。

乞うご期待。