Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
Search
Akira Suenami
February 16, 2020
Technology
3.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
Akira Suenami
February 16, 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
340
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.6k
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
4.1k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #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
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
130
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
150
Harness Engineering on Rails
joelq
0
460
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
170
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
0
160
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
190
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
12
6.7k
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
590
AI coding 整合正規方法
philipz
0
550
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
730
「どのログを見ればいい?」 から始めた サーバーレス障害解析
y_waka1
1
150
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.4k
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
Building Adaptive Systems
keathley
44
3.2k
HDC tutorial
michielstock
2
900
What's in a price? How to price your products and services
michaelherold
247
13k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
The Invisible Side of Design
smashingmag
301
52k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
710
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
A Tale of Four Properties
chriscoyier
163
24k
Transcript
異なるモデリングパラダイムから見る モデリングの勘所 2020/02/16 Object-Oriented Conference 末並 晃 @a_suenami
自己紹介 • 末並 晃 @a_suenami • 生息している界隈: DDDとか、TDDとか、RDBとか • お仕事で使ってる技術スタック:
Rails, React, Java, PHP • 好きな RDBMS: PostgreSQL • 好きな制約: チェック制約 • 好きな焼肉の部位: ハラミ • 好きな(ry
インターネット上での立場
インターネット上での立場 殺伐としたインターネットの世界へ、 ただただ焼肉をタカられるという エンターテイメントを提供しています。
今日話すこと • オブジェクト指向とは何か • クラスベースオブジェクト指向 • メッセージベースオブジェクト指向 • オブジェクト以外のモデリングとマルチパラダイムでのモデ リングについて
• 計算モデルとデータモデル
オブジェクトとは
2つのオブジェクト指向 • クラスベースのオブジェクト指向 ◦ 抽象データ型のスーパーセット ◦ モジュール化/データ抽象の手段としてユーザ定義型を利 用する ◦ 現在よく知られているのはおそらくこちら
• メッセージベースのオブジェクト指向 ◦ オブジェクト同士がメッセージを送る(メッセージパッ シング)のをプログラミングの基本とするという考え方 ◦ 徹底的な動的性、遅延結合、メタプログラミングなどを 特徴とする
クラスベースオブジェクト指向
歴史を振り返る 構造化プログラミング モジュラープログラミング データ抽象 抽象データ型 クラス
データ抽象とその手段としての抽象データ型 // 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章 オブジェクト指向プログラミング
データ抽象とその手段としての抽象データ型 • 抽象データ型とは、データ抽象を実現する手段のひとつとし て提案され、その具体的実装としてクラスが多くの機能に導 入された。 • クラスとはモジュール化の手法のひとつと言える。 • つまり、クラスベースのオブジェクト指向におけるソフトウ ェア構築は、抽象データ型の構造化された集合としてシステ
ムを構築することである。
データ構造とアルゴリズムの隠蔽 モジュール モジュール モジュール モジュール モジュール モジュール 抽象の世界 実際のデータ構造/アルゴリズムの世界 実装
実装 実装 実装 実装 実装 隠蔽・可換
メッセージベースオブジェクト指向
Smalltalk
Smalltalk • メッセージベースのオブジェクト指向を体現するプログラ ミング言語として(おそらく)もっとも有名な言語。 ◦ 言語というか処理系というほうが適切かも…? • Smalltalk-72, Smalltalk-76 など複数の処理系がある。
• 徹底的な動的性と遅延結合にこだわり、誰もが自分のため にプログラミングできることを目指した。 ◦ パーソナルコンピューティング
メッセージパッシングを支える特徴 • メッセージ解釈の動的性と遅延結合 ◦ メッセージの解釈は実行時にレシーバーによって行われ る ◦ Smalltalk 処理系では実行時に解釈できないメッセージ があった場合、処理を中断してその実装を書ける
▪ これは実行 “後” まで結合を遅延していると言えるの では…?
レシーバーによる実行時解釈(Rubyの例)
処理の中断とレシーバーの実装
メッセージパッシングを支える特徴 • オブジェクトの独立性 ◦ あるオブジェクトの変更が他のオブジェクトに影響しな い ◦ レシーバーがメッセージを解釈できなくても送信元には 影響しない •
Earlang はオブジェクト指向? ◦ これらの特徴を兼ね備えている(らしい)
メッセージ >= オブジェクト >> クラス クラスやメソッドという概念は 実行パフォーマンスのため(だけ)に存在する
ここまでのまとめ • オブジェクト指向にもいろいろあり、似たような機能(ク ラス、メソッドなど)はあるものの、背景にある思想はま ったく違う。 • 現代ではほとんどのプログラミング言語がクラスベースで ある。 • クラスベースのオブジェクト指向は型システムによる全体
構造の早期結合と実装の遅延/可換性、メッセージベースの オブジェクト指向は動的型付けとメタプログラミングによ る遅延結合を特徴とする。
メッセージベースOOから何を学ぶべきか • メッセージパッシングと遅延結合というコンセプトはとて もよいアイデアである • 現代ではシステムアーキテクチャの文脈でのほうがそのア イデアを活かせることが多いのではないか ◦ Pub/Sub ◦
キューイング / 非同期処理 ◦ ロギング
意思決定の遅延 • いずれにしても何らかの意思決定を遅延するためのアイデ アである • 具体的な実装を検討する場合にはオブジェクトというアイ デアとは別の異なるモデリング手法が必要になる • “オブジェクトパラダイム自身がこれまでに登場してきたパ ラダイムの混合物である”
(『マルチパラダイムデザイン 』)
マルチパラダイム・モデリング モジュール モジュール モジュール モジュール モジュール モジュール 抽象の世界 実際のデータ構造/アルゴリズムの世界 関数適用
関数合成 関係演算 (SQL) グラフ演算 手続き処理 有限オートマトン etc…
よいモデリングとは何か
モデルとは https://speakerdeck.com/a_suenami/moderutohahe-deatute-he-denaifalseka-number-kichijojipm
モデルとは つまり、モデリングとは何を重要な情報と扱い 何を捨てるかを決めること
思考実験: 「手続き」はモデルか • 抽象データ型というモデリングパラダイムから見れば “捨て られる” 対象である • しかし、ハードウェアや処理系あるいはコンパイラなどから 見ると、具体的なメモリ管理やOSへの命令などを抽象化し
ている “捨てた” のではなく 別のパラダイムに移譲したと捉えられる
設計要素とパラダイム 抽象化によって抽出されるもの 具象となるもの( “捨て” られるもの) 抽象データ型 型名、メソッド名と引数リスト 型の実装 サブルーチン サブルーチン名、引数リスト
処理内容 関数 関数名、適用対象と結果の型 計算内容 RDB スキーマ定義 結果セットの構造 RESTful API URI、パラメータ、レスポンス内容 利用するプログラミング言語、ミドルウ ェア
よりよいモデリングとは • 問題を複数の小さな問題に分割する • 早期決定が必要あるいは可能なものと決定遅延したいものに 分解する • それに適合する最適なモンデリングパラダイムでそれを表現 する
計算モデルとデータモデル
計算モデルとは 『https://ja.wikipedia.org/wiki/計算モデル “計算モデル(model of computation)は、計算・推論・証 明といった行為を論理的・抽象的に考察するための数理モデ ルである。”
要するに? 『「計算とは ◯◯ である」という問いに答えること』
計算モデル • 抽象機械型計算モデル ◦ チューリングマシン、レジスタマシン、有限オートマトン ◦ 計算とは “状態を変更すること” である •
代入・命令型計算モデル ◦ フローチャート ◦ 計算とは “順番に代入・命令をすること” である • 関数型計算モデル ◦ 帰納的関数、ラムダ計算 ◦ 計算とは “関数を適用すること” である • 論理型計算モデル ◦ 述語論理 ◦ 計算とは “事実集合に問い合わせること” である 『計算モデルとプログラミング』
計算モデルとしてのデータモデル • 一般にデータモデルと呼ばれるものも、それを用いることで 特定の計算を行いやすくなるという意味で計算モデルと考え ることももできる • SQL と Prolog とかとても似てますよね?ね?
• チューリング完全であるとは限らないが… 計算
ERモデルとリレーショナルモデルの混同 ≠
None
“The entity-relationship model can be used as a basis for
unification of different views of data”
リレーショナルモデルとERモデルの混同 • ERモデルは複数のデータモデルの包括的なビューとして提 案された。 • 概念モデル / 分析モデルの類と考えるのが適切である。 • それ自体は計算体系を持たない。
ERモデル → リレーショナルモデル 社員番号 名字 名前 所属 社員 部署 社員
番号 名字 名前 部署 番号 部署名 社員番号 部署番号 部署番号 部署名
ERモデル → ネットワークモデル 所属 社員 ・社員番号 ・名字 ・名前 部署 ・部署番号
・部署名 社員 部署 社員 番号 名字 名前 部署 番号 部署名 所属 社員 ・社員番号 ・名字 ・名前 部署 ・部署番号 ・部署名 所属
ERモデル → エンティティセットモデル 所属 社員 部署 社員 番号 名字 名前
部署 番号 部署名 社員番号: X 名字: XXX 名前: YYY 部署番号: X 部署名: ZZZ 名字 名前 所属 名前
それぞれのデータモデル • リレーショナルモデルの “リレーション” は属性間の関係で あり、柔軟な関係をあとから構築できることが強みである。 • ネットワークモデルはデータレコードをノードとする有向グ ラフと捉えられ、グラフ演算などと相性がよい。 •
エンティティセットモデルは EAV (Entity Attribute Value, 『SQLアンチパターン』)というアンチパターンとも考えら れるが、構造を固定化させず柔軟な構造を定義するのに適し ている。
計算モデルとデータモデル まとめ • 現代では多くのプログラミング言語がマルチパラダイムな言 語であると言え、どのようなパラダイムが最適かを常に考え るべきである。 • データモデルおよびその実装であるデータストアの選定も、 それによってどのような計算が可能かを規定するものであり、 適切な選択が必要になる。
まとめ • クラスベースオブジェクト指向とメッセージベースオブジェ クト指向の違いについて説明した。 • オブジェクト指向によって抽象化・意思決定遅延された部分 を他のモデリングパラダイムへの移譲と捉え、最適なモデリ ングパラダイムを選択するとよい。 • それぞれのパラダイムの得手・不得手を理解し、最適なモデ
ルを選択することが設計者には求められる。
ご清聴ありがとうございました。