Slide 1

Slide 1 text

マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 2020/02/09 PHPer Kaigi 2020 末並 晃 @a_suenami

Slide 2

Slide 2 text

自己紹介 ● 末並 晃 @a_suenami ● 生息している界隈: DDDとか、TDDとか、RDBとか ● お仕事で使ってる技術スタック: Rails, React, Java, PHP ● 好きな RDBMS: PostgreSQL ● 好きな制約: チェック制約 ● 好きな焼肉の部位: ハラミ ● 好きな(ry

Slide 3

Slide 3 text

インターネット上での立場

Slide 4

Slide 4 text

インターネット上での立場 ひたすら焼肉をタカられるという エンターテイメントをインターネットに提供し ています。 (焼肉を奢るとは言ってない)

Slide 5

Slide 5 text

今日話すこと ● オブジェクトとは何か ● その他のモデリングパラダイムの紹介 ● 複数のモデリングパラダイムを用いた設計の勘所 ● PHPの詳細な話はしません(重要) ○ そもそも最近は私自身がレガシーなPHPしか触ってません

Slide 6

Slide 6 text

オブジェクトとは ※メッセージパッシングの話はしません!

Slide 7

Slide 7 text

歴史を振り返る 構造化プログラミング モジュラープログラミング データ抽象 抽象データ型 クラス

Slide 8

Slide 8 text

データ抽象とその手段としての抽象データ型 // 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 #include 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章 オブジェクト指向プログラミング

Slide 9

Slide 9 text

データ抽象とその手段としての抽象データ型 ● 抽象データ型とは、データ抽象を実現する手段のひとつとして提 案され、その具体的実装としてクラスが多くの機能に導入された。 ● クラスとはモジュール化の手法のひとつと言える。 ● つまり、クラスベースのオブジェクト指向におけるソフトウェア構築 は、抽象データ型の構造化された集合としてシステムを構築する ことである。

Slide 10

Slide 10 text

マルチパラダイム・モデリング ● 現在では多くのプログラミング言語で関数がファーストクラスオ ブジェクトであり、関数を他のデータ型と同等に扱うことによって モジュール間の依存関係を適切にできる可能性がある。 ○ ポリシーパターン、サービスパターンなどは関数に他ならな い。 ● 抽象データ型はその名の通りデータ構造を隠蔽するため、デー タモデルの理解は必要不可欠である。

Slide 11

Slide 11 text

マルチパラダイム・モデリング モジュール モジュール モジュール モジュール モジュール モジュール 抽象化されたモデル(モジュール構造)の世界 実際のデータ構造/アルゴリズムの世界 関数適用 関数合成 関係演算 (SQL) グラフ演算 手続き処理 有限オートマトン

Slide 12

Slide 12 text

計算モデル ● 抽象機械型計算モデル ○ チューリングマシン、有限オートマトン ● 命令型計算モデル ○ フローチャート ● 関数型計算モデル ○ 帰納的関数、ラムダ計算 ● 論理型計算モデル ○ 述語論理 『計算モデルとプログラミング』

Slide 13

Slide 13 text

計算モデルとしてのデータモデル ● 一般にデータモデルと呼ばれるものも、それを用いることで特定 の計算を行いやすくなるという意味で計算モデルと見なすことも できる ○ 例: リレーショナルモデル => リレーショナル演算 ● ただし、チューリング完全であるとは限らない。

Slide 14

Slide 14 text

リレーショナルモデルとERモデル ● リレーショナルモデルは述語論理を背景とし、何らかの命題を満 たす事実の集合と捉えるデータモデル。 ○ 例: “識別子 $id の会員の名前は $name 、年齢は $age であ る” ○ 関係演算によるデータ操作が可能になる。 ● ERモデルは複数のデータモデルの包括的なビューとして提案さ れ、それ自体は計算体系を持たない。

Slide 15

Slide 15 text

ERモデルからその他のデータモデルへの変換 ネットワークモデル リレーショナルモデル エンティティセットモデル

Slide 16

Slide 16 text

まとめ ● 現代のソフトウェア開発はほとんどの場合マルチパラダイムでの 設計が可能である。 ● 構築するソフトウェアを抽象化されたモジュールの集合と捉え、そ れらの間の依存関係をどのように設計するかがモデリングの重 要な観点である。 ● それぞれのパラダイムの得手・不得手を理解し、最適なモデルを 選択することが設計者には求められる。

Slide 17

Slide 17 text

ご清聴ありがとうございました。