やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

今更ながら「オブジェクト指向でなぜ作るのか」を読んだ

今年は昨年度と比べるとあまり技術書を読んでいませんでした。
というのも今年はとにかくコードを書くこと、実装をすることに重きを置いていたからです。ただ、最近、活字が頭にスッ...と入ってこないのを自覚しており、読書リハビリしないとダメだなと思っていました。
そんな中、いつものように書店を徘徊していると名著「オブジェクト指向でなぜ作るのか」と目が合いました。

何か運命的なものを感じたので、即購入しました。
しばらく積読していたのですが、先日から読み始めた所、内容が面白くて気づけば2日で読了していました。
今回は「オブジェクト指向でなぜ作るのか」の書評を書いてみたいと思います。

(ブックカバーは付けてもらう派です)

「楽をしたい」がオブジェクト指向へ発展した

オブジェクト指向と聞くと、Javaのようなクラスを定義する言語の 1 つのパラダイムであると認識していました。
しかし、書籍を読み進めると人によっては設計や思想までをまとめてオブジェクト指向であると考える人がいるということを知りました。 その場合、オブジェクト指向が指す範囲は非常に広義になってしまいます。

また、Javaの普及によってオブジェクト指向が一般的に知られるようになった頃のこと。
オブジェクト指向は「現実世界をそのまま表現できるもの」という解釈が、普及に共に広まったそうです。
今でも自分自身、その片鱗に触れることがよくあり、特に設計・モデリングのフェーズではオブジェクト指向で設計する...というような言葉を耳にします。

そのような認識の違いや背景があり、どうもオブジェクト指向は曖昧なものになってしまったようです。
しかし、元を辿れば「楽をしたい」という所からオブジェクト指向は発展していったと冒頭で語られています。

時代の変化(今と昔では条件が変わった)

今となってはハードウェアの性能も向上し、快適にプログラミングをすることができます。
しかし、ひと昔前はそうもいかず 1 バイトも無駄にできず、制約の多いハードウェア上での実行のためパフォーマンスが求められました。そのためスコープの大きい変数を再利用したり、ハック的なコードを書いていたそうです。
さらにソフトウェアの需要が高まり、長期的な保守や改修が必要になっていきます。
結果、分かりやすく再利用ができるコードが求められるようになり、オブジェクト指向が注目されるようになっていたそうです。 つまり、オブジェクト指向の登場は時代の必然だった...というわけだったんですね。

意外にもオブジェクト思考の登場は古く、1965年に登場したSimula67というプログラミング言語がクラス、オブジェクトという概念を用いたのが始まりだとされているそうです。

ja.wikipedia.org

以下のようにクラスが定義できるようで、これが1965年に登場した言語の文法とは思えません...。

BEGIN
  CLASS Person;
    BEGIN
      TEXT name;
      INTEGER age;

      Procedure Init(n, a);
        name := n;
        age := a;
      End;

      Procedure Display;
        OutText("Name: "); OutText(name); OutImage;
        OutText("Age: "); OutFix(age, 0); OutImage;
      End;
    END;

  BEGIN
    Person person;
    person.Init("John", 30);
    person.Display;
  END;
END;

「比喩が」混乱を招く

オブジェクト指向の書籍や解説には、よく動物などを比喩したものが多いです。
これはこれで分かりやすいのですが、比喩の印象ばかりが強くなってしまい、結局、オブジェクト指向で何ができるのか・何が便利なのかという最も重要な情報が薄れてしまいます。
そのため、書籍では比喩はあくまで比喩であり、まずオブジェクト指向とはプログラミング言語に関する便利なものという立場をとっており、読者の混乱を生まないような構成になっており、感心させられました。

先ほども記載したように、オブジェクト指向はまずプログラミング言語があって、より楽にソフトウェアを作れるようにという過程で生まれたものです。次に設計や思想という形で活用されるようになり、UMLやクラス図といったものが生まれて、そららも合わせてオブジェクト指向と呼ばれるようになっていたそうです。

勝手に対象読者

書籍のページ数・文字量ともに、ちょうどいい感じでした。
一週間もあれば読了できるボリュームだと思います。サンプルコードは少なく、本当に解説書という内容です。

おすすめできる人

  • プログラミング言語を1つは触ったことがある人
  • オブジェクト指向について背景から知りたい人
  • 原著や原典よりもオブジェクト指向の整理された情報を読み流したい人
  • 過去にオブジェクト指向を学んだものの、しっくりきていない人

おすすめできない人

  • プログラミング言語を触ったことがない人
  • オブジェクト指向について全く知らない人
  • 解説よりもサンプルコードを求めている人
  • ポリモーフィズムおよびデザインパターンについて詳しく知りたい人

最後に

読了してみて「オブジェクト指向でなぜ作るのか」を多くの方が薦めている理由が何となく分かりました。
内容がスッキリしていて、読みやすいのに対して、プログラミング言語の歴史といった背景の情報から、なぜオブジェクト指向が生まれたのか納得できる理由がまとめられているからです。
現代だとオブジェクト指向やデザインパターンといった既成の知識を先に習得するということが多いですが、やはり背景を知らないと、なぜ必要なのか・便利なのかといった判断をすることができません。

またオブジェクト指向の背景に集合の考え方があったのも面白かったです。
クラスというのは集合であり、インスタンスは要素である。スーパークラスは全体集合、サブクラスは部分集合である...という解説には納得しました。
他にも構造化プログラミング登場の話など、面白いトピックがたくさんあるので、ぜひ書籍を読んでみて下さい。

少しでも「ええな〜」と思ったらはてなスター・はてなブックマーク・シェアを頂けると励みになります。