Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPe...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Akira Suenami
February 09, 2020
Technology
4.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
Akira Suenami
February 09, 2020
More Decks by Akira Suenami
See All by Akira Suenami
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
9
2.7k
オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜
a_suenami
5
3.6k
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
a_suenami
14
7.1k
値と属性の話
a_suenami
0
330
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.6k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
2
3.5k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
1.5k
ドメインモデルのつくり方 #5000dai
a_suenami
16
5.1k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
46
12k
Other Decks in Technology
See All in Technology
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
220
Hub & Spoke 環境のネットワークルーティングを分解してみる
tsuyataku
1
490
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
1
150
書籍『生成AIの安全性入門』の入門
wataoka
0
150
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
480
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
420
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
140
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
4
1k
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
160
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
160
AI時代のキョウソウ戦略
ystk
2
110
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1033
470k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
The Invisible Side of Design
smashingmag
301
52k
Side Projects
sachag
455
43k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
630
Thoughts on Productivity
jonyablonski
76
5.3k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
YesSQL, Process and Tooling at Scale
rocio
174
15k
4 Signs Your Business is Dying
shpigford
187
23k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
550
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
510
From π to Pie charts
rasagy
0
340
Transcript
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 2020/02/09 PHPer Kaigi 2020 末並 晃 @a_suenami
自己紹介 • 末並 晃 @a_suenami • 生息している界隈: DDDとか、TDDとか、RDBとか • お仕事で使ってる技術スタック:
Rails, React, Java, PHP • 好きな RDBMS: PostgreSQL • 好きな制約: チェック制約 • 好きな焼肉の部位: ハラミ • 好きな(ry
インターネット上での立場
インターネット上での立場 ひたすら焼肉をタカられるという エンターテイメントをインターネットに提供し ています。 (焼肉を奢るとは言ってない)
今日話すこと • オブジェクトとは何か • その他のモデリングパラダイムの紹介 • 複数のモデリングパラダイムを用いた設計の勘所 • PHPの詳細な話はしません(重要) ◦
そもそも最近は私自身がレガシーなPHPしか触ってません
オブジェクトとは ※メッセージパッシングの話はしません!
歴史を振り返る 構造化プログラミング モジュラープログラミング データ抽象 抽象データ型 クラス
データ抽象とその手段としての抽象データ型 // point.h struct Point; struct Point* makePoint(double x, double
y); double distance(struct Point *p1, struct Point *p2); // point.c #include “point.h” #include <stdlib.h> #include <math.h> struct Point { double x, y; }; struct Point* makePoint(double x, double y) { struct Point* p = malloc(sizeof(struct Point)); p->x = x; p->y = y; return p; } double distance(struct Point* p1, struct Point* p2) { double dx = p1->x - p2->x; double dy = p1->y - p2->y; return sqrt(dx*dx+dy*dy); } 『Clean Architecture』第5章 オブジェクト指向プログラミング
データ抽象とその手段としての抽象データ型 • 抽象データ型とは、データ抽象を実現する手段のひとつとして提 案され、その具体的実装としてクラスが多くの機能に導入された。 • クラスとはモジュール化の手法のひとつと言える。 • つまり、クラスベースのオブジェクト指向におけるソフトウェア構築 は、抽象データ型の構造化された集合としてシステムを構築する ことである。
マルチパラダイム・モデリング • 現在では多くのプログラミング言語で関数がファーストクラスオ ブジェクトであり、関数を他のデータ型と同等に扱うことによって モジュール間の依存関係を適切にできる可能性がある。 ◦ ポリシーパターン、サービスパターンなどは関数に他ならな い。 • 抽象データ型はその名の通りデータ構造を隠蔽するため、デー
タモデルの理解は必要不可欠である。
マルチパラダイム・モデリング モジュール モジュール モジュール モジュール モジュール モジュール 抽象化されたモデル(モジュール構造)の世界 実際のデータ構造/アルゴリズムの世界 関数適用
関数合成 関係演算 (SQL) グラフ演算 手続き処理 有限オートマトン
計算モデル • 抽象機械型計算モデル ◦ チューリングマシン、有限オートマトン • 命令型計算モデル ◦ フローチャート •
関数型計算モデル ◦ 帰納的関数、ラムダ計算 • 論理型計算モデル ◦ 述語論理 『計算モデルとプログラミング』
計算モデルとしてのデータモデル • 一般にデータモデルと呼ばれるものも、それを用いることで特定 の計算を行いやすくなるという意味で計算モデルと見なすことも できる ◦ 例: リレーショナルモデル => リレーショナル演算
• ただし、チューリング完全であるとは限らない。
リレーショナルモデルとERモデル • リレーショナルモデルは述語論理を背景とし、何らかの命題を満 たす事実の集合と捉えるデータモデル。 ◦ 例: “識別子 $id の会員の名前は $name
、年齢は $age であ る” ◦ 関係演算によるデータ操作が可能になる。 • ERモデルは複数のデータモデルの包括的なビューとして提案さ れ、それ自体は計算体系を持たない。
ERモデルからその他のデータモデルへの変換 ネットワークモデル リレーショナルモデル エンティティセットモデル
まとめ • 現代のソフトウェア開発はほとんどの場合マルチパラダイムでの 設計が可能である。 • 構築するソフトウェアを抽象化されたモジュールの集合と捉え、そ れらの間の依存関係をどのように設計するかがモデリングの重 要な観点である。 • それぞれのパラダイムの得手・不得手を理解し、最適なモデルを
選択することが設計者には求められる。
ご清聴ありがとうございました。