SlideShare une entreprise Scribd logo
1  sur  10
第2回 モデリング勉強会



     2013/02/14
 株式会社アットウェア 高橋 哲也
前回のおさらい
• どうしてオブジェクト指向が必要か。
• モデリングって?
• CRCカードの書き方

               クラス名

   役割・責務
     そのクラスが       関連・相互作用クラス
    ・知っていること
      ・行うこと
オブジェクト指向設計五大原則
• 優れたオブジェクト指向開発のための指針。

• あくまで原則。

• 必ず守らなければならないものではないが
  まずそれで考えることが重要。

• 正当な理由やトレードオフが
  説明できれば破っても良い。

• が、無視してはダメだ。
【単一責任の原則】
 (Single Responsibility Principle)
• 『クラスを変更する理由は
   1つ以上存在してはならない。 』

• 変更理由が2つあるということは
  責任(役割)も2つあるということ。

• そんな便利そうなクラスは許さん!
  という原則。

 ※ 「変更する理由」ってのがポイント
【オープン・クローズドの原則】
  (the Open-Closed Principle )
• 『ソフトウェアの構成要素は
   拡張に対して開いていて
   修正に対して閉じていなければならない。』

• オープンとは?
  → モジュールの振る舞いを拡張できる。

• クローズとは?
  → モジュールの振る舞いを変更しても
    そのソースやバイナリは影響を受けない。

• 抽象的な原則のくせに一番大事。
  オブジェクト指向設計の核心です。
【リスコフの置換原則】
  (the Liskov Substitution Principle)
• 『派生型はその基本型と
   置換可能でなければならない。』

• 使う側から言うと、基本型を引数にとる関数に、ど
  んな派生型のインスタンスをもらっても気にしない
  で使えないとダメ。

• 実装側から言うと、派生クラスがその基本クラスで
  使われるところにおいても、正常に動作することを
  保証しないとダメ。
【依存関係逆転の原則】
  (the Dependency Inversion Principle)
• 『上位のモジュールは下位のモジュールに
   依存してはならない。
   どちらのモジュールも「抽象」に
   依存すべきである。』

• 『「抽象」は実装の詳細に依存してはならない。
   実装の詳細が「抽象」に依存すべきである。』

• 手続き型でよく出てしまう好ましくない構造。

• ここで言う上位・下位は継承のこと
  だけを指しているわけではありません。
【インターフェイス分離の原則】
 (the Interface Segregation Principle)
• 『クライアントに、クライアントが
   利⽤しないメソッドへの依存を
   強制してはならない。』

• クライアントは複数のインターフェイスを
  利⽤するけど、そのすべてが互いに
  強い関連を持っているわけではない。

• すべてのインターフェイスを
  1つのクラスに押し込めてしまうことはやめ
  関連性持ったインターフェイスは
  グループ化して抽象基本クラスとして
  分けて利⽤すべき。
もっと詳しく知りたい人は
『アジャイルソフトウェア開発の奥義 第2版』
 〜オブジェクト指向開発の神髄と匠の技〜
   ロバート・C・マーチン、 瀬谷 啓介 著




                     6,000円くらいするけどね
お題
• ドラクエの戦闘画面を
  モデリングしましょう。

• パーティは4人、敵はランダム。
• ステータス異常などもアリ。

Contenu connexe

En vedette

デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」Hokuto Tateyama
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)VOYAGE GROUP
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向hakoika-itwg
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げるWataru Terada
 
オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版Mao Ohnishi
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向Anto Mioyama
 
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数Satoru Kodaira
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生Satoru Kodaira
 
F流 『オブジェクト指向の考え方の基礎の基礎』 ~ソフトウェア開発の原則編~
F流『オブジェクト指向の考え方の基礎の基礎』~ソフトウェア開発の原則編~F流『オブジェクト指向の考え方の基礎の基礎』~ソフトウェア開発の原則編~
F流 『オブジェクト指向の考え方の基礎の基礎』 ~ソフトウェア開発の原則編~Fujio Kojima
 
