SSブログ

責務駆動設計はオブジェクト指向か? [そもそも論]

まず最初にお詫びしなければならない。
前のブログでは次回予告として「イベントシステムを扱う」と告げたのだが、それより先に責務駆動設計の文章が降りて来てしまったので、予定を変更してそちらを先にお届けする。

じつは先週の3/5に「ドメイン駆動設計」の勉強会に行ったのだが、そこで責務駆動設計の6つのロールの話が出て来たので、それをキッカケに色々と連想が広がってしまったのだ。この手の文章は書ける時に書いておかないと筆がさらに遅くなるから、イメージが湧き上がっている時に書くのが一番だ。というわけで「イベントシステム」の話を期待してた方はご容赦願いたい。

擬人化設計技法への誘い
というわけで今回は私の好きな「責務駆動設計」の話だ。
ただし、ここで責務駆動設計が何かという説明をするつもりはない。世間にはたくさんの責務駆動設計の解説があるので、ググってほしい。今回の話題は次の一点に尽きる。

「責務駆動設計はオブジェクト指向か?」

答え:責務駆動設計を世に広めた立役者「レベッカ・ワーフスブラックとアラン・マクキーン」がその著書「オブジェクトデザイン」でオブジェクト指向と言っているのだからオブジェクト指向である。以上、終了。


オブジェクトデザイン (Object Oriented SELECTION)

オブジェクトデザイン (Object Oriented SELECTION)

  • 作者: レベッカ・ワーフスブラック
  • 出版社/メーカー: 翔泳社
  • 発売日: 2007/09/13
  • メディア: 大型本



.......ま、それで済むなら記事になんかしないわけで、ちょっと引っ掛かっているからこそ、こうして話題にしているのだが、まずは本人たちの意見を尊重しておこう。





ただし、である。
お気付きの方もいるだろうが、このブログでは責務駆動設計のことを、世間のように「オブジェクト指向の主流」あるいは「一種」として扱ったことは一度もない。読み返してもらえば分かるだろうが、すべて「擬人化(指向)設計技法」の一種として扱っている。

とはいえ「オブジェクト指向ではない」と見なしているのかと言うと、そういうワケでもない。

オブジェクト指向という恐竜
皆さんは「獣弓類」と「竜弓類」というのをご存じだろうか?どちらも原始的な爬虫類だが、「竜弓類」は典型的な巨大恐竜に進化し、「獣弓類」は哺乳類へと進化した。「責務駆動設計」はこの「獣弓類」に似ている。

「オブジェクトデザイン」の原著は2002年発行だが、ワーフスブラックらの活動はOOPSLA'89 の論文『Object-Oriented Design: A Resposibility-Driven Approach』まで遡る。これはJavaの1995年より古い。当時もC++などのいくつかのオブジェクト指向言語は存在したが、オブジェクト指向が普及していたとは言えない状況だった。逆に言えばオブジェクト指向の方法論を確立しようと多くの流派がしのぎを削っていた時期だ。

「獣弓類」は恐竜とは違う系譜なのに、姿が似ている「竜弓類」と同じ「原始恐竜」の仲間に入れられた。それと同じように、「責務駆動設計」は「オブジェクト指向」という「恐竜」の仲間に入れられている。いやレベッカ・ワーフスブラック自らが「恐竜」だと宣言してしまっている。これはある意味仕方がないことだ。「じつは別系譜ですよ」なんて後からだから言えることで、始祖の獣弓類だって自分を周りの竜弓類と同類だと思っていただろう。

ただし、私は違いが気になるので、獣弓類は獣弓類と呼ぶし、責務駆動設計は「擬人化設計技法」の一種だと位置付けている。


 → 獣弓類は学問的には恐竜ではない
 → 擬人化設計技法も厳密にはオブジェクト指向ではない(と言われるようになるだろう)


