はじめに
3/22・23に開催されたPHPerKaigi2025の成瀬さんのセッションを機会にアーキテクチャの基本について学ぼうと思ったのがきっかけです。
以下のポストしたのですが、
ありがたいことに、易しい内容から難しい内容までリプをいただき、教えていただいたことを学んだアウトプットとして、備忘録を残します。(※自分なりの言葉で言い直したり解釈・理解でメモしています。)
(他業界からIT業界に転職した身として、こうして親切に教えていただける機会があるのは、ITならではだなぁと感じています。本当に感謝しかありません。)
記事
内容
オブジェクト指向(Object-Oriented Programming:OOP)とは抽象化の技法のこと。
プログラムに関しての抽象化
-
「情報量の多いプログラム=面倒と感じる」例でcsvのコードあり、確かに読み込まないと何をしているのかわからない。
-
抽象化
思考における手法のひとつで、対象から注目すべき要素を重点的に抜き出して他は無視する方法である。
資料より抜粋
- 大事なところだけ見て、それ以外は気にせず物事をシンプルにとらえる技の考え方と理解
- 具体的に記述しているコードに関しては、変数化して抽象化する。この時にデータとそのデータを手続きを分けて考えてしまうと、うまく抽象化できなくなる
データと手続きをまとめよう
資料より抜粋
- 上記の考え方がクラス
カプセル化
抽象化した結果、XxxConverterクラスに「データ」と「処理」が隠蔽された
必要な知識は newしてRunをCallするだけ
隠蔽=カプセル化
資料より抜粋
- めちゃくちゃ分かりやすい。クラスの中には「どんなデータを使うか」「どうやって処理するか」が入っていて、でも中身の詳細は外から見えない、使う側は「どう使うか」さえ分かれば良いとい状態ってことかな。データ(状態)と処理(ふるまい)をひとつのクラスにまとめて包めている状態にしている。(カプセル化)
「面倒なことはカプセル化」することが大事。
条件分岐
- 確かに・・・。条件分岐が多いとより複雑に感じる。これを解消するためにメソッドを抽象化すると良いみたい。
条件分岐=複雑さ
プログラムを複雑でなくしたい=条件分岐を減らしたい
資料より抜粋
- メソッド名や呼び出し方が共通で、共通のインターフェースまたは親クラスを持っている。使う側は「中身の違い」を考えなくて良いこれを呼ぶだけで自動的に適切な振る舞いをすること
同じ処理を持つ似たようなものとして抽象化して利用すること
ポリモーフィズム化
資料より抜粋
オブジェクト指向とは何か
カプセル化とポリモーフィズムを利用した抽象化
資料より抜粋
- カプセル化(=データと処理を1つにまとめること)+ポリモーフィズム(=同じ操作で違うふるまいをさせること)を組み合わせて、複雑なモノをわかりやすく・使いやすく抽象化する設計手法か。
まとめ
- 資料拝見しつつ、自分なりに言葉を付け足して備忘録として残せたので、普段使用しているけど、うまく言語化できていなかったところが、鮮明になってスッキリです。