Upgrade to Pro — share decks privately, control downloads, hide ads and more …

異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020

Akira Suenami
February 16, 2020

異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020

Akira Suenami

February 16, 2020
Tweet

More Decks by Akira Suenami

Other Decks in Technology

Transcript

  1. 自己紹介 • 末並 晃 @a_suenami • 生息している界隈: DDDとか、TDDとか、RDBとか • お仕事で使ってる技術スタック:

    Rails, React, Java, PHP • 好きな RDBMS: PostgreSQL • 好きな制約: チェック制約 • 好きな焼肉の部位: ハラミ • 好きな(ry
  2. 2つのオブジェクト指向 • クラスベースのオブジェクト指向 ◦ 抽象データ型のスーパーセット ◦ モジュール化/データ抽象の手段としてユーザ定義型を利 用する ◦ 現在よく知られているのはおそらくこちら

    • メッセージベースのオブジェクト指向 ◦ オブジェクト同士がメッセージを送る(メッセージパッ シング)のをプログラミングの基本とするという考え方 ◦ 徹底的な動的性、遅延結合、メタプログラミングなどを 特徴とする
  3. データ抽象とその手段としての抽象データ型 // 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章 オブジェクト指向プログラミング
  4. 設計要素とパラダイム 抽象化によって抽出されるもの 具象となるもの( “捨て” られるもの) 抽象データ型 型名、メソッド名と引数リスト 型の実装 サブルーチン サブルーチン名、引数リスト

    処理内容 関数 関数名、適用対象と結果の型 計算内容 RDB スキーマ定義 結果セットの構造 RESTful API URI、パラメータ、レスポンス内容 利用するプログラミング言語、ミドルウ ェア
  5. 計算モデル • 抽象機械型計算モデル ◦ チューリングマシン、レジスタマシン、有限オートマトン ◦ 計算とは “状態を変更すること” である •

    代入・命令型計算モデル ◦ フローチャート ◦ 計算とは “順番に代入・命令をすること” である • 関数型計算モデル ◦ 帰納的関数、ラムダ計算 ◦ 計算とは “関数を適用すること” である • 論理型計算モデル ◦ 述語論理 ◦ 計算とは “事実集合に問い合わせること” である 『計算モデルとプログラミング』
  6. “The entity-relationship model can be used as a basis for

    unification of different views of data”
  7. ERモデル → リレーショナルモデル 社員番号 名字 名前 所属 社員 部署 社員

    番号 名字 名前 部署 番号 部署名 社員番号 部署番号 部署番号 部署名
  8. ERモデル → ネットワークモデル 所属 社員 ・社員番号 ・名字 ・名前 部署 ・部署番号

    ・部署名 社員 部署 社員 番号 名字 名前 部署 番号 部署名 所属 社員 ・社員番号 ・名字 ・名前 部署 ・部署番号 ・部署名 所属
  9. ERモデル → エンティティセットモデル 所属 社員 部署 社員 番号 名字 名前

    部署 番号 部署名 社員番号: X 名字: XXX 名前: YYY 部署番号: X 部署名: ZZZ 名字 名前 所属 名前
  10. それぞれのデータモデル • リレーショナルモデルの “リレーション” は属性間の関係で あり、柔軟な関係をあとから構築できることが強みである。 • ネットワークモデルはデータレコードをノードとする有向グ ラフと捉えられ、グラフ演算などと相性がよい。 •

    エンティティセットモデルは EAV (Entity Attribute Value, 『SQLアンチパターン』)というアンチパターンとも考えら れるが、構造を固定化させず柔軟な構造を定義するのに適し ている。