擬人化設計技法の仲間たち
「擬人化設計技法」の見分け方はわりと単純だ。
まず、設計技法であって実装技術には成っていない。それは本来のオブジェクト指向との大きな違いである。例えば、今もネットワーク系や社会シミュレーション系でしぶとく生き残っている「エージェント指向」や私が勝手に提唱している「新エージェント指向」は実装技術を含むので、同じく擬人化を基点としていても、ここで除外される。まぁ、それらの設計技法だけは広義の擬人化設計技法と言えなくもない。(特にうちのはまだ大した実装ではないから設計技法みたいなものだ。苦笑)

それから技法の解説のかなり初期に、そのものズバリ「擬人化」という言葉が出てくる。仮に擬人化という言葉を使ってなくても、それに類することをやっていれば「擬人化設計技法」と言える。
例えば、ここで扱っている「PDC&BSP」をソフトウェア設計にも活かそうという技法(名前はまだない)だと「人のメタファ」という言い方をしている。

また、「ロール(役割)」という言葉が出て来たら「擬人化設計技法」にほぼ確定だ。先の「オブジェクトデザイン」でもロールを説明するために「擬人化」という言葉が登場している。

ロールとは責務の集合であるが、同時にそれは責務を負う存在でもある。ロールには様々なタイプがあるが、人とイメージが重なるものが多い。先の「オブジェクトデザイン」を例にとると「記録保持役、構造役、サービス提供役、制御(頭脳)役、調整役、インタフェース(窓口)役」という6つを基本ロールとして挙げており、他のロールもこれらの基本ロールのいずれかに分類できるとしている。このうち「構造役」だけは人が演じる役として連想できないが、他は何らかな形で人のイメージと重なることができる。(それでも、人と重ねようとしないコンピュータオタクもたくさんいるだろうが(苦笑)それはとりあえず置いておこう。)

6つの基本ロール
 ・記録保持役
 ・構造役
 ・サービス提供役
 ・制御(頭脳)役
 ・調整役
 ・インタフェース(窓口)役


ジル・ニコラ等の「ストリームラインオブジェクトモデリング」にも「擬人化」や「ロール」という言葉が出てくる。例えば2.1.1 オブジェクト思考には「原則7 オブジェクトを擬人化せよ」という項がある。その後も原則13までは擬人化やロールについての原則だ。原則は全部で98個あるので率的には多くないが、その後も人やロールと言うキーワードは随所に出てくる。それに原則1~6が「原則中の原則」だから、それに次ぐ重要度を与えられていると言って良いだろう。だから私は「ストリームラインオブジェクトモデリング」も擬人化設計技法の一種と見なしている。少なくとも擬人化設計技法が大きなウェイトを占めているのは確かだろう。


ストリームラインオブジェクトモデリング―パターンとビジネスルールによるUML

ストリームラインオブジェクトモデリング―パターンとビジネスルールによるUML

  • 作者: ジル ニコラ
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/12
  • メディア: 単行本



原則1 「なぜ」の「どのように」は、「なに」である
原則2 オブジェクトモデリングの視点
原則3 新ビジネスのオブジェクトモデリング
原則4 プロセスエンジニアリングのためのオブジェクトモデリング
原則5 ユースケースの前にオブジェクトモデリング
原則6 オブジェクトモデリングによって複雑さを管理する

原則7 オブジェクトを擬人化せよ
原則8 オブジェクトに責任を与えよ
原則9 オブジェクトの責任
原則10 オブジェクトであるかのように会話せよ
原則11 人の原則
原則12 コンテキストの原則
原則13 ロールの原則




これらの設計技法が生まれた背景は、おそらく、業務ソフトが扱う問題の多くが実社会と密接に関わっており、その実社会の中の「人」を無視できなかったからだ。

最近話題の「エリック・エヴァンスのドメイン駆動設計*」にしてもそうだが、彼らの関心の中心は実装技術ではなくドメイン(問題領域)にある。そして、そのドメインは実社会を写し取ったもので、大抵は人が含まれる。

(*モデル駆動設計が中心の本だが、責務駆動設計が終盤の美味しいところで登場する。また、オブジェクト指向と責務駆動設計を同一視しているフシがある。)


エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

  • 作者: エリック・エヴァンス
  • 出版社/メーカー: 翔泳社
  • 発売日: 2011/04/09
  • メディア: 大型本



つまり、これらを考えた人にとって「オブジェクト指向かどうか?」は正直どうでも良くて「一番、親和性が高かったから」ぐらいの感覚で「オブジェクト指向」を選択したのだろう。

おそらく、オブジェクト指向より社会性に優れた実装技術が出て来ていたら喜んでそちらに乗り換えただろうが、残念ながら、「エージェント指向」や「関数型言語」は乗り換え先に選ばれなかった。

ソウコウ、しているうちに今日では「責務駆動設計こそがオブジェクト指向の中心」という人たちまで出て来たので、さすがにこれから良い実装技術が出て来ても、乗り換えるのは難しいかもしれない。(そうでもないかな?)

ちなみに今日、責務駆動設計が重視される様になってきたのは、ドメインに再び注目が集まっているからでもあるが、同時に、要求が高度化されて従来のオブジェクト指向では対応できないことが増えて来たからでもある。

進化への圧力
iPhoneのSiriのように「強い人工知能」が次第に登場して来ている今日では、顧客の要望もそれに合わせて次第に難しくなって来ている。皆さんにも顧客から「手に余る」高度な処理を要求されて困った経験を持つ人がいるだろう。

こうした時、「伝票」とか「オブジェクト」とかだけで考えていると高度な処理が浮かばなくて困るのだが、人間とは不思議なもので、擬人化して考えると結構色んなアイデアが浮かんでくる。それはおそらく高度に振舞う人間のことを私たちが良く知っているからだろう。

それにしても「擬人化」というのはオブジェクト指向信者にとって何とも都合の良い言葉だ。擬人化思考中に考えているのは、「人」のことであって「オブジェクト」のことではないはずだが、「擬人化」という言葉を使うことで、全てがオブジェクトの範疇内であるかの様にすり替えることができる。

しかし、これはあくまでレトリックだ。
例えが適切か分からないが、エージェント指向とオブジェクト指向の違いは「頭脳」の扱いにある。つまり「知能」と「コントローラ」は類似性はあってもレベルが全く違う。そこまで極端でなくても、同種の違いが擬人化設計技法と本来のオブジェクト指向の間にもある。エージェント指向の問題点は一般のプログラマーが必要とする様な設計論や技術を提供できなかったことだが、今日では普通のアプリ開発者にも高度な処理が求められるようになって来ていて、ちょうどそこにハマったのが責務駆動設計などの擬人化設計技法だ。ではこの先、もっと高度な処理が普通の開発者に求められるようになるとしたらどうなるのか?

さながら恐竜の絶滅期のように、リーマンショック以降の案件激減はソフトウェア業界に少なからぬ爪痕を残した。スマートフォンやソーシャルメディアに活路を見出したところも多いだろうが、それは暖かい地域に逃げ出したことを意味する。それはそれで正しい経営判断だが、厳しい冬を凌いでいる人たちはどうするのだろう?高度な要求に応えるために、獣弓類から哺乳類に進化するのだろうか?仮に進化するとして、その哺乳類が暖かい地域にも進出したらどうなるのだろうか?

擬人化設計技法という「獣弓類」が「哺乳類」に進化するには、実装技術の存在が必要不可欠だ。恐竜(オブジェクト指向)に成れ(慣れ)なかった小さい生き物が、恐竜たちの中で生き抜くために責務駆動設計を「隠れ蓑」として利用するのも悪くないが、せめてDSL(ドメイン制限言語)で良いから「哺乳類」に登場してほしいものだ。今日、哺乳類に相当する様なDSLってどれぐらい誕生しているのだろう?いくつか、あっても良い気がするが。