第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」
第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」
第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」hakoika-itwg
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 

En vedette (11)

デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる
 
オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向
 
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
ジーノ先生の文系的オブジェクト指向(2) - コンストラクタの引数
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
 
F流 『オブジェクト指向の考え方の基礎の基礎』 ~ソフトウェア開発の原則編~
F流『オブジェクト指向の考え方の基礎の基礎』~ソフトウェア開発の原則編~F流『オブジェクト指向の考え方の基礎の基礎』~ソフトウェア開発の原則編~
F流 『オブジェクト指向の考え方の基礎の基礎』 ~ソフトウェア開発の原則編~
 
第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」
第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」
第8回勉強会 開発プロセス 「計画ゲーム~ふりかえり」
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 

Similaire à 第2回 モデリング勉強会

設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】Tomoharu ASAMI
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門Kiro Harada
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence ModelingDeep Learning JP
 
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけてAgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけてShuji Morisaki
 
background jobで
気をつけないといかんところ
background jobで
気をつけないといかんところbackground jobで
気をつけないといかんところ
background jobで
気をつけないといかんところAkira Miki
 
Mk state in-programming-01
Mk state in-programming-01Mk state in-programming-01
Mk state in-programming-01Miya Kohno
 
Network Programmability and the statefulness/transactionality
Network Programmability and the statefulness/transactionalityNetwork Programmability and the statefulness/transactionality
Network Programmability and the statefulness/transactionalityMiya Kohno
 
Skinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsSkinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsKazuhiro Sera
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
Mk model driven-automation
Mk model driven-automationMk model driven-automation
Mk model driven-automationMiya Kohno
 
レガシーコード読書会 20120618
レガシーコード読書会 20120618レガシーコード読書会 20120618
レガシーコード読書会 20120618Suguru Shirai
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】Tomoharu ASAMI
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423Yusuke Suzuki
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法yoshitaro yoyo
 

Similaire à 第2回 モデリング勉強会 (20)

PHP Coding in BEAR.Sunday
PHP Coding in BEAR.SundayPHP Coding in BEAR.Sunday
PHP Coding in BEAR.Sunday
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
 
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけてAgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
 
background jobで
気をつけないといかんところ
background jobで
気をつけないといかんところbackground jobで
気をつけないといかんところ
background jobで
気をつけないといかんところ
 
Mk state in-programming-01
Mk state in-programming-01Mk state in-programming-01
Mk state in-programming-01
 
Network Programmability and the statefulness/transactionality
Network Programmability and the statefulness/transactionalityNetwork Programmability and the statefulness/transactionality
Network Programmability and the statefulness/transactionality
 
Skinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsSkinny Controllers, Skinny Models
Skinny Controllers, Skinny Models
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
Mk model driven-automation
Mk model driven-automationMk model driven-automation
Mk model driven-automation
 
TypeScript超入門
TypeScript超入門TypeScript超入門
TypeScript超入門
 
レガシーコード読書会 20120618
レガシーコード読書会 20120618レガシーコード読書会 20120618
レガシーコード読書会 20120618
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
 
秒速ChainerMN
秒速ChainerMN秒速ChainerMN
秒速ChainerMN
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法
 

Plus de hakoika-itwg

第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティーhakoika-itwg
 
第8回勉強会 開発プロセス 「プロセス改善」
第8回勉強会 開発プロセス 「プロセス改善」第8回勉強会 開発プロセス 「プロセス改善」
第8回勉強会 開発プロセス 「プロセス改善」hakoika-itwg
 
第7回勉強会 ネットワークの基礎
第7回勉強会 ネットワークの基礎第7回勉強会 ネットワークの基礎
第7回勉強会 ネットワークの基礎hakoika-itwg
 
