$30 off During Our Annual Pro Sale. View Details »

マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi

Akira Suenami
February 09, 2020

マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi

Akira Suenami

February 09, 2020
Tweet

More Decks by Akira Suenami

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide