---
# System prepended metadata

title: 'オブジェクト指向でなぜつくるのか １章:オブジェクト指向はソフトウエア開発を楽にする技術・２章：オブジェクト指向と現実世界は似て非なるもの'
tags: [オブジェクト指向でなぜつくるのか]

---

オブジェクト指向でなぜつくるのか １章:オブジェクト指向はソフトウエア開発を楽にする技術・２章：オブジェクト指向と現実世界は似て非なるもの
===

###### tags: `オブジェクト指向でなぜつくるのか`

# 当日までにやること

- 第１章、第２章を全部読む
- 感想や気付き、質問を下に用意した記入欄に書き込む

# 参加の仕方

- マイクはいつでもONにして、話に参加して結構です。
- テキストチャットでも、コメントとかするなりしてもらって大丈夫です
- 聞いているだけの方もOKです

# ディスカッションをより豊かにするためのグランドルール

- フィードバックを恐れない
    - マサカリは怖いと思いますが、アウトプットからのフィードバックを受け、学びを深めていきましょう
    - アウトプット7割：インプット3割の気持ちで臨みましょう！
- 経験の有る無しは気にしない
    - 堂々と意見や疑問を語りましょう
- 話していない人が、率先してメモしましょう
    - このHackMDはみんなのものです。どんどん書いていきましょう
- 気になる質問や同感するものには :+1: を末尾につけてください。


## 下に感想などを書いていって下さい。どんな些細なことでもOKです。

---


# 1章 オブジェクト指向はソフトウエア開発を楽にする技術

## ウォーミングアップ
### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||ダイナブック構想|「対話型インターフェース（GUI）を搭載し、子供でも扱え、片手でも持ち運びが可能であり、低価格なパーソナルコンピュータ」|

---

## オブジェクト指向はソフトウエア開発の総合技術＆モノ中心にソフトウエアを組み上げる開発手法

### 感想・気づき

- 「機能開発中心」の開発手法=仕様変更や機能追加が起きた場合の修正範囲が広範囲になりやすい（p20:21）
    - 要望として上がってきた時点での機能専用で作ったらそうなる。実際にアイドマのサービスで体験しているから腑に落ちる笑気をつけよう。
        - そこだけの機能として全部の開発を行うものを、機能中心
            - 共通化とかしていないから、修正範囲が大きくなりやすい。
- オブジェクト指向はソフトウエアの保守や再利用をしやすくすることを目的とした技術
    - この本の前半主題
- 個々の部品により強く着目し、部品の独立性を高める（p20:24）
    - 一見再利用する必要が無さそうな部品でも切り離すことで、結果として再利用すべき部品の独立性を高められるから、部品ごとの独立性を高めることは大事なこと。
        - 全部を再利用する必要があるのか？
            - 全部を再利用するかどうかは、このあとでてくるんじゃない？
    - 修正が起きた場合の影響範囲を最小限
        - 独立性を高めても影響範囲は変わらない？


### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|





---

## プログラミング言語から総合技術に進化した＆混乱したまま理解しようとするから難しく思える
### 感想・気づき

- OOP=ソフトウェア開発全体を円滑に進めるための総合的な技術
    - 前提の認識からずれてた。設計手法だと思ってたけど、設計手法なども含めたもっと幅広いものなのか。
        - オブジェクト指向 ==> OOP

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
|22| OOP | オブジェクト指向プログラミング(object-oriented programming) |
|22| デザインパターン | OOPを利用する中で先人達が苦労した内容とそれの解決策集、デザインパターンとは、JavaやRubyなどのオブジェクト指向の言語で使われる設計パターンのことです。 |
|22| UML | OOPを利用する中で構造や頭の中を図式化するもの https://qiita.com/github129/items/80d39f2f043489033076| 
|22| モデリング | UMLの上流版？ |

---


## 混乱その１ー用語の洪水＆混乱その２ー比喩の乱用
### 感想・気づき

- 用語の洪水
    - 初めて聞く単語が多くて取っつきにくいのはある
    - でも、難しい単語とかが出てくると、勉強のモチベーションは高まるし、分かってる人同士だとコミュニケーション楽なのかなとも思う
        - お互いの認識がズレているが確認できない
    - ただ、理解するという面では少ないに越したことはない気がする

- このように用語の多さ自体は、技術の広がりからして、ある意味では仕方ない(p24:22)
    - 海外で盛んな技術だからある程度はしょうがないよねってこと？