第6回勉強会 はじめてのデータベース
第6回勉強会 はじめてのデータベース第6回勉強会 はじめてのデータベース
第6回勉強会 はじめてのデータベースhakoika-itwg
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 

Plus de hakoika-itwg (6)

Version管理 1
Version管理 1Version管理 1
Version管理 1
 
第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー
 
第8回勉強会 開発プロセス 「プロセス改善」
第8回勉強会 開発プロセス 「プロセス改善」第8回勉強会 開発プロセス 「プロセス改善」
第8回勉強会 開発プロセス 「プロセス改善」
 
第7回勉強会 ネットワークの基礎
第7回勉強会 ネットワークの基礎第7回勉強会 ネットワークの基礎
第7回勉強会 ネットワークの基礎
 
第6回勉強会 はじめてのデータベース
第6回勉強会 はじめてのデータベース第6回勉強会 はじめてのデータベース
第6回勉強会 はじめてのデータベース
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 

Dernier

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Dernier (9)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

第2回 モデリング勉強会

  • 1. 第2回 モデリング勉強会 2013/02/14 株式会社アットウェア 高橋 哲也
  • 2. 前回のおさらい • どうしてオブジェクト指向が必要か。 • モデリングって? • CRCカードの書き方 クラス名 役割・責務 そのクラスが 関連・相互作用クラス ・知っていること ・行うこと
  • 3. オブジェクト指向設計五大原則 • 優れたオブジェクト指向開発のための指針。 • あくまで原則。 • 必ず守らなければならないものではないが まずそれで考えることが重要。 • 正当な理由やトレードオフが 説明できれば破っても良い。 • が、無視してはダメだ。
  • 4. 【単一責任の原則】 (Single Responsibility Principle) • 『クラスを変更する理由は 1つ以上存在してはならない。 』 • 変更理由が2つあるということは 責任(役割)も2つあるということ。 • そんな便利そうなクラスは許さん! という原則。 ※ 「変更する理由」ってのがポイント
  • 5. 【オープン・クローズドの原則】 (the Open-Closed Principle ) • 『ソフトウェアの構成要素は 拡張に対して開いていて 修正に対して閉じていなければならない。』 • オープンとは? → モジュールの振る舞いを拡張できる。 • クローズとは? → モジュールの振る舞いを変更しても そのソースやバイナリは影響を受けない。 • 抽象的な原則のくせに一番大事。 オブジェクト指向設計の核心です。
  • 6. 【リスコフの置換原則】 (the Liskov Substitution Principle) • 『派生型はその基本型と 置換可能でなければならない。』 • 使う側から言うと、基本型を引数にとる関数に、ど んな派生型のインスタンスをもらっても気にしない で使えないとダメ。 • 実装側から言うと、派生クラスがその基本クラスで 使われるところにおいても、正常に動作することを 保証しないとダメ。
  • 7. 【依存関係逆転の原則】 (the Dependency Inversion Principle) • 『上位のモジュールは下位のモジュールに 依存してはならない。 どちらのモジュールも「抽象」に 依存すべきである。』 • 『「抽象」は実装の詳細に依存してはならない。 実装の詳細が「抽象」に依存すべきである。』 • 手続き型でよく出てしまう好ましくない構造。 • ここで言う上位・下位は継承のこと だけを指しているわけではありません。
  • 8. 【インターフェイス分離の原則】 (the Interface Segregation Principle) • 『クライアントに、クライアントが 利⽤しないメソッドへの依存を 強制してはならない。』 • クライアントは複数のインターフェイスを 利⽤するけど、そのすべてが互いに 強い関連を持っているわけではない。 • すべてのインターフェイスを 1つのクラスに押し込めてしまうことはやめ 関連性持ったインターフェイスは グループ化して抽象基本クラスとして 分けて利⽤すべき。
  • 10. お題 • ドラクエの戦闘画面を モデリングしましょう。 • パーティは4人、敵はランダム。 • ステータス異常などもアリ。