オブジェクト指向について調べたけど、イマイチしっくりこない…
そんな人には書籍「オブジェクト指向でなぜつくるのか」がオススメです!
オブジェクト指向の説明は一通り聞いたことがあるけど、イマイチしっくりこない、という人も多いのではないでしょうか?
私も理解はしているつもりだけれども、どこか消化不良な感じがするという状態でした。
そんな状態でしたが、本記事で紹介する書籍「オブジェクト指向でなぜつくるのか」を読んで理解を深める事ができたので、概要や得られた知見について書かせて頂きます。
本書の概要
本書に何が書いているかを端的に表すと…
オブジェクト指向の具体的な文法ではなく、
「そもそもオブジェクト指向って何のためのもので、どうやって使えば良いのだっけ?」
という疑問に答えてくれる本です。
主な内容
内容としてはオブジェクト指向に関して以下の事が書かれています。
- 開発された背景、必要性
- 3要素、クラス・ポリモーフィズム・継承 について
- クラス・インスタンスに関してメモリの使い方の特徴
- 設計、図解化の方法
- 設計のコツ
- 開発形態との関連、テスト駆動方開発、アジャイル開発について
- オブジェクト指向言語の次の開発言語について
なぜオブジェクト指向の分野で良書とされているか?
本書はオブジェクト指向について勉強するための良書とされています。
その理由は、オブジェクト指向が登場した背景から解説し、オブジェクト指向のメリットや開発のコツを説明してくれるため、表面的な文法知識から一歩理解を深める事ができるからです。
本書でも再々述べられますが、「オブジェクト指向」はあくまで道具です。道具は何のために・どうやって使うかを理解して初めて価値がでます。
なぜオブジェクト指向の話を聞いても腑に落ちないか
本書を読む前の私の理解
私もIT系の仕事をして9年目なので、オブジェクト指向について一通りの説明はできます。ただし、表面的な説明です。
本書を読む前にオブジェクト指向の説明をすると、「クラスがあって、継承があって、インスタンスを作って…」といった感じでした。
一応、オブジェクト指向について知ってはいますが、構造化設計に慣れてしまっているので、別に構造化設計で良くない?というのが正直な所でした。
構造化設計の問題点とオブジェクト指向
本書では構造化設計の問題点として以下の2つを挙げています。
- グローバル変数
- 再利用性の低さ
上記2つの問題の解決策としてクラス・オブジェクト指向という物が作られたとの説明がありました。
私がC++などのオブジェクト指向言語で馴染めなかった1つが「クラス内変数」でした。グローバル変数の様に使えてしまうクラス内変数がどうにも納得できませんでした。
ただし、構造化設計の問題点をベースに考えてみると、以下の2つの点でクラス・オブジェクト指向が有用であると理解できました。
- クラスのサイズを意味のある最小単位にすれば、クラス内変数のグローバル変数的なデメリットを低減できる
- クラスのサイズを意味のある最小単位にすれば、再利用性を高める事ができる
つまりは、クラスやインスタンスの文法的な側面だけ理解して、技法だけを使うのではなく、クラスの意味単位・再利用性を意識して設計するとオブジェクト指向のメリットを生かせるという事です。
オブジェクト指向を使いこなすために重要な事
とはいえ、オブジェクト指向のメリットは分かったとして、取り敢えずオブジェクト指向で作っておけば良いのか?と言われるとまた微妙です。
オブジェクト指向の強力なメリットの1つが、類似した物をまとめる整理機能です。
オブジェクト指向のメリットを生かすためには、使う側にはソフトウエアの構成要素を分解する能力・分類する能力・類似するモノをまとめる能力 などが必要になります。
お片付けグッズを買うだけで部屋が綺麗にならないのと同じように、オブジェクト指向にするだけではコードは綺麗になりません。
その他感想、ITエンジニアの仕事は当面無くならない
ソフトウエアの需要の増大
本書には古い話が紹介されていました。
20世紀末には世界の総人口がプログラマになっても、増大するソフトウエアへの需要に追い付かない状態になる
(1968年 北大西洋条約機構主催の国際会議での宣言)
実際には、開発効率の向上により、この問題は回避されました。
ただし、既存のシステムのメンテナンスや、現実環境の変化による改修は当面必要であると予測でき、ソフトウエアの仕事は当面は無くならないと考えられます。
モデリングとオブジェクト指向
また、本書ではオブジェクト指向設計の話に合わせてモデリングの話もありました。その中で以下の事が言われていました。
モデリングは、あくまでも人間が考えた事を人間が整理する技術です。
モデリングとは以下の作業の事です。
- 現実の仕組み・作業のどの部分をソフトウエアの対象にするかを考える
- 仕組み・作業を分解して、定式化された手順に落とし込む
例えばですが、スーパーのレジ業務はコンピュータ化されています。
バーコードをスキャンすれば、商品の金額が分かり、クレジットカードを読み取ればカード会社経由で金額を請求できます。
レジ機能がその様になっているのは、誰かがレジになんの機能を持たせるか、どういう手順で実施すればそれが出来るかを考えたからです。
こうしたモデリングに関する部分は、まだまだ人が行う必要があります。
AI化が進めば、今より簡単にソフトウエアを作れる様になるかもしれませんが、モデリングの需要は減るどころか、より増大する可能性もあります。
需要供給曲線で考えると、AI化でプログラムの製造コストが下がれば、使ってみようかという人が増えます。そうした時に、モデリング能力があれば、今までより多くのソフトウエアを製造・販売する事ができます。
オブジェクト指向設計はモデリングと相性が良いため、AI化を見据え、1つのスキルとして身に付けておくメリットがあります。
オブジェクト指向に関しては以下の記事もご参考にどうぞ。
ご参考になりましたら幸いです。
以上
コメント