- 比喩だけが強烈な印象として残ってしまい、実際の仕組みは聞く側の思い込みで間違って解釈されてしまう(25:14)
    - OOPに関わらず、あらゆる場面で陥ってしまわないように注意したい


### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
|24| 辟易(へきえき) | 尻込みしてしまうこと |

---

## 混乱その３ーなんでもオブジェクト症候群＆３つの混乱が難しさを増幅する
### 感想・気づき

- 現実世界をそのままプログラムとして表現できる(26:1)
    - 現実世界と重ね合わせているイメージ

- なんでもオブジェクトであると説明できてしまう(26:8)
- 「現実世界がオブジェクトで成り立っているように、オブジェクト指向ではプログラムもオブジェクトを中心に作る」といった風に、実際には異なる対象を「オブジェクト」という1つの言葉で説明するのを...(26:15)
    - 違うんだ、、、基本的に全てのことをオブジェクトとして捉えられる単位で分割して行きながら進めるものだと思っていた

### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## わからないから神秘的に思える＆３つの混乱を取り除けば真の姿が見えてくる
### 感想・気づき

- 理屈で説明できないことなど１つもない(28:最終行)
    - OOPの勉強で挫けそうな時に思い出そう。

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

# ２章 オブジェクト指向と現実世界は似て非なるもの

## ウォーミングアップ

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
|34| 喧伝(けんでん) | 盛んに言いふらすこと |
|| オープンシステム | 様々な開発元のソフトウェアや機器を組み合わせて構築されたコンピュータシステムのこと |
|| ダウンサイジング | 情報システムを大型コンピュータから複数の小型コンピュータの組み合わせによって置き換えること |
|| マルチメディア | 複数の種類の情報をひとまとめにして扱うメディアのことである。 一般的には映像や音楽など動的コンテンツを含むイメージで捉えられることが多い |

---

## 概念だけ理解しようとすると混乱しやすい＆オブジェクト指向を現実世界に対比して説明する

### 感想・気づき

- 「コンピュータの中で営業員オブジェクトと顧客オブジェクトが交渉して、商品オブジェクトを売買する...」(35:5)
    - まさしくこんな風に考えていた。上記のように考えないとしたら逆にどう考えればいいんだ、、、
        - オブジェクトの単位の分け方的な考え方？あとで出てきそう

- 全てを現実世界に当てはめて概念的に捉えようとするとよくわからない技術に思える(35:9)
    - そうは思えなかった。むしろ分かりやすく感じていた。
    - でもそれだと実際に業務中に使おうとすると、全く通用しない。
    - 実使用を考慮せず、どんなものかを浅く理解しようとしてるから、全てを現実世界に当てはめて考えるものだとする方が手軽で都合がよかったのか。
        - 概念って必要？目的がわかれば良い？
        - オブジェクト指向自体が、人によってかなり違う
    - 現実世界に当てはめることが、概念を理解する上ではやりやすかったのだろうが、実運用の面では理解だけで目的が抜けている点が多い。
        - オブジェクト指向をどうやってソースに落とし込むのか？
- オブジェクト指向三代要素と呼ばれる...
    - この３つしっかり説明できる気がしない・・・
        - 存在は知ってる。（それぞれがどんな効用をもたらすか知らない。）
### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## クラスは種類、インスタンスは具体的なもの＆ポリモーフィズムはメッセージの送り方を共通にする
### 感想・気づき

- ポリモーフィズム(39~)
    - これは、具体例のおかげで分かりやすかった
    - 抽象クラスは、状態の定義のみを行う
    - 実際に動作させるのは、抽象クラスを継承した、クラスに任せる
        - interfaceがこれにあたる。
            - そこにあると確約される
                - 再利用性があがる
- 数学の集合論における集合と要素に相当すると言ってもいいでしょう。
    - インスタンスUクラスって感じか。クラスに具体性を持たせたものがインスタンスって考えがしっくりくる。
- 類似したクラスに対するメッセージの送り方を共通する仕組み
    - なく声は、インスタンスそれぞれにしろ、cryっていう命令自体は共通化させる仕組みか。

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---


## 継承は共通点と相違点を体系的に分類して整理する＆オブジェクト指向と現実世界は似て非なるもの
### 感想・気づき

- 聞く側は実際にプログラムを作る上で何がどう便利なのかを理解できずに終わってしまう
    - そうなってしまうのは怖い
    - 説明自体に明確な目的がないのが原因

### 疑問

