Slide 1

Slide 1 text

デザインパターンを 掘り下げよう ~Singleton Pattern 編~ 2024/03/29 設計カンファレンス extends OOC Gladiolus LAB 代口勇真

Slide 2

Slide 2 text

今回 話す こと デザインパターンの話 Singleton Patternの理解 現代におけるSingleton Pattern そもそもの話 まとめ 自己紹介(間に合ったら)

Slide 3

Slide 3 text

陳謝 今回発表のコードにつきまして、作成期間の関係上 GPTツールを使って作成しております。 そのためコードの質については曖昧となってしまうことご了承ください。 (Claude3 Sonnetで出力) その上で、コードの具体的な説明は主題ではないため、ざっくり程度しか紹介 いたしませんのでよろしくお願いいたします。

Slide 4

Slide 4 text

デザインパターンの話

Slide 5

Slide 5 text

デザインパターンの話 一般的(デファクトスタンダート)な話です

Slide 6

Slide 6 text

デザインパターンの話 一般的(デファクトスタンダート)な話です ◦ 設計のノウハウ集の中でも、特にGoFがの4人が執筆した「オブジェクト指向 における再利用のためのデザインパターン」を指している ◦ デザインパターン本で説明しているのは主に23種の設計種別を解説 ◦ 実際デザインパターンは23だけではなく、マルチスレッド等にも踏み込むと もっとある ◦ 有名なのは Monitor, Lock, Scheduler, 近年はRepository ◦ 他にも色々とある(個人的にはReactorとかDouble-checked lockingとか👍) ◦ 設計手法もパターンと捉えると...考えるのをやめた

Slide 7

Slide 7 text

デザインパターンの話 GoFのデザインパターン本?

Slide 8

Slide 8 text

デザインパターンの話 GoFのデザインパターン本? ◦ Gang of Fourの略 ◦ エーリヒ・ガンマ ◦ リチャード・ヘルム ◦ ラルフ・ジョンソン ◦ ジョン・ブリシディース https://www.sbcr.jp/product/4797311126/

Slide 9

Slide 9 text

Singleton Patternの 理解

Slide 10

Slide 10 text

Singleton Patternの理解 Staticなinstanceで定義 constructのSingletonは privateなので直接呼べない 呼び出し時はgetInstanceメソッドで 呼び出しする Singletonクラスでoperationメソッドが 呼び出し可

Slide 11

Slide 11 text

Singleton Patternの理解 GoFが提唱していた(結集した内容の)概略

Slide 12

Slide 12 text

Singleton Patternの理解 GoFが提唱していた(結集した内容の)概略 C言語 C with classes '79 C++

Slide 13

Slide 13 text

Singleton Patternの理解 GoFが提唱していた(結集した内容の)概略 C言語 C with classes '79 C++

Slide 14

Slide 14 text

Singleton Patternの理解 1. 基本的な考えとして「他の言語に置き換えたらどうなる?」が原点 ◦ 柔らかく表現するなら「言語という文体が変わっても結果は同じになるよね」 2. 置き換えた結果、文法の違いはあれど本質は同一にすることが可能 3. ただし、本質を同一することができた代わりに弱点も生まれた ◦ Singletonの場合、グローバル変数を好き放題にできてしまう問題 DIして解決するやり方は、Singletonから生まれた課題の解決手法としてまさに適切といえる

Slide 15

Slide 15 text

Singleton Patternの理解 1. 基本的な考えとして「他の言語に置き換えたらどうなる?」が原点 ◦ 柔らかく表現するなら「言語という文体が変わっても結果は同じになるよね」 2. 置き換えた結果、文法の違いはあれど本質は同一にすることが可能 3. ただし、本質を同一することができた代わりに弱点も生まれた ◦ Singletonの場合、グローバル変数を好き放題にできてしまう問題 DIして解決するやり方は、Singletonから生まれた課題の解決手法としてまさに適切といえる 問題があるように見せかけているが、パターンというものはみんなで最も近しいものを 考えることが主題のため、このような問題が残されたままになるのは自然と考えます 問題を解決する = 仕組みを作る

Slide 16

Slide 16 text

Singleton Patternの理解 1. 基本的な考えとして「他の言語に置き換えたらどうなる?」が原点 ◦ 柔らかく表現するなら「言語という文体が変わっても結果は同じになるよね」 2. 置き換えた結果、文法の違いはあれど本質は同一にすることが可能 3. ただし、本質を同一することができた代わりに弱点も生まれた ◦ Singletonの場合、グローバル変数を好き放題にできてしまう問題 DIして解決するやり方は、Singletonから生まれた課題の解決手法としてまさに適切といえる 問題があるように見せかけているが、パターンというものはみんなで最も近しいものを 考えることが主題のため、このような問題が残されたままになるのは自然と考えます 問題を解決する = 仕組みを作る

Slide 17

Slide 17 text

