株式会社ラクスさんの主催する勉強会で「リーダブルコード LT会 - vol.3」というのがあったので、LT登壇してみた。
話したのは『オブジェクト脳への一歩』というLT。
オブジェクト指向の本はいろいろあるけど、一番の入り口である「処理から考え始めるんじゃなくて、データから考え始める」という部分に自覚的な本って見た記憶がないよなというのがモチベーション。 といっても、自分もこれに気がついたのは最近で、意識することなくいつのまにかオブジェクト指向的な考え方に慣れていたというのが実際のところ。 でも、ここに自覚的になれると、オブジェクト指向でプログラミングするってこういうことだったんだと一気に視界が開けるんじゃないかなと思う。
オブジェクト指向の本の話
ちなみに、「オブジェクト脳」という言葉を使ってる本といえば、コレ:
評判悪くない本なんだけど、自分が読んだときの感想は、たぶんこれ読んでもオブジェクト指向できるようにはならないよなぁというもの。
『アジャイル時代のオブジェクト脳のつくり方 Rubyで学ぶ究極の基礎講座』読んでるけど、これ、かなり微妙やなぁ…前書きで「よく分からなかった」という解説とあんま変わらないことしかやってないのはさすがにどうかと思う。
— やまいも (@yappy0625) 2017年7月29日
オブジェクト指向は、なんでそう書くのかという部分がないと、「で?」としかならないと思うんだけど。smalltalk型のオブジェクト指向じゃなくてc++型のオブジェクト指向を説明してるのもどうかと。継承も、下手すると実装の継承の乱用を生むから、あまり下手に説明すべきじゃないと思う。
— やまいも (@yappy0625) 2017年7月29日
あと、オブジェクト指向に関する有名な本といえば、コレ:
この本も割と残念というか、別にオブジェクト指向に限った話じゃないことをさもオブジェクト指向のおかげであるかのように話してたり、視野の狭さが気になった。
今度のLT会でオブジェクト指向の話をしようと思ってて、そういえば『オブジェクト指向でなぜつくるのか』って本があったなと読んでたんだけど、割とモニョる。。。
— やまいも (@yappy0625) 2022年3月5日
著者がオブジェクト指向の過大広告に対してモニョったように、この本を読んだ人が盲目的に信じてしまわなければいいんだけど・・・
いずれにしても、処理を中心に考えるんじゃなくて、データを中心に考えるんだという発想の転換が示されてないので、オブジェクト指向的な考え方に至らないんよね。
良さげな本で頭に浮かんだのはオライリーのHead Firstシリーズの『オブジェクト指向分析設計』だけど、今見返すと、うーん、ちょっと余分な情報が多くて読みづらいかも。絶版だし、Javaのコードも古くなっちゃってるからなぁ。
ただ、ユースケースをどう書いたらいいのかとか、そこからどう設計に落とし込んでいくかなど、学べることは多いと思う。 同じHead Firstシリーズの『デザインパターン』の本も悪くない(ただしこれも絶版だし古い)。
なんかいい本があるといいんだけど。 (自分で書くしかない?)
関数型とオブジェクト指向
ちなみに、最近はオブジェクト指向なんか古くて今は関数型だよ、という人がいるけど、それは全然オブジェクト指向を理解できてない。
関数型と対比されるべきなのは手続き型で、これらは計算モデルが違っていて、関数型はラムダ計算を基礎に持ち、一方で手続き型はチューリングマシンによる計算を基礎に持つ。
対するオブジェクト指向というのは、関数型、手続き型の両方の上位にある考え方で、関数型とぶつかるものじゃない。
実際、関数型言語であるErlangの開発者の一人であるアームストロング氏は、最初オブジェクト指向を批判したものの、のちに「Erlangこそオブジェクト指向である」と言っていたりする。
関数型言語でも、よく設計されたモジュールは、データの構造は隠蔽して、必要な関数のインターフェースだけ公開してると思うんだけど、それってCの時代の「いい作法」で、オブジェクト指向言語はそれを書きやすいようにしてるだけなんだけど、なんか誤解されてることが多いように思う。
— やまいも (@yappy0625) 2016年10月2日
Erlangの作者が、最初オブジェクト指向をボロクソに叩く記事を書いて、そのあと「Erlangこそ真のオブジェクト指向だ」(厳密に言うと、「OTPフレームワークの上に乗った」Erlangが、だと思うけど)と態度を改めたのとか、分かりやすいと思う。
— やまいも (@yappy0625) 2016年10月2日
Cに対するC++やObjective-Cのように、Erlangに対するErlang/OTPという関係があると思う。対立項は手続き型と関数型で、「いい作法」であるオブジェクト指向を書きやすくきたものが、それぞれの上に乗っかってる。
— やまいも (@yappy0625) 2016年10月2日
結局、いい設計になってるかどうかが肝心で、オブジェクト指向言語で書いていてもオブジェクト指向的でないゴミのような設計になってれば、当然分かりにくい。 それをオブジェクト指向のせいにしないでほしいなぁ。
今日はここまで!