- OOPを用いてプログラムを作る上で何がどう便利なのかを理解できずに終わってしまう状況に陥らないためにはどうしたらいいのか
    - OOPの理解を深めることが大事だと漠然と認識しているが具体的に本を読み進める時にどのような意識で読むべきなのでしょうか
        - 実際にコードに落とし込む段階ではなくて（オブジェクト指向で描くメリットを意識すべき）

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 現実世界の人やモノはクラスから作らない＆現実世界の人やモノはメッセージだけで行動しない
### 感想・気づき

### 疑問

- 実際の業務で使われているシステムはもっと複雑なため、OOPの考え方に落とし込むことが難しいのですが、どんなことを意識するべきか
    - 個人的に必要かな思っているもの ・OOPの理解・業務の理解・要件の理解
- インスタンスは唯一のクラスに帰属する...
    - これって現実世界でも、抽象度をあげれば同じことなんじゃない？人間クラスはいつまでたっても人間クラス

- メッセージパッシングの仕組みも現実世界をそのまま...
    - 確かにこれはやりすぎている。けど、命令ではなくアクションと思えばさほど違和感がなかった。

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## プログラミングのための仕組みと割り切って理解する
### 感想・気づき
- プログラミングのための仕組みと割り切って理解する
    - そもそもそこまで現実世界と異なっていると感じていなかった
    - 著者の言っていることが言い過ぎな気がする。確かに現実世界のことを丸っと置き換えられる訳ではないが、現実世界と重ね合わせられると感じる部分はあると思った。

### 疑問

- なぜ、入れ子構造の内側ほどデータ保持の期間が短くなるのか

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
|47| サブルーチン | ◆プロシージャ<br>複数の処理を一つにまとめたもの。<br>ーメインルーチン … メインの処理<br>ーサブルーチン … メインルーチンから呼び出される処理（関数切り出し時の切り出される側？）<br><br>◆ライブラリ<br>プロシージャのうちサブルーチンのみを集めたもの<br>https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11138567821|
|47| ヒープ | 山積み |
|  | スタック | 積み重ね |
|47| ヒープ領域 / （スタック領域） |コンピュータープログラミングにおいて、動的に確保・解放を繰り返せるメモリ。（実行結果などを一時的に保持して置く場所？）プログラムの実行時には、OSからソフトウェアに対して一定量のヒープ領域が与えられる。<br><br>◆スタック領域<br>- 確保したのとは逆の順番で解放する<br>- A、B、Cの順に確保した場合、解放するのはC、B、Aの順<br>- ソフトウェアが任意に確保と解放を決められない<br>- 管理○柔軟✖️<br>- 「入れ子構造」で多く使われる。入れ子の内側ほどデータ保持の期間が短くなるので、スタック領域との相性が良い。<br><br>◆ヒープ領域<br>- 任意の順序で確保・解放する<br>- 確保・解放の順番を、ソフトウェア側で自由に決められる<br>- どのくらいのデータ領域が必要なのか分からなくても、ソフトウェア側が必要に応じて対応できる<br>- 管理✖️柔軟○<br>https://it-trend.jp/development_tools/article/32-0041#chapter-2
|

---

## そもそもソフトウエアは現実世界をそのまま表現しない＆現実世界と似ていることが可能性を広げた
### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
|49| 渾然一体(こんぜんいったい) | いくつかのものが溶け合って区別がつかないさま |

---
## 本章のふりかえり
### この章で一番大事に思ったことや学びになったこと

- OOPがオブジェクト単位に分割していくものではないというのが衝撃だったと同時に、じゃあどうやって考えていくのという疑問も生まれたので読み進めながら解決したい。
- 今回ここに書き込むために、本に感想などを書きながら進めていく手法を用いたが、実際に著者と話しているみたいに読み進められて楽しかった。個人的によかった。


---


# 3章 OOPを理解する近道はプログラミング言語の歴史にあり

## ウォーミングアップ

### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||構造化言語|文書の意味を構造として明示する言語（HTML・XML・YAML）|
||構造化プログラミング |基本さん構造(if・each・順次進行)で記述されるプログラミング|



---

## OOPは必然性を持って登場した

### 感想・気づき



### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||





---

## 黎明期には機械語でプログラムを書いていた

### 感想・気づき
- こうした機械語を使いこなせる、ごく限られたスーパープログラマだけが...
    - 確かに２進数をつかってコーディングしろってなったら９割がプログラマになれないで、のこった１割がスーパープログラマになれそう
    - 生まれた時代が今で本当に良かった

