「オブジェクト指向」はプログラミングをする上での考え方の一つとして、一時代を築きました。今でもJava、C#、Python、etc・・・と数多くの言語はオブジェクト指向を元とした技法によって構成されています。
「構造化プログラミング」等と同じプログラミングパラダイムの一つですが、「オブジェクト指向」は実際の業務改善や業務を実施するにあたってプログラミングに限らず非常に有効な考え方と思います。
その簡単な考え方や応用例を記載しようと思います。
- 概要
「オブジェクト指向」とは、ある働きをするオブジェクト(物)を定義して、それがお互いに相互作用して一つの機能を実現するという考え方です。
プログラミングの世界では、オブジェクトは「通信先のレジスタ」を定義するものであったり「ビット数を指定できる数値」であったりしますが、現実世界では「部署」であったり「技術パートナー企業」であったりします。
プログラミングの世界でも現実世界でも、オブジェクトは”インタフェース”と”動作”を持っています(パラメータというものもありますが割愛します)。インタフェースはやり取りの方法、動作はそのオブジェクトがやるべき仕事です。その2つを明確にすることで、「オブジェクト指向」は単なるプログラミングの考え方ではなく、業務に使える考え方になり、効率的に物事を進める手順としても役立ちます。
- オブジェクト
オブジェクトとは動作とインタフェースが定義された一つの塊です。オブジェクトは複数から構成される場合もあり、構成されるオブジェクトもそれぞれの”インタフェース”や”動作”を持っています。
例えば「車」というオブジェクトがあったとします。車はアクセルを踏むと走ります。車を走らせるためには、「タイヤ」「アクセル」「エンジン」「車体」等のオブジェクトが必要です。では「タイヤ」に定義されるインタフェースや動作は何でしょうか。
“動作”
・伝達された回転数で回転する
・出力する走行距離は中心部から伝達される回転数で直径・半径で変化する
・路面の抵抗力から伝達された回転する力に応じた回転
Etc…
“インタフェース”
・回転軸
等が挙がるかとおもいます。
一つの「車」という機能を実現するためには、それを構成する物の動作やインタフェースを正確に定義しなければ実現できません。
動作やインタフェースの定義が曖昧であれば、それを使う側も曖昧になります。上記例で言うと、直径が決まっていないタイヤをどうやって車に使うのか、、インタフェースが回転軸ではないタイヤをどうやって回すのか??ということになります。
→オブジェクト定義には特に正確である必要がある
- 定義と相互作用の重要性
一つの機能を実現するためには、それを構成(実現)するためのオブジェクトの正確な定義が重要であることは前述の通りです。
定義したオブジェクト同士が相互作用することで、一つの機能を実現します。アクセルというオブジェクトがエンジンというオブジェクトに作用し、更にタイヤに作用することでタイヤが回転して車が走るという流れでしょうか。
では、アクセルはタイヤの事を知っているでしょうか?タイヤの素材は何か?、タイヤの直径はどれくらいか?、それもアクセルは知らないでしょう。これはインタフェースを通じて動作指示をしているだけで、伝えた先がどのように動いているか、は指示した「元」は知らないからです。
問題が発生した時、その原因を特定するために、例えばタイヤが原因の問題を即座に発見できず、まずは車の全体から、例えばウインカーのレバーから問題を考えるのでしょうか?
個々のオブジェクトが正確に定義され、決まったインタフェースで動作する以上、どう動くかは呼び出し先のオブジェクト内の話で、それを呼び出す側は知るところではありません。
この考え方により、問題が発生した場合や改善が必要な場合に、どのオブジェクトに問題があるかや改善すべきかが、明確に、早く、他へ影響の少ない形で切り分けられるようになります。
→個々の定義ができずざっくりと全体を見た感じでは、見た気になっていて細かな修正に焦点を当てにくい
全体を捉えるためには、オブジェクトすべての”動作”の内容(実装)を知る必要はないですが、すべてのオブジェクトの定義を正確に理解する必要があります。






コメント