Slide 1

Slide 1 text

オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜 2024/06/14 設計ナイト2024 末並 晃 @a_suenami

Slide 2

Slide 2 text

自己紹介 ● 末並 晃 @a_suenami ● 生息している界隈: DDDとか、TDDとか、RDBとか ○ 基本エンジニアが集まってるところならどこへでも ● お仕事で使ってる技術スタック: Rails, React (Next.js), Node.js, Java ○ 最近は terraform おじさんです ● 好きな RDBMS: PostgreSQL ● 好きな制約: チェック制約 ● 好きな焼肉の部位: ハラミ ● 好きな(ry

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

2年前

Slide 6

Slide 6 text

2年前 https://speakerdeck.com/a_suenami/toransakusiyonsukurihutohatokokaralai-tafalseka-toransakusiyonsukurihu tohahe-zhe-ka-toransakusiyonsukurihutohatokohexing-kufalseka-number-sekkeinight

Slide 7

Slide 7 text

というわけで、(実は)前回の続編です。

Slide 8

Slide 8 text

今日話すこと DCI とかロール指向設計とかについて話します

Slide 9

Slide 9 text

DCI (2年前のスライド再び) 手続きやアルゴリズムの境界とデータの境界は異なり、伝統的なオブジェクト指 向ではそれを共通の機構で実現しようとしている(という問題提起) https://digitalsoul.hatenadiary.org/entry/20100131/1264925022

Slide 10

Slide 10 text

ロールとオブジェクト

Slide 11

Slide 11 text

What the system is? or does? ● What the system is ○ それは何であるか ○ データ(コプリエン氏はこれを「クラス」と呼ぶ) ● What the system does ○ それはどのように振る舞うか ○ ロール https://www.amazon.com/dp/0470684208

Slide 12

Slide 12 text

OOram https://en.wikipedia.org/wiki/Object-oriented_role_analysis_and_modeling

Slide 13

Slide 13 text

異なる抽象機構 ● The “object” is the “is” abstraction. ● The “role” is “why” abstraction. ● The “type” is “what” abstraction. ● The “class” is the “how” abstraction.

Slide 14

Slide 14 text

モデリング言語として

Slide 15

Slide 15 text

ここまでのまとめ ● オブジェクトはロールを合成した結果である。 ● UML がそうであるように、ロールを手がかりにすることで対象の さまざまな見方(ビュー)をすることができる。 ● すべてのロールを事前に合成する方法もあるし、インスタンス生 成時、あるいはランタイムで動的にロールを付与する方法もある ○ インスタンス生成時: Scala の trait ○ 実行時: Ruby の module extend ● …

Slide 16

Slide 16 text

事前にすべてのロール合成

Slide 17

Slide 17 text

インスタンス生成時にロールを指定 & 実装

Slide 18

Slide 18 text

実行時に動的にロールを指定

Slide 19

Slide 19 text

我々はここから何を学ぶべきか

Slide 20

Slide 20 text

ロール指向は何の役に立つか ● 実装モデルとして(先述) ○ トリグヴェ氏は言語機能に依存しない手法だと言っている。 ○ コプリエン氏がサンプルコードを書いていることもあり、実装手 法と見られがちである。 ● モデリング言語として(先述) ● アプリケーションアーキテクチャ、あるいはシステムアーキテク チャとして ● …

Slide 21

Slide 21 text

再掲

Slide 22

Slide 22 text

データモデルとロールモデル ● イミュータビリティを重視する現代的なプログラミングスタイル ○ What the system is は永続化データストアを前提に設計され る(≒データモデル) ● 短命なオブジェクト ○ Web システムの場合、オブジェクトがランタイムに存在するの はリクエストからレスポンスの間という極めて短い時間である 場合が多い ○ この場合、オブジェクトはもっぱら What the system does の みを表現する

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

まとめ ● オブジェクト指向で設計したから手続きがなくなるというわけでは ない(in 設計ナイト2022) ○ むしろ、オブジェクトの表現力があればこそ、より手続きの記 述のセマンティクスの次元が上がると言える ● 手続きやアルゴリズムの境界とデータの境界は異なる(ことがあ る) ○ 境界が一致している部分はデータ抽象によるオブジェクト指 向はよく機能する ○ そうでない場合、ロールを手がかりに設計をしてみるとよいの ではないか

Slide 25

Slide 25 text

夢ではなく、すでに僕たちはその世界にいる タイトル回収: 人類は再び DCI の夢を見るか

Slide 26

Slide 26 text

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