### 疑問
- コンピュータは２進数で書かれた機械語しか解釈できません
    - これは今も一緒？なぜ２進数にしか対応させないのか。
    - http://seskillup.jp/computer-2sinsuu/
        - ２種類の方が明確に分類できるから
### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||


---


## プログラミング言語の最初の一歩はアセンブリ言語

### 感想・気づき


### 疑問
- アセンブリ言語では、無機質な機械語を人間にわかりやすい記号に置き換えて表現します。
    - ２進数ー＞言語ってこと？

- プログラムを作る仕事もまた、コンピュータを使って楽に行おうとした
    - 最終的に0/1にコンパイルする必要があるんだから、文字列を0/1に変換した人たちがいるって事？

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||


---

## 高級言語の発明でプログラムはより人間に近づいた

### 感想・気づき


### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 分かりやすさを重視する構造かプログラミング

### 感想・気づき
- ロジックを順次進行、条件分岐、繰り返しの3つの構造だけで表現する
    - ようはこれだけで、ほとんどのシステムが成り立つんだね！

### 疑問
- プログラムをわかりづらくしている元凶であるGOTO文
    - ほんとにわかりづらい？処理フローが明示されているだけいい気がした（使わないが）
    - 関数内の任意の位置に飛べたり帰ってきたりできると、1つの関数の中で、行単位で、複数の関数と密結合になってしまうから変更する際に分かりづらいって事？
    - 今の言語は、関数単位で結合してるからまだ修正範囲が分かりやすいのかな
        - 上に戻る、っていうのが、既存の処理を邪魔する可能性

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## サブルーチンの独立性を高めて保守に強くする

### 感想・気づき
- サブルーチンの独立性を高める方法は、...
    - これはその通り。グローバル変数やSessionを共有した途端、既存の処理からは呼び出しにくくなる。独立性＝呼びやすさといっても過言ではない。
- しかし変数はプログラムのどこで参照されているのか...
    - これを防ぐための仕組みが変数スコープだと思う。けどそのスコープが長すぎても同様の問題が起こる。
- なんらかの事情でグローバル変数を変更する場合には...
    - 結局これ、グローバル変数が絶対悪とは言わないが、それを用いているルーチンがある限り、グローバル変数を不変なものとして扱わざるを得ない
- ローカル変数はサブルーチンの中だけで使われる変数
    - これが独立性の鍵！
- メインルーチンとサブルーチンで共有する情報を少なくする事
    - 結局グローバル変数を参照してたら、情報の数って関係ない気がする

### 疑問
- たんに同じ並びをもつ命令文を１つにまとめるだけでは
    - 共通処理ではないけど、同じフローででてるからまとめるっていう考えはOUTってこと？
        - 拡大解釈。そういうわけではなくそれだけでは不十分ー＞独立性を高める必要がある。

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## GOTOレスプログラミングを実現する構造か言語

### 感想・気づき

### 疑問
- 言語コンパイラを改良しなくても、言語仕様レベルの機能追加ができるようになった
    - ライブラリで作ると言語コンパイラの改良がいらなくなる理由が分からない
    - どちらにせよ、コンパイルされてるから一緒な気がする

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 進化の方向性は保守性と再利用性重視に変化した

### 感想・気づき
- 進化の方向性は保守性と再利用性重視に変化した
    - いままでの進化は、人間が見やすいようにする進化・できる範囲の進化。その上で次の段階がこれ。実装可能性はいまや無限大で、いかに、保守性を高められる言語なのかを各言語競ってる感じ。
- 自分のかいたプログラムが修正を加えて使い続けれることなど想像を絶する出来事だったのではないでしょうか？
    - 今は甘くみているけどこれはある。俺のコミットが20年後も残っている可能性を考慮したコーディングを行う。
    - 自分も意識していこう

### 疑問
- プログラムの寿命が最初の想定よりも長くなったことがあります。
    - 最初の想定との乖離ってどれくらいなんだろう？
### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---


## 残された課題はグローバル変数問題と貧弱な再利用

### 感想・気づき
- プログラムのサイズがおっきくなればなるほど、このグローバル変数の問題は...
    - これはそうなんだよね。別ファイルで定義された変数をも参照しなければならない場合なんかは実在する。ドキュメントでは賄いきれないけど、グローバルに保つ情報ってどうすればいいんだろ。
    - vueのstoreみたいに、集約してsetter/getterを通してのみアクセスするといいとかあるのかな？
### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

---

## 本章のふりかえり
### この章で一番大事に思ったことや学びになったこと

---

