オブジェクト指向の勉強

オブジェクト指向というとこの世の全てがオブジェクトであり、犬も猫も哺乳類で、抽象的になんかそんな感じと、よくわからない例えが出てきて、結局なんの事やらわからないがゆえに遠ざかってしまうという事が頻発する流れがあったが、オブジェクト指向というのは単純な話で、オブジェクト指向ソフトウェア開発手法にしたがってシステムを分析設計し、結果をオブジェクト指向プログラミング言語にてプログラミングすれば良いだけ、つまりオブジェクト指向にはルールがあるのでちゃんと守って、そのルールでプログラミング可能な言語でプログラミングしてね、という程度の事だ。

オブジェクト指向のルールとは何かというと、大きくはクラスを作る事である。クラスというのは関数(機能)をまとめた構造体である。構造体とは基本的に数値や文字列などのデータ型しか扱えないが、クラスは関数とデータを合わせた「型」を構造体と同じように扱えるものである。それの何が嬉しいのかというと、大規模なプロジェクトを進める際にモジュールの切り分けが容易で、再利用し、差分だけ拡張していける。

抽象的すぎるので例えると、最初からモジュールをどの単位で作るかという事である。家は柱を立てて屋根までの骨組みをつけその周りに壁を作ることで家にする。拡張するなら一度壁を破壊する必要があり、また柱を立ててその周りに壁を作っていくことになる。これは完成品の品質が高ければ最高の物になるかも知れないが、天才大工がタイミングのいいときしか再現不能な物になってしまう。これは動的な開発には向かない静的な開発になる。更に主たる柱が歪んでいたら目も当てられない。

一方、オブジェクト指向はモジュールを部屋単位で作るので拡張が簡単だ。部屋の繋ぎ部分規格が統一されていれば後からいくらでも部屋をブロックのように継ぎ足していける。部屋は全く同じ規格のものを作ればいいのだが、たまに調度品を変えても良い。部屋単位で好きな事ができる。部屋単位でデザイン可能ということだ。集中可能である。部屋に何か問題のあるデザインがあったとしてもその部屋の修正をすれば良いだけだ。

こう考えると、天才大工頼みの開発では大工が倒れたら終了だが、部屋作成単位の開発であれば部屋の規格を決める部分で間違いがなければそれで良いということになる。

オブジェクト指向は最初の設計が最も大切であると言われるが、何の設計かというと、その規格部分が本当に間違いないのかという事である。規格部分が間違ったら全体を作り直すのと同じことになる。部屋の繋ぎ部分を変更したいという要件が来たら終わる。しかしそれはもう別のプロダクトになってしまう。一つだけ特別な繋ぎ部分を作ってしまうと後がそれに合わせて規格を変更していかないとダメになり、他のモジュールが全て使えなくなる。部屋単位でトイレを作ったり台所にしたり風呂にしたりクローゼットにしたりは簡単だが通路の位置をズラすようなことをすると、対応する通路を持った部屋モジュールが必要になり繋がらなくなるということだ。

オブジェクト指向のルールとはまず部屋単位のモジュールとはどういうものか、対象のプロジェクトに当てはめることから始めることだ。ここの設計がほとんど全て、後から変えるのが最も困難、というかそれを変えたら別物になってしまう。

アジャイル開発というのは適当に決めたことを思いつきで変えていっても良いと勝手に解釈する権力者もいるようだが、この基本を守りつつ、どこまで改変可能か振れ幅を決めて、全体に影響する繋ぎ部分を後で変わらないように最小に設計してないと話にならないというものである。しかしルールが最小限かつ任意的なのでオブジェクト指向に向いている開発であるのも間違いない。鶴の一声で繋ぎの根本を変えるような無策な開発環境はどのみちそのうち破綻するだけなので、鶴の一声が響き渡る前に察して予防線を張ってやるのが良い。それでも予想の斜め上をいくようならそのプロジェクトの命は長くないはずなのでさっさと別に逃げるほうが良い。

2/06/2017 09:11:00 AM