|
|||||||||||
オブジェクト指向ハードウェアでは当たり前のカプセル化 prev<< | >>next インスタンスとオブジェクトの用語について オブジェクト指向での再利用性向上についてオブジェクト指向開発=再利用性の向上 といったイメージがありますが、実際にオブジェクト指向開発を行えさえすれば 部品などの再利用性が向上するのでしょうか?これについて考えてみます。 再利用性向上とはオブジェクト指向で開発をすると再利用性が高まる。これは本当でしょうか? 少なくともオブジェクト指向言語を使って開発したからといってそれだけで再利用性が高まるなどといことはまずありません。 そもそも再利用って何でしょうか? オブジェクト指向で全ての元となるものはクラスです。それではクラスを再利用するというのはどういうことか次に書き出してみます。
突き詰めるとこれだけかと思います。前者はSytem.StringクラスやSystem.Text.FileInfoクラス、後者はFormクラスなどが代表的な例です。
JAVA API や、.NET Framework はこれら再利用可能な部品の集合体といえます。
実際これらのクラス群をベースに開発を進めることになります。
ではどうすれば再利用可能なクラスを見出すことができるでしょう。 それに必要なものはとにもかくにもクラスを設計することです。 これを行わないと、どこに実装するのか、クラスをどう関連付けるのか、そこを伏せての実装になります。 設計とまでいかなくても必ず考える必要のある項目なのです。
そして、再利用をめざず我々としては、何かを実現するときに常に2つ以上のクラスで構成できるか?と考えます。
1つはその機能を一般化(抽象化)した汎用的なクラス。
もう1つはそのクラスを利用したアプリケーションに使いやすい形で提供するクラスです。
ここにいくつかクラス図を挙げます。青いクラスが再利用可能となり得るクラスです。
このように、UIに関しても必ずアプリケーションでの共通点などがあるはずです。
これを上位クラスに実装することで開発効率のアップと、仕様の統一が図れます。
仮に別のプロジェクトで使用できるような汎用的なクラスまでたどり着けなかったにしても(納期もあるし・・)、
この形を見出すだけでも1プロジェクト内での共通化・標準化にはかなりの効果を発揮します。
かなり感覚的なことをいうようですが、数を使って一生懸命計算をするのではなく、 方程式を見つけ出して、そこに値を入れて答えを出す。という2段構えの形を常にとるよう心がけることが大切です。 この方程式が青いクラス、値を入れて答えを出すが白いクラスにあたります。 部品は簡単に交換できるかよく部品を置き換えることで機能を変更できる。というような書き出しや、絵も見かけます。
しかしこれを実装するのはかなり慎重にクラス設計を行わないと難しいものがあります。
というか、筆者はこのクラスの置き換えについてよい例が正直思いつきません。
思い浮かぶとしたら、Streamクラスなどです。(FileStream, MemoryStramなど)
きっと絵の中の結合部はStreamクラスでFileStreamを当てていたのをMemoryStreamに変更することにより、
ファイルIOがメモリIOに変更され処理速度を上げた。などといった感じでしょうか?
しかし、行われていたファイルパスの指定は不要になるわけで本当に置き換えるだけでOKなものってあるのでしょうか?
提供する側と利用する側
オブジェクト指向開発と一言で言っても、このように部品となるクラスを作る側と、
存在するクラス群を使用する側の大きく2つに分かれます。(開発の二分化 を参照)
自分がどちらにあたるのか(また両方なのか)を意識しましょう。
大規模プロジェクトなどは完全に分かれますが、中規模・小規模プロジェクトとなると、この汎用化・共通化への
工数が持てないことが多く、再利用をしたくてもそのように作れないのが現実化と思います。
|
|
||||||||||