# 4章 OOPは無駄を省いて整理整頓するプログラミング技術

## ウォーミングアップ

### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## OOPが持つ構造化言語にはない3つの仕組み

### 感想・気づき
- ソースコードの無駄を徹底的に省くことができます
    - ソースの重複がなくなるってこと？


### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||





---

## OOPの仕組みは言語ごとに微妙に異なる

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||


---


## 三大要素1 - クラスに備わる三つの仕組み

### 感想・気づき


### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||


---

## クラスの効能1 - まとめる

### 感想・気づき
- 命名が楽になる
    - めちゃめちゃ助かる。deleteするだけでも何を消すのかをいちいち明示してやるのはめんどう。
        - データベースのテーブル名のクラスって最低限存在すべき。
- 現実世界でのたとえないようにするのには限界がある
    - OOPの例えに生命を持ち込むのがだめ
    - https://qiita.com/tutinoco/items/8592f3432c5293b52566

### 疑問
- まとめることの効果は部品数が減る
    - クラスを一つの部品としてみる

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## クラスの効能2 - 隠す

### 感想・気づき
- インスタンス変数を隠す
    - カプセル化にはsetter,getterはセットだと思ってたから、アクセスの方法が制限されるだけじゃんと思っていたけど、変数ごとにgetterのみ付ける(readonly)みたいに適切な権限を付与してやれるってことなのかな
        - アクセス範囲を絞ること自体に意味がある
        - 保守性（影響範囲）の部分
            - public->privateはバグが起きるけど、private->publicではバグが起きない


### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## クラスの効能3 - たくさん作る

### 感想・気づき
- インスタンスを複数作る意識がなかった
### 疑問
- いくつでもメモリ領域を確保できる
    - 適切なタイミングで解放してやらなきゃなのか？

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## インスタンス変数は「仲間内だけのグローバル変数」

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 三大要素2 - 呼び出す側を共通化するポリモーフィズム

### 感想・気づき
- （森さん談）ポリモーフィズムは多態性って言って、一つの呼び出しで型ごとに異なる振る舞いをすることのことを指して、それを実装するためのオブジェクト指向でのアプローチが継承。継承は単なる手段の一つに過ぎないというやつです。
- 呼び出されるメソッドの引数や戻り値の形式を統一する必要がある。
    - ポリモーフィズムでは振る舞いのみ定義し、実際の処理は継承した各々のクラスで定義する。
    - なので引数や戻り値が合っていれば処理の中身は違っていてもいいのか。
- TextRenderはクラスではなくメソッドの仕様だけをせんげんするインターフェースを使っても実現できる
    - インターフェースでも実現可能ってことは、クラスで書くときも処理は書かずに振る舞いだけ定義するってこと？
    - インターフェースで書くべき。クラスで書く必要がない気がする。
        - https://qiita.com/igayamaguchi/items/e1d35db0a14a84bda452
- すなわち共通メインルーチンを作る仕組み
    - いまいちピンとこない

### 疑問
- リスト4.10
    - どこに書いてるんだ？TextRenderを継承した各クラスか？
        - 各クラスを呼び出す、メインルーチン

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---


## 三大要素3 - クラス定義の重複を排除する継承

### 感想・気づき
- 継承とポリモーフィズムはそれぞれ「実装の継承」と「インターフェースの継承」と表現することもある。
    - 継承とポリモーフィズムって使い分けがイメージできない。
### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 三大要素のまとめ

### 感想・気づき

### 疑問
- ポリモーフィズム　目的：無駄を省く
    - 省けてなくない？
    - 引数と戻り値が同じであることはわかりやすくなるけど、結局各クラスにメソッド書かなきゃいけないじゃん

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 型にはめられるとプログラマは楽になる

### 感想・気づき
- コンパイラにメモリの領域の大きさを教えられる
    - これは初めて知った。
    - プログラムのエラーを防止するためだと思ってた。

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## クラスを型として利用する

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## プログラミング言語は「退化」した？

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## さらに進化したOOPの仕組み

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 進化したOOPの仕組み1 - パッケージ

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 進化したOOPの仕組み2 - 例外

### 感想・気づき
- 例外
    - OOPができるまでは、エラーコードをバケツリレーしてたんだ、、

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## 進化したOOPの仕組み1 - ガベージコレクション

### 感想・気づき
- インスタンスを削除する処理をシステムが自動的に実行している
    - あ、よかった。
    - これがなかったら導入の障壁がまた上がってしまうとこだった。
    - OOPはプログラマが楽をするための物っていうのが伝わった

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## OOPの進化のまとめ

