Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
Akira Suenami
February 16, 2020
Technology
1
2.2k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
Akira Suenami
February 16, 2020
Tweet
Share
More Decks by Akira Suenami
See All by Akira Suenami
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
a_suenami
8
2.5k
値と属性の話
a_suenami
0
31
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
0
890
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
3.1k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
940
ドメインモデルのつくり方 #5000dai
a_suenami
14
4.1k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
27
5.9k
すえなみチャンスからの重要なお知らせ #すえなみチャンス暑気払い
a_suenami
0
480
モデルとは何であって、何でないのか #kichijojipm
a_suenami
13
5k
Other Decks in Technology
See All in Technology
2022 COSCUP - GKE Backend Cluster 除雷分享
brentchang
0
120
COSCUP x KCD Taiwan 2020 - 那些年我們在開源社群的日子 - Cloud Native Taiwan
pohsien
0
120
psql, my favorite tool!
nuko_yokohama
1
180
hey BOOK
heyinc
26
290k
ソフトウェアアーキテクチャの基礎: Software Architecture in a Nutshell
snoozer05
28
8.6k
Amazon Comprehendで始める感情分析
46ta
0
180
セキュアなTerraformの使い方 ~ 機密情報をコードに含めず環境構築するにはどうしたらいいの?
harukasakihara
9
1.5k
合同IT企業説明会から学ぶエンジニア向けの広報戦略
nagutabby
1
220
SPAとWebアプリケーションでCognitoの使い方はどう変わるのか? / How do we use cognito with SPA and web applications?
kitano_yuichi
0
380
JAWS-UG 朝会 #36 登壇資料
takakuni
1
550
Power Automate for desktopで 配信環境を改善してみた話
akiika
0
270
DevelopersIO 2022 俺のTerraform Pipeline
takakuni
0
430
Featured
See All Featured
What's new in Ruby 2.0
geeforr
335
30k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
Intergalactic Javascript Robots from Outer Space
tanoku
260
25k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
316
19k
The Language of Interfaces
destraynor
148
21k
Gamification - CAS2011
davidbonilla
75
3.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
253
12k
The MySQL Ecosystem @ GitHub 2015
samlambert
239
11k
From Idea to $5000 a Month in 5 Months
shpigford
373
44k
Building Applications with DynamoDB
mza
84
4.8k
Three Pipe Problems
jasonvnalue
89
8.7k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
100
6k
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アンチパターン』)というアンチパターンとも考えら れるが、構造を固定化させず柔軟な構造を定義するのに適し ている。
計算モデルとデータモデル まとめ • 現代では多くのプログラミング言語がマルチパラダイムな言 語であると言え、どのようなパラダイムが最適かを常に考え るべきである。 • データモデルおよびその実装であるデータストアの選定も、 それによってどのような計算が可能かを規定するものであり、 適切な選択が必要になる。
まとめ • クラスベースオブジェクト指向とメッセージベースオブジェ クト指向の違いについて説明した。 • オブジェクト指向によって抽象化・意思決定遅延された部分 を他のモデリングパラダイムへの移譲と捉え、最適なモデリ ングパラダイムを選択するとよい。 • それぞれのパラダイムの得手・不得手を理解し、最適なモデ
ルを選択することが設計者には求められる。
ご清聴ありがとうございました。