もちろん、私は哺乳類が誕生することを願っている。というか、自分でも作ろうとしている。それは弊社の「新エージェント指向宣言」を見ても明らかだ。ただこれは私個人の力で何とかなる範囲を大きく超えている。あまりに先走ったことをし過ぎて、逆に私の方が絶滅しそうだ。というわけで現在「お仕事募集中」である。恐竜的案件でも構わないから、試しに使ってやろうと言う方は是非ご連絡をいただきたい。もちろん、いっしょに哺乳類を生み出そうと言う話は大歓迎である。

例え話が過ぎて話が逸れた。

責務の定義からの考察
責務駆動設計についてだが、私や世間の分類がどうであれ、やはり名前の通り、本質は「責務」にある。ロールは無視されることもあるが、責務を無視した責務駆動設計などあり得ない。
その「責務とは何か?」については、第2回で触れた。もう一度ワーフスブラックらの定義を見てみよう。

・オブジェクトが行う行動
・オブジェクトが持つ知識
・オブジェクトが他に影響を与える主要な判断

これを踏まえた上で最初の問いに答えよう。
「責務駆動設計はオブジェクト指向か?」...全ての項に「オブジェクト」と言う言葉が並んでいるから、オブジェクト指向と見なせる。が、同時に旧来の「オブジェクト指向的発想」では抜け落ちてしまう「判断」が含まれる。これは擬人化の証だ。そして注意深く書かれた一文が示すように「判断」は「協調」において効力を発揮する。つまりこの責務の定義はコラボレーションにおける「判断役」を暗示している。これは擬人化設計技法にとって大切な「進化の萌芽」だ。基本6ロールを上手く使えば、この芽を育むことができる。もちろん「PDC&BSP」もそれを助ける。

(私はつい妄想してしまうのだが、擬人化設計技法に実装技術が伴うまでに進化した時、はたして責務の定義に「オブジェクト」と言う言葉は残っているだろうか?....まあ、その答えを出すのはやめておこう。大事なのは言葉じゃなくて進化そのものだ。)

今回はここで終わるが、責務駆動設計は簡単には語り尽くせないテーマなのでこれからも取り上げるつもりだ。次に扱う時にはGRASPパターンと擬人化設計技法を対比しよう。GRASPはオブジェクト指向の文脈で責務駆動設計を行うには外せない重要な概念だが、擬人化とは根本的に相容れない部分もある。そこを深堀して行こう。


さて、次回こそイベントシステムを分解する。執筆速度が遅いくせに、書きたい記事が目白押しで、キツい日々が続くが、あと最低10回分ぐらいは続けたいので頑張って行こう。


nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:学問

nice! 0

コメント 2

DavidTug

Hello, I'm new here, So i'm not sure in the event this section certainly is the right place to create this and sorry for this, but I was hoping a person here on would be able to aid me.
I'm just wondering if anyone knows any specific trusted provider for admission counseling, I’m a university student which need a very good source regarding such services. Is this website good and anyone worked with them ?
<a href=https://manoket.lt/ket-bilietai>ket bilietai mokytis</a>

<a href=https://manoket.lt/nemokami-ket-testai>ket testai nemokami</a>

<a href=https://manoket.lt/keliu-eismo-taisykles>regitra keliu eismo taisykles</a>

Additionally please introduce any good as well as comprehensive website directory for more inormation about these services. I actually appreciate it.
by DavidTug (2020-10-31 02:14) 

Floydengerwic

Датчики давления Метран 55 предназначены для работы в различных отраслях промышленности, системах автоматического контроля, регулирования и управления технологическими процессами и обеспечивают непрерывное преобразование измеряемых величин - давления избыточного, абсолютного, давления-разрежения, гидростатического давления в выходной сигнал.
<img src="https://www.emerson.ru/resource/image/4847546/portrait_ratio1x1/555/555/b49d3a19a09633cde41600c213d5de5b/rB/prod-metran-55mp.jpg">
<a href=https://zarajsk.neftel.ru/datchik-davlenija-metran-55> метран 55 дмп 331 в Зарайске </a>
by Floydengerwic (2021-07-27 17:12) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

MVCのコントローラは頭脳役か?|- ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。