### 感想・気づき

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

## OOPを生かすも殺すも心がけ次第

### 感想・気づき
- OOPは手段であって、目的ではない
    - 品質や保守性を常に意識しなければ。

### 疑問

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---

---

## 本章のふりかえり
### この章で一番大事に思ったことや学びになったこと

---
# 5章メモリの仕組みの理解はプログラマのたしなみ 

## ウォーミングアップ

### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||||

---
## OOPのプログラムが動く仕組みを理解しておこう

### 感想・気づき


### 疑問

- 「メモリの使い方の理解」が最低限の知識であると筆者は考えます
    - 最低限っていうのはおおげさな気もする。知っておくべきだが、必要最低限ではない気がする。
        - メモリだけではないから、意識できればした方がいいくらい。

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|
||レジスタ|メモリの一部。プログラムからハードウェアを制御するとはレジスタというメモリへの読み書き。|

---
## コンパイラとインタプリタの２つの実行方式

### 感想・気づき
- コンパイラとインタプリタのエラー出力の違いは、エラーを出すタイミング。インタプリタは実行時に、コンパイラではコンパイル時に。
- コンパイラのメリット
    - 実行効率の良さ
- コンパイラのデメリット
    - 実行自体に手間（コンパイル）がかかる
- インタプリタのメリット。
    - 実行の手軽さ
    - 複数のプラットフォームで互換性を保てる
- 中間コード方式
    - 基本はコンパイラ方式だが、中間コードという、機械語にもソースコードにも属さないインタプリタ言語を生成。それを解釈実行するパターン？
        - 環境に依存せず、統一言語コンパイルする。
        - TypeScriptはここに属する？

### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## 中間コードを解釈して実行する仮想マシン

### 感想・気づき
- 一般的にこの仕組みを仮想マシンと呼びます
    - 普段つかっているDockerとかの仮想環境と同一というわけではない。

### 疑問


### 知らない単語メモ

|ページ|単語|意味| 

---
## CPUは複数のスレッドを掛け持ちで実行する

### 感想・気づき
- CPUはスレッドの処理を実行する時、ある１つのスレッドを最初から最後まで一気に実行するのではなく、決められた非常に短い時間だけ実行します
    - これは知らなかった。一つのプロセス内で１つ１つのスレッドを完結させていくものだと思ってた。
    - PHPの場合はシングルスレッドだから１プロセス＝１スレッド

### 疑問


### 知らない単語メモ

|ページ|単語|意味| 

---
## 静的領域、ヒープ領域、スタック領域で管理。

### 感想・気づき


### 疑問


### 知らない単語メモ

|ページ|単語|意味| 
||静的領域|プログラム開始時（プロセスごと）に確保され終了するまで確保されるメモリ領域|
||ヒープ領域|プログラム開始時（プロセスごと）に確保され動的に変更される。終了するまで確保されるメモリ領域|
||スタック領域|プログラム開始時（スレッドごと）に確保され動的に変更される。終了するまで確保されるメモリ領域|

---
## OOPの特徴はメモリの使い方にあり

### 感想・気づき
- プログラマにとって「たしなみ」以前の「常識」と言って良い知識です
    - プレッシャーかけられてんな

### 疑問


### 知らない単語メモ

|ページ|単語|意味| 

---
## クラス情報はクラスにつき１つだけロードされる

### 感想・気づき

### 疑問
- ここでいうクラス情報とは、ここのインスタンスに依存しないクラス固有の情報です。
    - ルーチンの処理内容とかのインスタンスごとに変わらないもの？
- 事前に全てのクラス情報を一括してロードする方式で・・・
    - PHPはどっちなんだろ？

### 知らない単語メモ

|ページ|単語|意味| 

---
## インスタンス生成のたびにヒープ領域が使われる

### 感想・気づき

### 疑問
### 知らない単語メモ

|ページ|単語|意味| 

---
## 変数にはインスタンスの「ポインタ」が格納される

### 感想・気づき
- その代わりにこの変数には、ヒープ領域に作られたインスタンスのポインタを格納します
    - 変数ごとにインスタンス情報を保持せず、ヒープ領域にあるインスタンスの位置情報を保持することで、メモリの無駄遣いを阻止
### 疑問
### 知らない単語メモ

|ページ|単語|意味| 

---
## インスタンスを格納する変数のコピーに要注意

### 感想・気づき
### 疑問
### 知らない単語メモ

|ページ|単語|意味| 

