FoxStyle

大学生のマインドマップ的ブログ

プログラミング初心者におすすめの本!「オブジェクト指向でなぜつくるのか」

オブジェクト指向でなぜつくるのか

こんにちは、FOX(@Aredfox4624)です!今回はプログラミングに関する本の書評です。

以前、こんな記事を書きました。

www.fox-style.com

プログラミングを始める時は、まずProgateやドットインストールなどでプログラミング言語を覚えて、コードを書く練習をすると思うのですが、それだけでは実際に開発を行うことはできません。

このツイートには書いてあることはもちろん開発では必須の周辺スキルですが、そもそも「オブジェクト指向」というプログラミングの考え方もしっかりと理解しておく必要があります。

初学者で、この「オブジェクト指向」がよくわからないという方は案外多いのではないのでしょうか?

実際、私もオブジェクト指向が何なのか先輩に聞いても、

説明するのは難しい

と言われ、説明されたとしても難しい用語の羅列で混乱してしまった経験があります。

ですので、本を読んで理解しようとしました。その時出会ったのがこの良書です。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

この本の特徴

1. 「How」ではなく「Why」を教えてくれる

多くの参考書では、オブジェクト指向がどういうものか簡単に説明し、どうやって使うのかが重点的に説明されています。

しかし、それだけではオブジェクト指向に対する理解度は、なんとなくわかった程度で終わってしまいます。

重要なのは「なぜ」オブジェクト指向を使うのかという点であり、そこをわかりやすく説明しているのがこの本の第一の特徴です。

2. プログラミング言語の歴史を解説

「オブジェクト=モノ」と訳されるので、多くの人はオブジェクト指向を単純化して説明するために、乗り物や動物に喩えて説明します。

継承であれば、動物がスーパークラスで、哺乳類や魚類はサブクラスというように。

この捉え方は感覚的に理解する上ではわかりやすいかもしれませんが、実践ではクソの役にも立ちません。

つまり、必要なのは現実的な視点での「使えるオブジェクト指向」です。

それを理解するためにはソフトウェアの歴史を知る必要性があります。

例えば、歴史を勉強するときに、教科書に載っている説明だけでわからないまま重要語句を覚えてしまうとただの暗記ゲーになってしまい、つまらないですよね。

時代の流れやその背景にある前提知識を知っていれば、とある歴史上の偉人がなぜこのような政策をやったのか、このような考え方をしたのかわかると思います。

「オブジェクト指向」もそれと一緒です。

3. オブジェクト指向の混乱要因をしっかり押さえている

筆者は本の中でそれを3点挙げています。

用語の洪水
比喩の乱用
なんでもオブジェクトに喩える

①について、継承、カプセル化、ポリモーフィズム、コンストラクタ、コンポーネント、アジャイル開発、オーバーライド、インターフェース、クラス、インスタンスなどなど、難しい用語が溢れていますよね。

用語の多さ自体は、現在ソフトウェア開発においてオブジェクト指向のカバーする範囲が大きすぎるので仕方ないみたいです。

②や③は、「現実世界をそのままプログラムとして表現できる」という大きな誤解を生む可能性があります。

つまり、現実世界のありとあらゆるものがオブジェクト(モノ)で作られ成り立っているように、プログラムもオブジェクトを中心にして作られているという誤解です。

実際は「オブジェクト指向≠現実世界」であり、オブジェクト指向は単なるプログラミングのための仕組みです。

オブジェクト指向と現実世界は似て非なるものなのに、比喩を多用したり、現実のありとあらゆるものをオブジェクトとして捉えてしまうことが、混乱を招く要因だと筆者は述べています。

例えば、オブジェクト指向では、まずクラスを定義し、インスタンスを作る仕組みになっています。

しかし、皆さんは人間というものを定義してから、子供を産みますか?そんなことしませんよね。

もっと大きな枠組みでいうと、ソフトウェアは人間の仕事の全てをやることができますか?一部だけしかできませんよね。現実世界とは似て非なるものです。

これらの混乱要因を排除するために、この本では以下のような方針で書かれています。

POINT①

紹介する用語や概念は最小限に

POINT②

比喩による説明は最小限に

POINT③

プログラミングの仕組みと、「モノ中心」で汎用的に物事を捉える考え方をしっかり分けて説明する

4. 豊富な図や簡単なコードを用いてわかりやすく説明

オブジェクト指向言語には、三大要素呼ばれる代表的な3つの特徴があります。

カプセル化(クラス)、ポリモーフィズム、継承

これらが何なのか説明を求められたときに、具体的なイメージやコードを頭の中に思い浮かべることができますか?

できなかった人はこの本を読むことをおすすめします。

コードも簡単なjavaのコードで書かれています。

このコードがわからなかった場合はProgateで1時間くらい勉強してから読むと理解が早まると思います。

5. メモリ領域の仕組みやプログラムの動作の仕方も説明されている

オブジェクト指向で書いたプログラムがコンピュータの中でどのように動くのかというのは初学者の方はもちろん知らないと思います。

オブジェクト指向プログラミングの特徴はメモリの使い方にあります。

ですので、オブジェクト指向プログラミングがコンピュータの中でどのような仕組みで動くのか理解することは非常に重要であり、この本ではそれも体系的に学ぶことができます。

最後に

今回はプログラミングの初学者がつまづきやすい「オブジェクト指向」の理解の大きな手助けとなる書籍を紹介しました。

「ただただわかりやすく、必要な情報が網羅されている。」

これがこの本の最大の特徴であり、私がおすすめするポイントです。

本のページ数は約350ページありますが、文字も大きく図も豊富なので読みやすいと思います。

初心者〜中級者は必読レベルですね。