2018-01-10

Cプログラマのための、
C++オブジェクト指向簡単裏口入門(2)

なぜ、オブジェクト指向なのか?

ソフトウエアの品質を上げようとすると、自然にオブジェクト指向にたどり着いた、と、僕自身は感じています。
このシリーズを通じて、読者の方にも徐々に感じていただけたらと願っています。なのでこの問いの回答を最初に説明するつもりはありません。

ただし、C++の機能を知っていく中でオブジェクト指向の必然性を感じていただくためのヒントとして、ソフトウエアの品質について少し説明させてください。

ソフトウエアの品質とは


ソフトウエアの品質とは、主に
  • 機能性
  • 安定性
  • 保守性
  • コストパフォーマンス
から成っています。
もちろん、それぞれの要素は完全に独立しているわけではなく、相互に強く関連し合っています。

[機能性]
コーディング前のフェーズにはこれを大きく左右する要素が含まれますが、コーディングでは主に処理速度のことを指します。
場合によっては安定性や保守性とトレードオフの関係になります。

[安定性]
動作の安定性のことで、バグが含まれないことが求められます。
安定性と機能性は相反する場合がありますが、現在はハードウェアの性能が高くなった分を安定性に振り分ける余裕があるので、多くのプログラミングでこれがせめぎ合うケースは少ないと思われます。もちろん、リソースに余裕のないハードウェアをターゲットにしたり、処理速度に関する要求仕様が非常にシビアなジャンルもあり、全てが容易に両立できるわけではありません。

[保守性]
機能追加やバグ修正のしやすさです。他の要素に比べて見落とされがちですが、非常に重要な要素です。
機能性とはトレードオフの関係になる場合もありますが、安定性とはトレードオンの関係になる場合が多いと思われます。

[コストパフォーマンス]
主に開発効率のことです。
上記3要素が全て揃っても、システム開発に莫大なコストがかかってしまえば現実的には成立できず、システムは存在できなくなります。技術者であってもその点を意識し、開発効率を常に考慮する必要があります。

ソフトウエアの生存期間をトータルで考えた場合、特に保守性、および安定性とはトレードオンの関係と言えます。機能性とは間接的にトレードオフの関係になります。
更に、システム開発において1から10までを毎回全て新規開発する状況は好ましくありません。独立性が高く、汎用性のある部分をライブラリ化して無駄な工数を削減することはとても重要です。つまり、1つのシステムだけではなく、社内的な開発体制にまで視野を広げる必要があるということになります。

オブジェクト指向と品質の関係


ここでは具体的な説明は避けますが、概要だけお伝えしておきます。
オブジェクト指向は品質の要素のうち、特に「安定性」、「保守性」、「コストパフォーマンス」に大きく寄与します。
「機能性」については、実行速度の点でややマイナスになる可能性はありますが、少し俯瞰して見ると、その他の要素が向上することで余力が生まれ、それまでできなかったことができるようになるなどして、むしろプラスに作用する場合も多いはずです。

ソフトウエアの品質を意識する


ソフトウエアの品質を常に意識しながら読み進めてください。そして、実際のコーディング時にも常に意識することが大切です。

コーディングのしやすさは開発効率に寄与しますが、場合によってはあまり目先のことに囚われるとトータル的には効率を落としてしまうことがあります。システムの開発サイクル全体を意識して判断することが求められます。


0 件のコメント:

コメントを投稿