インチキ「オブジェクト指向」に騙される前に読んでおいたほうがいい本

この記事はアドベントカレンダー向けに書いてます。

https://qiita.com/advent-calendar/2023/chouzetsu-book

# こういう経験あるよね
とある先輩プログラマが言っていた。
「オブジェクト指向というのは継承・ポリモーフィズム・カプセル化のことだ！」

また別のプログラマがこう言っていた。
「オブジェクト指向とはクラスの仕組みを使ってオブジェクトを操作する言語の分類だよ」

ちなみにWikipediaにはこう書いてある。
>オブジェクト指向（オブジェクトしこう、英: object-oriented）は、ソフトウェア開発とコンピュータプログラミングのために用いられる考え方である。

それぞれの言い分は「オブジェクト指向は(テクニックの総称|プログラミング言語の分類|考え方)だ！」というわけである。細かいニュアンスはおろか対象すらばらばらである。
実際のところ自然言語の妙によって、それぞれはオブジェクト指向に関連する「何か」について説明している。
ではオブジェクト指向とは何か？
彼らが思い浮かべている「何か」を逆に辿ればどのような定義になるだろうか？

# 今回紹介する本

https://gihyo.jp/book/2022/978-4-297-13234-7

田中ひさてる氏の書いたこちらはアキバのatreでオタクグッズの景品目当てで買ったものだったが大当たりの本だった。題名にPHP、と入ってはいるがあくまでサンプルコードがPHPだというだけで本質的には同機能を備えたあらゆる言語に活かせる。いわゆるオブジェクト指向言語を使っている私にとって大いに参考になる本だった。
かわいい表紙だからといって侮るなかれ。
以下にどうオススメか列挙していく。
### 1.わかりやすい
第一章の「クリーンアーキテクチャ」から始まり、望ましい設計について広く抽象的なものから狭く具体的なものに向けて筋道立てて解説されている。
大局的にはこういう構造にあるべきだ、なのでより細かいパッケージ単位ではこのような取り回しができるべきだ、そしてそのパッケージの中身たるオブジェクトはどうあるべきだ、さらにその具体例であるデザインパターンでは……といった具合だ。

実際ネットで調べ物をしているときに出てくるテクニックや機能なんていうのは狭く具体的なもので、しかし背景がわからないので「そういうもの」として理解しがちだ。
この本を読めばそのあたりの背景を補強しそれらテクニックを理解するための下地をつくってくれる。
納得して読み進められる。

### 2.語彙が身につく
「ちょこっとロジックいじりたいだけなのに連動して一緒に変更しないといけないファイルが複数にまたがってて編集が面倒だし変え忘れがないか不安になるようなつくり」のことを凝集度が低いという。

「ライブラリっていう名前がついてるプロジェクトなのにめちゃくちゃ更新が入るところの処理に直接依存しててなんかキショい」という状態について安定依存の原則に反しているといえる。

DRYとかSOLIDとかのなんか聞いたことのある用語をはじめ取りこぼしていたいくつかの用語を解説してくれているので単純にタメになる。
そしてそれが「どういう構造であるべきか」の文脈で解説されるので人と構造について議論するときにも役に立つ。
このあたりは明文化して説明されることも少ないので直感で考えがちなところではあるが、用語とその意義が共有されることでより有意義な議論になる。

「ここなんかキショくない？」
「いや自分は違和感ないけど……」
↓
「これ全再利用の原則に反してない？」
「いや、ここを疎結合にできない作りになってて」
「ここは依存性逆転使えばいいんじゃないかな」

### 3.誤解が解ける
ネットに転がっている話というのは疑ってかかるべきだ。
とあるネット掲示板の管理人も「うそはうそであると見抜ける人でないと(掲示板を使うのは)難しい」と言ったという。
ただし本当だと思いこんで発信された情報を見抜くのは難しい。
ただしこの本ではそういったありがちな用語の誤用、あるいは意味が変容した用語についてどういった文脈があるのか解説されておりこの意味のブレによる混乱、誤解を防ぎ、そして解いてくれる。
そのうちの一つがオブジェクト指向についてだろう。
本書にはこうある。

