パラシュートパンツやパックマンのように、OOP(オブジェクト指向プログラミング)は1980年代に始まりました。 しかし、流行のファッションやビデオゲームのキャラクターとは異なり、このプログラミング モデルはこの長い年月の後でも健在です。
OOP はソフトウェア開発の基本部分となりました。 Java や C++ といった言語の普及のおかげで、オブジェクト指向のアプローチを理解しない限り、モバイル用のソフトウェアを開発することはできません。 Python、PHP、Ruby などのオブジェクト指向言語が普及しているため、本格的な Web 開発でも同じことが言えます。
オブジェクト指向プログラミングのアイデアを理解することは、一部の IT プロフェッショナルにとって難しいかもしれません。 Visual Basic のような言語で伝統的な構造化プログラミングのトップダウン式のアプローチを使用できるのに、なぜオブジェクトが必要なのかと不思議に思うかもしれません。 あるいは、関数型プログラミングの経験があるかもしれません。これは、コードの要素を正確な数学関数として扱い、他の要素に影響を与えないようにするものです。 基本的なコンセプトは、プログラムを書く代わりに、変数や関数を含む一種のテンプレートであるクラスを作成することです。 オブジェクトはそのクラスの自己充足的なインスタンスであり、楽しくてエキサイティングな方法で相互作用させることができるのです。
トラブルシューティングを容易にするモジュール性
何かがうまくいかず、どこを探せばよいのか見当もつかない。 問題は Widget ファイルにあるのか、それとも WhaleFlumper にあるのか? その “sewage.c” ファイルを踏破しなければならないのでしょうか。 コードをコメントしたことを望みます!
オブジェクト指向プログラミング言語を使用しているとき、あなたはどこを見ればよいかを正確に知っています。 “ああ、車のオブジェクトが故障したのか? 問題は Car クラスにあるに違いない!” と。 それ以外には何もする必要がないのです。
それがカプセル化の良さです。 オブジェクトは自己完結しており、機能の各ビットはそれ自身のことを行い、他のビットは放置されます。
継承によるコードの再利用
あなたの Car オブジェクトに加えて、ある同僚は RaceCar オブジェクトを必要とし、別の同僚は Limousine オブジェクトを必要とするとします。 誰もが自分のオブジェクトを別々に構築しますが、それらの間に共通点を発見します。 実は、それぞれのオブジェクトは、実際には異なる種類のCarに過ぎないのです。 ここで、継承のテクニックが時間を節約してくれるのです。 1 つの汎用クラス (Car) を作成し、汎用クラスの特性を継承するサブクラス (RaceCar と Limousine) を定義します。
もちろん、Limousine と RaceCar には固有の属性と関数が残っています。 RaceCar オブジェクトが “fireAfterBurners” のメソッドを必要とし、Limousine オブジェクトが Chauffeur を必要とする場合、それぞれのクラスは自分だけのために別々の関数を実装することができます。 しかし、どちらのクラスも Car クラスから重要な側面、たとえば “drive” や “fillUpGas” メソッドを継承しているので、継承するクラスはこれらの関数をもう一度書くのではなく、既存のコードを再利用するだけでよいのです。 これは、OO アプローチのもうひとつの利点です。
ポリモーフィズムによる柔軟性
この例から、”driveCar”, “driveRaceCar” および “DriveLimousine” など、いくつかのドライバー、または関数だけを必要とします。 RaceCarDrivers は LimousineDrivers といくつかの特性を共有しますが、RaceHelmets や BeverageSponsorships のような他のものはユニークです。
ここで、オブジェクト指向プログラミングの優れたポリモーフィズムが活躍します。 1 つの関数は、それがどのクラスにあっても適応するように形を変えることができるので、親である Car クラスに “drive” という 1 つの関数を作成することができます。 この関数は、RaceCarDriverやLimousineDriverなどにも使えます。 実際、「raceCar.drive(myRaceCarDriver)」や「limo.drive(myChauffeur)」も可能です。
Effective problem solving
C 言語はプログラミング史において素晴らしい遺産ですが、トップダウン言語でソフトウェアを書くことはミトンをはめたままジェンガで遊ぶのと同じことなんです。 複雑になればなるほど、崩壊する可能性が高くなります。 一方、Haskell や ML のような言語で関数型プログラムを書くのは面倒です。
オブジェクト指向プログラミングは、一度そのコツをつかめば、しばしば最も自然で実用的なアプローチになります。 オブジェクト指向言語により、ソフトウェアを一口サイズの問題に分解し、一度に1つのオブジェクトを解決することができます。 しかし、オブジェクト指向プログラミングの利点はたくさんあります。 複雑なプログラミングの課題を解決する必要があり、自分のスキルセットにコードツールを追加したい場合、OOP はあなたの友人であり、パックマンやパラシュートパンツよりもはるかに長い寿命と実用性を持っています。