デザインパターン学習で得た知見

21.4K Views

October 04, 21

スライド概要

『エンジニア達の「〇〇完全に理解した」Talk #21』でLT発表した際の発表スライドです。

profile-image

嘆きの未経験入社エンジニア

関連スライド

各ページのテキスト
1.

デザインパターン学習で 得た知見 エンジニア達の「〇〇完全に理解した」Talk #21 きゃべ(@kamikawa_m)

2.

アジェンダ 1. はじめに ~デザインパターンとは~ 2. 間違えた!~State・Strategy~ 3. まとめ

3.

自己紹介 ⚫名前: きゃべ(kamikawa_m) ⚫業務: C#によるツール開発 ⚫開発経験: ちょうど9か月(入社2年目)

4.

1.はじめに ~デザインパターンとは~ オブジェクト指向設計において、 「設計を行ううえでよく突き当たる問題を解決するための設計 のノウハウをまとめたもの」。 メリット: ⚫過去のエンジニアがたどり着いた「良い設計」を活用できる ⚫パターン名が「エンジニアの共通言語」となる(設計の意思疎通)

5.

2. 間違えた!~State・Strategy~ これまで、GoFのデザインパターンを学習してきた中で、 「デザインパターンの解決したい課題は何か?」 「他のデザインパターンとどう違うんだろう?」という部分を 意識するようになったきっかけとなった”やらかし”を例として、 Stateパターン・Strategyパターンの違いについてお話します 。

6.

Strategyパターンとは アルゴリズムをプログラムの他の部分から分離することで、 アルゴリズムの動的な切り替えを可能とすることを目的としたパターン。 例:ソートアルゴリズムを分離して、複数のソートアルゴリズムを切り替 えられるようにする

7.

がアルゴリズム。 Contextが持っているStrategyを、ConcreteStrategy1や ConcreteStrategy2に切り替えることで、アルゴリズムを動的に切り替えられる。

8.

Strategyパターン? Clientクラスで入力した金額 をもとに、料金計算の方法を 切り替える 料金を計算するクラスが3つある →これをStrategy(プログラムか ら分離するアルゴリズム)とする

9.

Strategyパターン? 500円払います!(Clientクラスへ料金を入力) 500円なら本当は送料と手数料をもらうけど、 今日は木曜日だから、送料分は割引します! (StrategyをPayment1に切り替え) わあい!商品代金と手数料だけで買えちゃった! (切り替えたStrategyをもとに料金計算) 店

10.

Strategyパターン Clientクラスで入力した金額 や、その日の曜日をもとに、 料金計算の方法を切り替える 料金を計算するクラスが3つある →これをStrategy(プログラムから 分離するアルゴリズム)とする

11.

Strategyパターンではなかった! Clientクラスで入力した金額や、 その日の曜日をもとに、 料金計算の方法を切り替える 料金を計算するクラスが3つある →これをStrategy(プログラムから 分離するアルゴリズム)とする

12.

クラス図が同じ、別のパターン ▲Strategyパターン ▲Stateパターン

13.

Stateパターンとは システムの状態をクラスで表すことを目的としたパターン。 状態に応じてクラスが切り替わり、処理が変わる。 例:車の運転中・停車中などの状態をクラスで表す。 同じSpeedUpメソッドを呼んだとしても、「スピードを上げる」や「何も しない」などのように、そのときの状態に応じて処理を変える。

14.

が状態。 Contextが持っているStateを、何らかの条件で ConcreteState1やConcreteState2に切り替えることで、状態が切り替わる。

15.

切り替え方の違い ★Strategyパターンの場合: →アルゴリズムを切り替えるのはプログラムを使う側(ユーザー)。 ユーザーが能動的に、使いたいアルゴリズムを選択する。 ★Stateパターンの場合: →状態を切り替えるのはプログラム側。 切り替えを担当するのはどのクラスでもよい(切り替え部分はパターン外)。

16.

何が間違っていたのか Clientクラスで入力した金額 や、その日の曜日をもとに、 料金計算の方法を切り替える 料金を計算するクラスが3つある →これをStrategy(プログラムから 分離するアルゴリズム)とする

17.

何が間違っていたのか Clientクラスで入力した金額 や、その日の曜日をもとに、 料金計算の方法を切り替える ↑入力された金額、および曜日という 状態に応じて、料金計算の方法を プログラムが切り替えている!

18.

直してみました! ユーザーが能動的に Strategyを切り替えら れるメソッドを用意 入力した金額が Strategyの切り替えに 関わらないように変更

19.

Strategyパターン カードでお買い物します! (StrategyをCardPaymentに切り替え) 500円払います!(Clientクラスへ料金を入力) カード払いなら送料分は割引します! (切り替えたStrategyをもとに料金計算) わあい!商品代金と手数料だけで買えちゃった! 店

20.

4. まとめ ★Strategyパターンとは →アルゴリズムをプログラムの他の部分から分離することで、 アルゴリズムの動的な切り替えを可能とすることを目的としたパターン。 アルゴリズムを使う側が使いたい処理に切り替える。 ★Stateパターンとは →システムの状態をクラスで表すことを目的としたパターン。 状態に応じてクラスが切り替わり、処理が変わる。

21.

学び デザインパターンは、オブジェクト指向設計における、 「設計を行ううえでよく突き当たる問題を解決するための設計の ノウハウをまとめたもの」。 「このパターンのメリットは何か」、 「どういう設計の問題を解決できるパターンなのか」、 というところを理解して、設計に活用できるようにしたい。