「オブジェクト指向でなぜつくるのか」読書ログ
「オブジェクト指向でなぜつくるのか」を読破したので読書ログを残します.
一章はオブジェクト指向の全体像です.さっと読んだのでログなしです.
オブジェクト指向でなぜつくるのか
— kanekou@ハッカーズチャンプルー (@kanekou8) January 14, 2021
読み始めた #読書
第二章から
オブジェクト指向と現実世界は似て異なるという主張.
最初から面白いw pic.twitter.com/O3JxsaiN1n
第3章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 14, 2021
OOP以前のプログラミング言語について解説
構造化プログラミングの功績と問題点について
グローバル変数は確かに厄介,使わない(自戒 pic.twitter.com/qy2dkVH9K5
4章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 15, 2021
OOPの概要
クラス,ポリモーフィズム,継承を使うことで無駄を省き,保守性と品質,再利用性を向上させる.
OOPの例外処理と比較して,Golangはいちいち書かなければならないイメージがあるのだけど,どのような思想を持ってるのだろう.
ポリモーフィズムは変更しづらいイメージ. pic.twitter.com/5W8nMjtmie
5章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 16, 2021
メモリの話.
OOPの仕組みの中でメモリがどのように使われているか.
静的領域,ヒープ領域,スタック領域をどのように使ってメモリを節約しているのか学んだ.
Javaがメモリの観点から優秀ということがわかった.
今までで一番面白い!
メモリの気持ち完全に理解した. pic.twitter.com/f57NDJcK9h
6章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 16, 2021
ソフトウェアとアイデアの再利用について
OOPがもたらした再利用技術
- 再利用部品群
- デザインパターン
これらが相互に発展し合っている
デザインパターンは当たり前のように使われているけど,OOPの発展によって生み出された考えだったのか pic.twitter.com/UVbvAL76cs
7章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 16, 2021
情報の整理術
オブジェクト指向は情報の整理に長けており,集合論と役割分担に応用された.
一方で,ソフトウェアは現実世界の仕事の一部を表現するだけなので,「現実での出来事をまるっとオブジェクト指向で表現できる」というのはナンセンス
なるほど,OOPの表現力に期待しすぎたのか pic.twitter.com/UCBiop0wBF
8章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 16, 2021
UMLについて
形のないソフトウェアをみる道具であり,視覚的に情報を表現するため論理的かつ直感的である
「テロリストとは交渉できるが、メソドロジストとは交渉できない」w
シーケンス図,どういう図なのか知らなくても直感的にわかるのでスコい pic.twitter.com/D4KtAIwSJp
9章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 17, 2021
モデリングについて
ソフトウェア開発には必要なステップがある.
- 業務分析
- 要件定義
- 設計
それぞれで使われるUMLを紹介.
現実世界の出来事をソフトウェアに落とし込むの楽しそう.実務で経験したい. pic.twitter.com/XkGEPptx6n
10章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 17, 2021
設計について
設計には保守性と再利用性を担保する必要がある.
そのために3つの目標を定める
- 重複を排除する
- 部品の独立性を高める
- 依存関係を循環させない ←あまり意識してなかったので知見を得た pic.twitter.com/Q1KvOMUlel
11章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 17, 2021
開発手法,特にアジャイル開発について
OOPと直接的な関連はないが,相性の良さと作った人たちの関わりが強いらしい
XPは4つの価値を導入してプログラマーに支援されたらしいが,それまでペアプロやリファクタリングがタブーとされてきたことにびっくりw しかし当時のPCリソースの話で納得した. pic.twitter.com/LClUvMTJkq
12章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 17, 2021
オブジェクト指向のおさらい
大事なこととして,オブジェクト指向はあくまで手段であり,目的は「高品質,保守性,再利用性に強いソフトウェアを作る」ということ.
オブジェクト指向はブームで終わらず今後も使われる考えなので,理解しとくべし pic.twitter.com/eN4WbMUd2y
GolangやHaskellと言った言語が台頭してるのをみて,今後オブジェクト指向は衰退していくのかな...?と思った.今後出てくる言語はどのような思想を持つんだろうな〜
— kanekou@ハッカーズチャンプルー (@kanekou8) January 17, 2021
13章
— kanekou@ハッカーズチャンプルー (@kanekou8) January 19, 2021
関数型言語
命令型言語とはパラダイムが全く異なる.
引数と戻り値を使って情報を受け渡すことでグローバル変数問題に対応し,独立性,再利用性を担保する.
知的好奇心をくすぐられる内容だった!
カリー化完全に理解した.
haskellかscala触りたい. pic.twitter.com/OYnubjGlaA
参照透過性が担保されてるが故に遅延評価ができるって仕組み,考えた人しゅごい
— kanekou@ハッカーズチャンプルー (@kanekou8) January 19, 2021
あとがき
— kanekou@ハッカーズチャンプルー (@kanekou8) January 19, 2021
技術を学ぶ上で大事なのはknowwhat, knowwhyである.
使い方を学ぶだけじゃなく,本質を理解することが大事..!
胸に刻んでいきたい. pic.twitter.com/hH3buXkPUX
感想
オブジェクト指向について,何となく理解しているようでしていない状態から
を知見として得ることができました.
特にポリモーフィズムに学べたのが大きいです.
著者はOOPが説明の際に現実世界に例えられることに対して「現実世界とソフトウエアにはギャップがある」と一石を投じており,現実世界との違いをわかりやすく説明しています. また仕組みだけでなく「なぜ,オブジェクト指向である必要があるのか」という本質的な部分について重点的に解説しており,何となくOOPでプログラムを書いている人にお勧めできる本です.
個人的にはメモリの視点からOOPを眺める5章,関数型言語について書かれた13章が知的好奇心をくすぐられて面白かったです. 関数型言語の概要は,授業でも掴みきれなかったにもかかわらずこの本を通して全体概要を理解することができました.