SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
SOLID原則
佐久間 尚輝
自己紹介
では、本題へ
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
SOLID原則とは?
In object-oriented computer programming, the
term SOLID is a mnemonic acronym for five
design principles intended to make software
designs more understandable, flexible
and maintainable. The principles are a subset of
many principles promoted by Robert C.
Martin. Though they apply to any object-
oriented design, the SOLID principles can also
form a core philosophy for methodologies such
as agile development or adaptive software
development.(wikipediaより抜粋)
完
ちゃんと説明させて
いただきます
SOLID原則とは?
ソフトウェアの設計を
理解しやすく柔軟にすることを
目的とした5つの設計原則のこと
(オブジェクト指向のようなもの)
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
SOLID原則の中身
単一責任の原則
- Single responsibility principle
オープン・クローズドの原則
- Open/closed principle
リスコフの置換原則
- Liskov substitution principle
依存関係逆転の原則
- Interface segregation principle
インターフェース分離の原則
- Dependency inversion principle
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
単一責任の原則
クラスを変更する理由は
2つ以上存在してはならない
どういうこと?
1つのクラスには1つの役割
悪い例
PlayerManagerクラス
何が悪いの?
・1つのクラスの役割が多すぎる
・機能の修正、追加をする際
思わぬところで不具合が
発生する可能性がある
改善
PlayerMoveクラス
PlayerAttackクラス
PlayerEffectクラス
処理ごとにクラスを分ける
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
オープン・クローズドの原則
クラスは
拡張に対して開いていて、
修正に対して閉じて
いなければならない
どういうこと?
仕様変更があった場合は
機能の追加を容易に出来る
その際に既存のコードは
影響をうけない
悪い例
プレイヤーの当たり判定
何が悪いの?
・処理を記述し忘れても気付けない
・当たり判定が増えるたびに
このif文が増える
改善
if文の羅列もなくなり
変更に強いコードに
Playerクラス
改善
基底クラスやインターフェースを使って
抽象化する
当たったときの
インターフェース Enemyクラス
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
リスコフの置換原則
派生クラスはその基底クラスと
置換可能でなければならない
どういうこと?
基底クラスで決められた約束を
派生クラスで破ってはいけない
悪い例
値段クラス
税込み価格クラス
悪い例クラス
何が悪いの?
計算機クラス
・結果が違っているのに動いてしまう
・親クラスが望んでいる結果と違う
・チーム制作で起こりやすい
税込み価格クラスの
処理を知らない人が
作ったクラス
改善
税込み価格クラス
専用の属性を用意してあげると
親の挙動を変更せずに
処理がおこなえる
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
依存関係逆転の原則
上位モジュールは
下位のモジュールに
依存してはならない
どちらのモジュールも「抽象」に
依存すべきである
どういうこと?
上位クラスが方針を決め、
下位クラスがその方針に従う
悪い例
Playerクラス PlayerのHPを記憶
するクラス
何が悪いの?
・下位クラスに依存してしまっている
・他に記憶させたいものが
出てきた時にif文が増える
改善
Playerクラス 記憶するインター
フェース
下位クラスに依存せずに
抽象クラスに依存している
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
インターフェース分離の原則
クライアントが利用しない
メソッドへの依存を
強制してはならない
どういうこと?
インターフェースは
シンプルにする
悪い例
Playerインターフェース
何が悪いの?
Playerインターフェース
・このインターフェイスを継承したクラスの
メソッドを変更した場合、他のメソッドも
変更しなければならない可能性がある
改善
当たったときのインターフェース
インターフェイスの実装は
必要最低限にする
アジェンダ
SOLID原則とは?
SOLID原則の中身
- 単一責任の原則
- オープン・クローズドの原則
- リスコフの置換原則
- 依存関係逆転の原則
- インターフェース分離の原則
まとめ
まとめ
SOLID原則はあくまで「原則」
なので、臨機応変に使用しよう
ご清聴ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方Cake YOSHIDA
 
アジャイル開発の中の設計
アジャイル開発の中の設計アジャイル開発の中の設計
アジャイル開発の中の設計Takuya Okamoto
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。toshihiro ichitani
 
名は体を表していますか
名は体を表していますか名は体を表していますか
名は体を表していますかinfinite_loop
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例Naoya Kishimoto
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス増田 亨
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Takafumi ONAKA
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanItsuki Kuroda
 
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術div Inc
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則bonjin6770 Kurosawa
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
一般的なチートの手法と対策について
一般的なチートの手法と対策について一般的なチートの手法と対策について
一般的なチートの手法と対策について優介 黒河
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みMorioImai
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!Yukei Wachi
 

Was ist angesagt? (20)

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方
 
アジャイル開発の中の設計
アジャイル開発の中の設計アジャイル開発の中の設計
アジャイル開発の中の設計
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
 
名は体を表していますか
名は体を表していますか名は体を表していますか
名は体を表していますか
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Hatena::Letの式年遷宮
Hatena::Letの式年遷宮
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
一般的なチートの手法と対策について
一般的なチートの手法と対策について一般的なチートの手法と対策について
一般的なチートの手法と対策について
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!
 

SOLID原則とは