---
## ポリモーフィズムは異なるクラスが同じ顔を見せる

### 感想・気づき
### 疑問
### 知らない単語メモ

|ページ|単語|意味| 

---
## 継承される情報の種類によってメモリ配置は異なる

### 感想・気づき
### 疑問
### 知らない単語メモ

|ページ|単語|意味| 

---
## 孤立したインスタンスはガベージコレクタが処分する

### 感想・気づき
- ガベージコレクタとは
    - ヒープ領域に残った不要なインスタンスを自動的に削除する仕組み
        - スタック領域と静的領域から参照されていないインスタンスが対象
### 疑問
### 知らない単語メモ

|ページ|単語|意味| 


# 6章 OOPがもたらしたソフトウエアとアイデアの再利用

## ウォーミングアップ
### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## OOPの優れた仕組みにより再利用が進んだ
### 感想・気づき
- このようなバズワードはそもそも定義が曖昧なうえに・・・
    - 確かに、フレームワークの定義が曖昧だなって感じる部分はあった。laravelを初めて学んだ時つまりフレームワークってなに？でかなりてこずった。
- デザインパターンは、優れた設計のアイデアを後から再利用できるように、名前をつけて文書かしたもの
    - 次はデザインパターン読むか

### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## クラスライブラリはOOPのソフトウエア部品群
### 感想・気づき
- 2) ライブラリから呼び出される側のロジックをアプリケーション固有の処理で置き換える（ポリモーフィズムの利用）
    - イメージできてない


### 疑問


---
## 標準のクラスライブラリは言語仕様の一部
### 感想・気づき
- このようにOOPでは言語仕様を最小限に抑える代わりに・・・
    - なるほど。言語仕様自体の変更を最小限にしている感じか

### 疑問


---

## Objectクラスを頂点とする継承構造
### 感想・気づき
- 最上位のクラスにObject（もの）という名前を・・・
    - これをにわかで噛んでると、現実世界を模倣するっていう勘違いが生まれそう
    - CakeもModelクラスとかで継承してた！
    - `class Model extends Object implements CakeEventListener {}`

### 疑問


---

## フレームワークにはさまざまな意味がある
### 感想・気づき
- アプリケーション基盤としてのフレームワーク
    - laravel
- 再利用部品群としてのフレームワーク
    - rails
    - ↑思想とそれを実現するための手段って別れ方だと解釈してた

### 疑問


---

## フレームワークはアプリケーションの半完成品
### 感想・気づき
- つまり基本的な制御の流れをフレームワーク側であらかじめ提供しておき、アプリケーションで個別の処理を組み込む仕組みです。
    - 自分たちが書いた処理は、フレームワークに呼び出されて動いているのか。全然意識してなかった。
- 基本的な処理はフレームワーク側で用意し、アプリケーション固有の処理はポリモーフィズムを利用して呼び出します。
    - 抽象化ってそのIOと名前が同様のメソッドを継承先の実装責務にしてることだと理解しているんだけど、ユーザー定義でメソッド名とかIOとか人によって違うのにどうやってるんだろう。
- さらにアプリケーションこゆうの処理については、継承の仕組みを利用してあらかじめデフォルトの機能を用意しておきます。
    - CakeのModelとか作るときにAppModelとか継承してるな。
    - Modelクラスにsaveとかあったし、「DBに保存する」ていう機能は用意してあって、それをどのタイミングで行うかは決められるって意味でのアプリケーション固有の処理ってことなのかな？

### 疑問


---

## 世界中で再利用されるソフトウエア部品群
### 感想・気づき

### 疑問


---

## 独立性の高い部品を意味するコンポーネント
### 感想・気づき

### 疑問
- OOPのクラスよりも粒度が大きい
    - これだとクラスライブラリとかフレームワークとほぼ同意？
