🧩

オブジェクト指向入門書「なぜ、あなたはJavaでオブジェクト指向開発ができないのか」で学んだオブジェクト指向のオの字

2023/03/27に公開

業界のとある知り合いのベテラン実装者さんから以前からおすすめされていたオブジェクト指向をきちんと学びたいなと思い、ネットで調べた結果、入門書・初心者向けとして「なぜ、あなたはJavaでオブジェクト指向開発ができないのか」という書籍に辿り着きました。
https://gihyo.jp/book/2005/4-7741-2222-X

結論からいうと、最初に読む一冊としてとても分かりやすかったです!

今回は本書を読んでオブジェクト指向について分かったことをざっくりとまとめてみました。

本記事が「オブジェクト指向って何?美味しいの?」くらいのきっかけになれば幸いです。

オブジェクト指向 is 何

本書ではオブジェクト指向=ソフトウェアを効率的かつ楽に開発するために生み出されたものとして説明されています。

これだけではよくわからないと思うので、本書の内容からかいつまんで説明すると、オブジェクト指向は次のようなものだと考えられます。

  • 役割分担を明確にする
  • 自分(オブジェクト)に関する情報は自分(オブジェクト)で管理させる

またオブジェクト指向の対義語的な位置づけとして「手続き的型・構造化プログラミング」が挙げられています。

「構造化プログラミングってなんやねん」って思った方もいるかと思いますが、これを説明すると長くなってしまうので興味ある方は調べてみてください。

とにかくオブジェクト指向はその逆みたいなイメージです。

ただ本書でも説明していますが、構造化プログラミングは不要というわけではなく、
構造化プログラミングの延長線上にオブジェクト指向があります。

イメージ👇

この部分について本書で分かりやすく説明されているので引用します。

オブジェクト指向は手続き型・構造化プログラミングの延長線上にある技術です。逆にオブジェクト指向だけを理解していても、構造化技法を知らなければ、商用レベルのソフトウェアを開発することはできないでしょう。
今まで非オブジェクト指向によるソフトウェア開発に携わってきた人で、これからオブジェクト指向を学ぼうとする人は、「ゼロからのやりなおし」と考えるのではなく、「オブジェクト指向を身につければ、鬼に金棒!」くらいに思ってもよいのではないかと思います。

とても分かりやすい且つ安心する説明ですね。
レベルを上げれば「きのぼう」でもラスボスに勝てますが「メタルキングのけん」を持っていればもっと簡単に勝てるよ、みたいな感じですね。(違う)

なぜオブジェクト指向が必要なのか

結論からいうとソフトウェアは改良・変更が当たり前だから、です。

本書はJavaが前提なのでソフトウェアという言い方をしていますが、これはWebサイト・Webサービスなどにも当てはまることだと思います。
デザイン戻り・クライアント確認後の修正などが”全くなかった”案件は過去どれくらいあったでしょうか。業界4年目の自分でも、ぶっちゃけ1,2件くらいかなという印象です。

オブジェクト指向で作っていればそのような仕様変更をはじめ機能の拡張でなどにも柔軟に対応できます。

まとめ

この本では、

  • ジャンケン
  • ババ抜き
  • 七並べ

などを通して実践形式でオブジェクト指向を学んでいきます。

言語がJavaなのでそのまま応用できるわけではありませんが、考え方などを学ぶにはとても分かりやすいなと思いました。
最近だとChatGPTを使えば簡単にJavaをTypeScriptなどに書き換えることもできるかなと思うので、その辺も活用して少しずつオブジェクト指向で考えられるようになりたいです。

次は中級者におすすめの本として紹介されている「オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識」を読みたいと思います。

https://honto.jp/netstore/pd-book_30939063.html

こちらも初版は20年近く前ですが、昨年2021年に10年ぶりの改訂がされたということで、手元に持っておいて損はない一冊だと感じられます。

Discussion