Upgrade to Pro — share decks privately, control downloads, hide ads and more …

現実世界の事象から学ぶSOLID原則

 現実世界の事象から学ぶSOLID原則

# Object-Oriented Conference 2024
https://fortee.jp/oocon-2024/proposal/e1eb34cf-78ef-43f6-8a03-bb26c996cb62

概要
オブジェクト指向プログラミング (OOP) のコーディング慣例として広く採用される、SOLIDの原則。
コードの保守性、拡張性、再利用性を語る上では共通言語としても使用される一方で、初学者にとっては決して理解のしやすいものではありません。
これらの原則が抽象的であり、実際のコードにどのように適用されるか・適用した際に得られるメリットを理解するのが難しいことが理解を困難にする一因です。

しかし一度理解すると、SOLID原則が現実世界のありとあらゆる場所で適用されていることに気が付くはずです。
「clean architecture 達人に学ぶソフトウェアの構造と設計」においても、建築家の建築設計とソフトウェアの設計は同じようなものだと示されています。

そこで、本セッションでは、現実世界に潜むSOLID原則を紹介し、SOLID原則を具象と抽象の両側面から解説します。
具象と抽象の行き来によりOOP初学者の理解を促進することを目的としています。
(人間の脳は具体的で具象的な情報を処理しやすい特性があります。そのため、具象的な例や視覚的な要素が組み込まれた話は、抽象的な概念をより身近で理解しやすいものに変換され、学習効果を高めることができます。この人間の脳の特性を逆手に取ったセッションです!)

私自身、OOPに魅了されてからまだ日が浅いですが、その浅さからくる理解の難しさは未だに鮮明に記憶に残っています。
最新の実体験をもとに、SOLID原則への理解に苦しむ初学者に寄り添い、初学者がより理解しやすいセッションを提供したいと考えています。

想定する聞き手
SOLID原則をいつどこで何のために使うのかわからないという方
OOPに興味のある学生・新卒・若手エンジニア
話さないこと
SOLID原則の厳密な定義や誕生背景
GoFのデザインパターンやClean Architecture等のOOPの実践的な技法

ほりしょー

March 23, 2024
Tweet

More Decks by ほりしょー

Other Decks in Technology

Transcript

  1. 自己紹介 ほりしょー エンジニア@ハコベル株式会社 DDD / Clean Architecture GraphQL / Golang

    / Ruby 個人開発でカクテルアプリ作成中 🍹 来週リリース予定 @H0R15H0
  2. SOLID原則とは? 変更に強く・理解しやすく・再利用できるソフトウェア構造を作るための基本原則 単一責任の原則 (The Single Responsibility Principle / SRP) 開放閉鎖の原則(The

    Open-Closed Principle / OCP) リスコフの置換原則(The Liskov Substitution Principle / LSP) インターフェース分離の原則(The Interface Segregation Principle / ISP) 依存性逆転の原則 (The Dependency Inversion Principle / DIP)
  3. 本スライドの流れ 各原則の概要 1. 原則に違反した例の紹介 2. 原則に従った改善例 3. 各原則のまとめ 4. ※コード例はJavaをベースにしていますが

     理解しやすさのために一部文法を書き換えています。ご了承ください。 ※時間の都合上、インターフェース分離の原則は省略します。他4原則が理解すれば容易 梱包 配送 加工 調理
  4. 肉 Aさん 野菜 エビ 食材 継承 抽象化 Cut() Cut()を実装 Cut()を実装

    Cut()を実装 開放閉鎖の原則違反を改善:抽象化 食材の抽象型を用意 食材毎に具象化
  5. 単一責任の原則 (The Single Responsibility Principle / SRP) アクターごとにモジュールを用意する(高凝集)ことで変更しやすく 開放閉鎖の原則(The Open-Closed

    Principle / OCP) (OOPの本質)抽象化により変更に強く リスコフの置換原則(The Liskov Substitution Principle / LSP) 無理な派生(継承)を行わずOCPに準拠する 依存性逆転の原則 (The Dependency Inversion Principle / DIP) 下位モジュールへの依存を断ち切り変更に強く