第2版を読んだ感想オブジェクト指向本感想文本の紹介なぜ読もうと思ったか私は情報系大学の3年生で、趣味でUnityを使ってゲーム開発してます。オブジェクト指向の存在と、「カプセル化」「継承」「ポリモーフィズム」の3要素についてはなんとなーくしかわからないような人です。以前は、とにかく沢山アウトプットすることを重視してポチポチ作っていました。́·ω·`)と思い、ひとまず勉強してしっかりインプットすることを決意しました。アウトプットはしっかりインプットした後にすることにします。オススメされた2冊の技術書を借り、読むことにしました。前から読みたかった本ですが、やはり本というのはいつまでに読むか決めて一気に読まないとダメですね。第2版」、「リーダブルコード」です。第2版(以下、本書)」の読書感想文を書きました。本記事はネタバレを含みます。ミスリードしていたらこっそり教えていただけると幸いです。読み終わって、読み終わる前よりずっとオブジェクト指向のかんじが掴めましたし、好きになりました。バラバラだった知識が整頓されていく感覚がありました。この本は時間をかけて読んで良かったです。最初に、紹介する用語や概念は最小限にすること、比喩の使用も最小限にすること、プログラミングの仕組みと、「モノ中心」で汎用的に物事を捉える考え方は別物として分けることを方針とする説明をしてくれる章です。最後まで読み切ろうと思えました。オブジェクト指向と現実世界は似て非なるものオブジェクト指向は現実世界の全てを再現するわけではない、という話をする章です。現実世界とソフトウエアの仕組みは大きく違うということを、再三言われます。OOPを理解する近道はプログラミング言語の歴史にありOOPというのはオブジェクト指向プログラミングのことです。OOPは無駄を省いて整理整頓するプログラミング技術この辺までは授業で習って覚えてるとこです。継承は最近ほとんど使ってませんでした。思ったら、Unityの場合はMonoBehaviorがデフォルトの継承元なんですね。言われてよく考えてみると、Photonを使った時に使ってました。継承は、ゲームだと色んなプレイヤーや色んな敵、色んなアイテムが出てくる時に使えるようです。メモリの仕組みの理解はプログラマのたしなみでたこれ、メモリ。おまえさんはよくわからんやつでした。読んだおかげで、メモリの仕組みを全体的に理解できた気がします。ポインタは、情報の住所という意味らしいです。OOPがもたらしたソフトウエアとアイデアの再利用デザインパターンが何奴なのか知ることができました。23のGoFのデザインパターン、パターン名がかっこよいです。これ使ってプログラム組んで、クールになりたいですね。フレームワークとクラスライブラリは、どちらも再利用可能なソフトウエア部品群を指しますが、クラスライブラリはOOPの仕組みを利用して作った再利用品、フレームワークはたんにOOPの仕組みを利用して作ったライブラリというだけでなく、特定の木底を果たすためのアプリケーションの半完成品を指すそうです。ちなみにゲームエンジンはWikiによると、コンストラクションキットやオーサリングツールに近いレベルまで、開発作業が汎用化されたものを指し、フレームワークとは区別されるそう。具体的にどうコード組むかは、経験積んでくしかなさそうです。Unityの設計に関しては、大変参考になりそうなスライドがありました。具体的なコードも交えてのお話なので、すごく良いです。汎用の整理術に化けたオブジェクト指向ちょっと技術のお話から脱線して、歴史のお話でした。上流工程:整理術(汎用の整理術)の面では、OOPの都合のいいところだけ利用します。クラスライブラリ、フレームワーク、コンポーネント、デザインパターン、UML(これは整理術も)、オブジェクト指向設計は、いずれもOOPの拡張に属するようです。整理術のコンセプトは、集合論と役割分担です。ここでは抽象的な話ができます。集合論は、人間クラスの男クラスと女クラス、男クラスの太郎さん、次郎さん、三郎さん、というような話。役割分担は、お客さん→ウエイターさん→コックさんの順でメッセージが送信される、というようなお話です。オブジェクト指向の全てを現実世界に例えると、わけわからんになってくるので、工程によって変えていくと良いというお話でした。UMLは形のないソフトウエアを見る道具UMLは、自然言語(文書、会話)とコンピュータ用言語(プログラミング言語、マークアップ言語)の欠点を補うための言語(モデリング言語)だということが書いてありました。UMLにすると、デザインパターンが使われているのがよくわかります。現実世界とソフトウエアのギャップを埋めるモデリングここでのモデリングは、UMLを使ってソフトウエアの機能や内部構造を2次元の図で表すことを指します。業務分析:現実世界の様子をそのままとらえる要求定義:コンピュータの性質を考慮して、肩代わりさせる仕事の範囲を決める設計:ハードウエアの性質を考慮して、肩代わりさせる仕事の範囲を決める。基本情報の授業でちょっと見たことがある図が沢山出てきました。ユースケース図とか、概念モデルとか。オブジェクト指向の応用編です。時代は、実行効率より、保守性と再利用性だ!そうです。1)重複を排除する2)部品の独立性を高める3)依存関係を循環させない前にこの2,3がダメで〆切前夜のバグに苦しめられた過去があります。したソフトウエアの設計には、具体的なテクニックとある種感覚が必要らしく、タイトルの擬人化とは、この感覚をもつために、ソフトウエア部品を擬人化してイメージしてあげると、独立性を高めることができるという話からきているようです。オブジェクト指向から生まれたアジャイル開発とTDDTDDはテスト駆動開発のことです。アジャイル開発やTDDは、オブジェクト指向から生まれています。万能の開発プロセスはないので、プロジェクトに状況に合わせて先人たちの知恵を参考に実践していこうというお話でした。オブジェクト指向を使いこなそうこれまでのまとめの章です。「オブジェクト指向はソフトウエアを開発するための便利な道具であり、先人の知恵が詰まったノウハウ集」です。関数型言語でなぜつくるのかオブジェクト指向言語と異なるアプローチをする関数型言語のお話です。みんな違ってみんないい。用途に合わせて使い分けましょう。