>「筆者の主張は、オブジェクト指向を定義することはできないということです。」 p38

この文だけを読むと"逃げ"に感じるかもしれないが、後に続く言葉を尽くした解説を読めばこの上なく真摯な回答だと思うはずだ。

### 4.Web開発文脈が大まかにわかる
私は個人ゲーム開発をしているプログラマである。
しかしプログラミングの世界とは広いもので、何を開発するかによってその流儀は大きく異なる。
プログラマなら当然知っているべき！　のような文句で書いてあるブログ記事が実はウェブ開発者向けでゲーム開発には全く縁のないもの、というのはよくある話だ。
ただしWeb開発とゲーム開発にどのような違いがあるのかを知らなければここの判別がつかない。
DIは話に聞いたことがあったが、どのように使えばよいのかいまいちピンと来ていなかったがこの本を読んだらどうやらPHPにはDIコンテナがあるらしい、ということに気がついた。だから他の言語で使えないというわけではないのだが、Web系技術記事の前提としているDIの注入数、そしてそれが変わる頻度、呼び出される実行速度などが微妙に今の自分とはずれてはいるのだと気づけた。そうするといままでDI系の記事を読んでいたときにあった微小な違和感をなくして読むことができるようになったのだ。

Web系記事が前提としている文脈が大まかにわかると検索効率、とくにいらない情報を除くのに役立つ。
だからPHPに関係ないプログラマでもPHP前提の章は読んでおくべきだと感じた。

### 5.挿絵がかわいい

https://twitter.com/tanakahisateru/status/1702943527318307310

本書には5人の登場人物がいる。
新人としての役割付がされているくるみクン
そこそこできるプログラマとしてのそけっとさん、ゆにっとさん
熟練プログラマとしてのこみっとさん
そして寡黙そうなジト目のストレートロングでしばしば画面端にいるマスコット的立ち位置で表紙でも大きく全身が写っているこの本を代表すべきキャラクターであろうめもりーちゃんだ。
最初数ページだけまんがチックにストーリーが読めるが、本編ではリーダブルコードじみた頻度で一コマ漫画が差し込まれる。しかしそれだけでも人間関係がよく見える。

個人的に好きなのはこみっとさんとめもりーちゃんだ。

こみっとさんは上司っぽい立ち位置で柔和な雰囲気を出しつつも合理的に物事を推し進めてズバズバ言うめちゃくちゃ頼りになるしデキるエンジニアという感じが出ているが時々ロジハラになりそうだなあという"強さ"が癖だ。すごくいいと思う。設計の甘いところを無感情に指摘されて尊厳破壊されつつ、先程までの嵐のようなダメ出しとは打って変わって柔らかな表情で家で飼っているペットの話なんかをふられてその無意識の飴と鞭で懐柔されたい上司No.1にランクインする。

めもりーちゃんはその美しく整った姫カットを振りまきながら猫のように自由に生きていておいてほしい。彼女がそこに存在するという事実が空間の幸福度を上げると思う。口数が少ないというわけではないが、口調が堅めで口も常に小さくしか開かない。そんな彼女がときおり笑ったりするのを見て、しかしその笑顔が向くのは良きプログラム構造とか猫とかだけで、自分という人間に対して真正面に与えてくれることはないのだろうなあということを考え無性に寂しい気持ちになる同僚No.1にランクインする。

これらのキャラクターたちが、ソフトウェア設計という専門性高めな話題を通してわいわいと話したり、例え話で戯れたり、新人を生暖かく見守ったり。ほのぼのとした、それでいてくるみクンの成長もちょこっとばかり感じられるような自分の好きなタイプの作品だ。
ということで、この本は行間多めでいろいろと想像の余地を残してあるがきららのような感覚で読める（あくまで個人の感想です）。
なのでこの記事は「技術書界のきららことちょうぜつソフトウェア入門を読もう！」というタイトルで……
あれ、タイトル間違えたか？