- 今のところ技術よりもマーケティングの用途で使われることが多い
    - ノウハウのまとまり的な意味でつかわれてるのかな？
    - [リード管理に必要な５つのコンポーネント](https://blog.kairosmarketing.net/sfa/five-components-required-for-effective-lead-management/#5)
    - [マーケティングにおけるSWOT分析の使用方法-4コンポーネント](https://zipforecasting.com/ja/business-development-strategy/swot-analysis-marketing.html)


---


## デザインパターンは優れた設計のアイデア週　
### 感想・気づき
- 共通する設計アイデアを再利用可能にしたものがデザインパターン
### 疑問・質問
- わかりやすいデザインパターンの本あったら教えて欲しいです。


---


## デザインパターンはクラスライブラリ探検の道しるべ　
### 感想・気づき
- 共通する設計アイデアを再利用可能にしたものがデザインパターン
- このようにデザインパターンが使われているとわかると、そこから開発者の糸を汲み取ることができ亜mす
    - これ大事。現場レベルでも抽象化クラス定義する上で念頭におくべき。
### 疑問


---


## 設計以外の分野にも広がるアイデアの再利用　
### 感想・気づき
### 疑問


---


## クラスライブラリやパターンで知る再利用の恩恵　
### 感想・気づき
### 疑問


---

# 7章 汎用の整理術に化けたオブジェクト指向

## ウォーミングアップ
### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## ソフトウエアは現実世界をそのまま表現しない
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## 集合論と役割分担に応用された
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## 上流工程で「汎用の整理術」に化けた
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 2つの意味を持つこが混乱をもたらした
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## OOPの拡張と整理術に分類して考える
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## なぜ汎用の整理術に化けたのか
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

# 8章 UMLは形のないソフトウエアを見る道具

## ウォーミングアップ
### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## UMLはソフトウエアの機能や構造を表す図の描き方
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## UMLは13種類のダイアグラムがある
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## UMLのつかいかたは大きく3つ
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## UMLの使い方1 -プログラム構造を表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## クラス図でOOPのプログラム構造を表現
### 感想・気づき
- 形のないソフトウェアを2次元の図に表現することで全体を理解し記憶しやすくする
    - たしかにER図とかあるとDB構成も把握しやすい
- 「パターン認識」という言葉があり...デザインパターンにも気付きやすくなる
    - 作った人の糸を汲み取りやすくなるのはありがたい
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## シーケンス図とコミュニケーションズで動きを表現
### 感想・気づき
- 実行時の動きを一目瞭然のものとしてみる
    - 説明用じゃなくて考える時も使えそう
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## UMLの使い方2 -汎用の整理術の成果物を表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 集合論で整理した結果をクラス図で表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 役割分担はシーケンス図とコミュニケーション図
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## UMLの使い方3 -非オブジェクト指向を表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## ユースケース図でコピュータに任せる仕事を表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 仕事の流れをアクティビティ図で表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 状態の変化をステートマシン図で表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 自然言語とコピュータ用言語の欠点を補う「言語」
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

# 9章 現実世界とソフトウェアのギャップを埋めるモデリング

## ウォーミングアップ
### 感想・気づき


### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## 現実世界とソフトウェアにはギャップがある
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## 得意技は「決まり切った仕事」と「覚える仕事」
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---
## 業務分析、要求定義、設計でギャップを埋める
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## モデリングは３ステップを円滑に進めるための技術
### 感想・気づき
- 現実世界とソフトウェアのギャップを埋める３つのステップは。。。
    - この話を聞くと上流は現実世界を表現して下流はそのまま表現しないの意味が少し納得できそう
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## アプリケーションによってモデリングの内容は変わる
### 感想・気づき

### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## ビジネスアプリケーションは現実の出来事を記録する
### 感想・気づき

### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 図書館の貸し出し業務そのものをモデリングする
### 感想・気づき
- 図9.2
    - 手続きが見えてこーどに落とし込みやすそう

- アクティビティ図を書くことで実際のしごとのようすを理解しやすくなる
    - コード書く上で業務知識は欠かせないし、身につくのは嬉しい
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 図書館業務をユースケース図で表現する
### 感想・気づき
- この図も単純ですが非常にわかりやすいためコンピューターの専門家以外の人とのコミュニケーションにも使える
    - エンジニアじゃない人にわかりやすく伝えるとき試してみよう
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 図書館システムの情報を概念モデルで表現する
### 感想・気づき
- クラス図
    - ER図と違うの？
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## ビジネスアプリケーションではデータだけがシームレス
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 組み込みソフトウェアは現実世界の仕事を置き換える
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 組み込みソフトウェアでは装置の研究開発重要
### 感想・気づき
- 組み込みソフトウェアで業務分析を行わないもう一つの事情はその仕事を人間が実現できるとは限らないことです
    - ビジネスアプリもそうじゃないんか？
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 全自動で動作する様子をステートマシンズで表現
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## 組み込みソフトウェアは単調な仕事をひたする実行
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---

## モデリングにはソフトウェア開発の醍醐味がある
### 感想・気づき
### 疑問

- 

### 知らない単語メモ

|ページ|単語|意味| 
|--|--|--|

---