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
4k
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.6k
オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜
a_suenami
5
3.5k
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
a_suenami
14
7k
値と属性の話
a_suenami
0
320
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.6k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
2
3.4k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
1.5k
ドメインモデルのつくり方 #5000dai
a_suenami
16
5k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
46
12k
Other Decks in Technology
See All in Technology
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
2
190
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
110
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
Snowflakeと仲良くなる第一歩
coco_se
4
410
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
920
Agentic Web
dynamis
1
200
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
140
チームで進めるAI駆動アジャイル×ウォーターフォール
kumaiu
0
150
MCP Appsを作ってみよう
iwamot
PRO
4
480
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
3
2.1k
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.5k
攻撃者視点で考えるDetection Engineering
cryptopeg
0
840
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.2k
Technical Leadership for Architectural Decision Making
baasie
3
400
A Modern Web Designer's Workflow
chriscoyier
698
190k
Done Done
chrislema
186
16k
A Tale of Four Properties
chriscoyier
163
24k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Facilitating Awesome Meetings
lara
57
7k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
140
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モデルからその他のデータモデルへの変換 ネットワークモデル リレーショナルモデル エンティティセットモデル
まとめ • 現代のソフトウェア開発はほとんどの場合マルチパラダイムでの 設計が可能である。 • 構築するソフトウェアを抽象化されたモジュールの集合と捉え、そ れらの間の依存関係をどのように設計するかがモデリングの重 要な観点である。 • それぞれのパラダイムの得手・不得手を理解し、最適なモデルを
選択することが設計者には求められる。
ご清聴ありがとうございました。