現代におけるSingleton Pattern ◦ 例えば PHPとか

Slide 18

Slide 18 text

現代におけるSingleton Pattern ◦ 例えば PHPとか C言語

Slide 19

Slide 19 text

現代におけるSingleton Pattern ◦ 例えば PHPとか C言語

Slide 20

Slide 20 text

現代におけるSingleton Pattern ◦ 例えば TypeScriptとか C言語

Slide 21

Slide 21 text

あれ?

Slide 22

Slide 22 text

なんかみたことある?

Slide 23

Slide 23 text

そもそもの話

Slide 24

Slide 24 text

そもそもの話 勘違い的な話 - 1 ◦ デザインパターン、あるいはオブジェクト指向に強烈な幻想が生まれている ◦ これまでの紹介でもある通り、置き換えができるという紹介をしましたが、 それらは置き換えができないかを模索した結果であることを再度認識したいところ ◦ だけど実際に行われているのはすでにデザイン済パターンに 更なる重複デザインを行なっていることが多い(デザイン版: 車輪の再発明) ◦ e.g. SingletonパターンにSingletonパターンを入れようと変なことをしようとしている お仕事中の事件がありました(!?) ◦ 個人的には、この一件で自分の中にあるデザインパターンの理解と認識が崩れたことが オブジェクト指向という大きな夢物語からの脱却が始まったような記憶

Slide 25

Slide 25 text

そもそもの話 早くこの登壇動画を再履修したい https://speakerdeck.com/tanakahisateru/obuziekutozhi-xiang-zong-jiao-shi

Slide 26

Slide 26 text

そもそもの話 早くこのスライドと登壇動画を再履修したい https://fortee.jp/oocon-2024/proposal/a35177c1-aab0-47f3-bd98-030d7287dfea

Slide 27

Slide 27 text

そもそもの話 早くこのスライドと登壇動画を再履修したい https://speakerdeck.com/kishida/is-object-oriented-needed

Slide 28

Slide 28 text

そもそもの話 勘違い的な話 - 2 ◦ 銀の弾丸を求めすぎ ◦ もうないのはわかっているはずなのに、人類はまだあると信じて求めてしまう ◦ 私見として、デザインパターンが現代では大部分が提唱/実現が行われており、 今は次の段階に進む段階であって、プロダクト開発などの大きなステージへ進む タイミングに入ってきていると考えている ◦ レイヤーがどうこうというよりも、すでにデザインパターンという領域は 今の時代の言語を触っていればどういう形であれすでに履修しているもの ◦ みなさんはすでに仕事で使えるデザインパターンの概略は、もうマスターしてます!

Slide 29

Slide 29 text

そもそもの話 勘違い的な話 - 3 ◦ だからといって古臭いわけじゃない ◦ あれだけ言っておいてなんですが、言語でパターンは適応されているという話です ◦ なので、むしろ「この書き方ってデザインパターンでいう何だ……?」 というので自分のやっていることの理解を深めるツールとして使って欲しい という私見です(ココ重要)

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

まとめ 1. デザインパターンは高水準言語を触れていれば、原則触れています ◦ 意識していないだけで確実に 2. デザインパターンよりも先に方々に説明しやすい資料作りの方が大事 ◦ 結局最後は人間とのコミュニケーションなので、やっぱり文章や説明力があるほうが 強い 3. でも、仕組みを知っていればより奥深い理解と説明力は上がると思います ◦ 知る必要はないわけはなく、フレーバーとして覚えておくことで今後のお役立ちにな ります ◦ みなさんゲームのフレーバーテキストを見たら考察することありませんか? それです

Slide 32

Slide 32 text

まとめ 伝えたかったこと デザインパターンはみんなの技術の中で使っています デザインパターンのその先を考えていきませんか? そこから先は本当のデザイン(設計)が待っています

Slide 33

Slide 33 text

まとめ 伝えたかったこと デザインパターンはみんなの技術の中で使っています デザインパターンのその先を考えていきませんか? そこから先は本当のデザイン(設計)が待っています Design starts here !!

Slide 34

Slide 34 text

Next...? ◦ DI ◦ SOLID原則 ◦ アーキテクチャー ◦ MVC ◦ IDDD(ヘキサゴナルアーキテクチャー) ◦ クリーンアーキテクチャー and more...

Slide 35

Slide 35 text

終わりに Q: Singleton Pattern編って書いておいてほぼ全編みたいな感じにしてるの 詐欺じゃないですか? A: 筆がノったらこうなりました。許して...

Slide 36

Slide 36 text

自己紹介 ◦ X Name: 柚口ましろう ◦ X ID: yu_mashirou ◦ 本名: 代口勇真 ◦ 株式会社 Gladiolus LAB 秋葉原にある会社でいろんなことをやっています SES 受託開発 自社開発(今頑張ってる!)

Slide 37

Slide 37 text

EOL