📝データ指向プログラミング

📝データ指向プログラミング

データ指向プログラミング(Data-Oriented Programming)まとめ

データ指向プログラミングとは #

データ指向プログラミング(Data-Oriented Programming, DOP).

データ駆動型プログラミング(Data-Driven Programming)とも呼ばれる.

データ駆動設計(Data-DrivenArchitecture)と混同しがち. これはドメイン駆動設計の業界用語.

Data-Oriented Programmingの方がClojure界隈で使われているようだ.

またデータ指向設計(Data-Oriented Design)という用語がゲーム業界やC++界隈で使われているように見える(たぶん違う概念).

データ指向プログラミングのコンセプト #

📚Data-Oriented Programming by Yehonathan Sharvit より.

  • Separate code from data.
  • Model entities with generic data structures
  • Data is immutable
  • Data is Comparable by value
  • Data has a literal representation

Thinking in Data の動画もよい.

ClojureはDefaultでData-Oriented Programmingできるので, どちらかというとClojureのDataに対する設計思想みたいなものが感じられた.

data as code example #

コードをデータとして扱う. 以下具体例.

Ant #

Javaのビルドツール.

  • data: XMLでビルド, メンテナンス, テストなどの仕様を記述して
  • code: Ant プログラムでbuild.xmlを読み込んで処理を実行, xxx.jarを生成.

XMLで記述していくところに拡張性の無理があったが, こうやって宣言的に仕様を定義するところにはインサイトがあった.

Clojure Compiler #

Clojureのcompilerは, Clojureのcodeをdataとして受け取り(data as code), 評価して別のデータやコードを返す.

client-server model #

Web ServerはClientからJSONを受取り, なんらかの処理をしてJSONを返す.

first-class data #

(詳しく調べてないのであとで書き直す可能性あり).

おそらく最近できた造語で, 第一級オブジェクト(first-class object) の中で特にデータに着目してプログラムを組み立てるときの文脈で出る言葉.

データはImmutableでPersistent. ドメイン駆動設計の値オブジェクト.

📚Data-Oriented Programming by Yehonathan Sharvit #

Data-Oriented Programming の書籍を書いた人. Manningより出版.

この書籍はJavaで書かれている. おそらく, Clojureではこのパラダイムはよく知られているので, 他の言語のコミュニティへ紹介したいという意図がありそう.

2021に投稿されたYoutube動画はいくつもあるがだいたいスライドは同じ.

どちらかというとblogに書籍の内容の一部が書いてあるのでこっちがわかりやすかった.

オブジェクト指向プログラミングとの比較 #

オブジェクト指向(OO)ではドメインをオブジェクトでモデリングする. オブジェクトはMutableなデータ(aka. 状態)とそれを操作する特定の関数をひとつのデータとして扱う.

  • Write code as methods inside classes
  • Encapsulate data as members inside classes

データ指向(DO)ではドメインをImmutableなデータの集合でモデリングする. データは関数で操作するが, その関数は汎用的=特定のデータに依存しない.

OOの世界では, 世界をオブジェクトでモデリングすることを徹底的に洗脳される. その結果データは透明性を失い, 汎用的な関数による操作もできない.

カプセル化やインタフェースはMutableなデータを扱う上でのGood Practiceであるが, そもそもデータ構造が同じでImmutableであればいいのでは?という話になる.

cf. 📝オブジェクト指向プログラミング

関数型プログラミングとの比較 #

データを第一級データ(First-Class Data)をベースにしてプログラムを組み立てるのがデータ指向の考え方.

一方, 関数型プログラミングは第1級関数が大事な概念.

first-class Data = first-class object - first-class function

データ指向という言葉自体がまだ知名権を獲得していない造語のイメージがある. 関数型プログラミングとして慣れ親しんでいるパラダイムの中で, さらに不定普遍のデータを中心にプログラムを書いていこうという想い.

cf. 📝関数型プログラミング

References #

Active Recalls #

データ指向プログラミングの文脈におけるData-Oriented/Data-Drivenとはどのような概念ですか? #

第一級データ(First-Class Data)をベースにしてプログラムを組み立てる概念.

first-class Dataとは first-class object - first-class functionのこと.


Tags