More Related Content
"Formalizing Architectural Connection" 紹介 "Problem Frame Patterns" 紹介 Why-is-ImplementationPattterns-important-so-much Similar to "Documenting Frameworks using Patterns" 紹介 (20)
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演 Janog31 bof-pattern-sasaki-01 Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標 Scrum alliance regional gathering tokyo 2013 pub メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF Pattern mining-scrum gatheringtokyo20130115 Cedec2012 ai-contest-design-patterns-principles 2019年度 若手技術者向け講座 デザインパターン 1997 情報処理学会論文誌-自然言語要求仕様からオブジェクト指向設計図を自動生成するシステム Mahout JP - #TokyoWebmining 11th #MahoutJP Modeling in the Agile Age and casual astah models メディア・アート II 第1回: ガイダンス openFrameworks入門 ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計 Object-Funcational Analysis and design ソーシャルウェブ と レコメンデーション -第4回データマイニング+WEB勉強会@東京 More from Tadayoshi Sato (7)
Red Hat Tech Night 2019.5 - Camel 3 and Beyond... Red Hat Tech Night 2018 - Apache Camel Camel on Cloud by Christina Lin ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation "Detecting Defects in Object Oriented Designs: Using Reading Techniques to In... "The Coming-of-Age of Software Architecture Research" 紹介 "Documenting Frameworks using Patterns" 紹介
- 1. Ralph E. Johnson, Documenting Frameworks using Patterns OOPSLA ’92 2006 年 1 月 26 日 発表者 : 佐藤匡剛 [email_address]
- 2. 要旨 フレームワークの文書は、以下の 3 つを記述する必要がある フレームワークの目的 フレームワークの使い方 フレームワークの設計の詳細 一組のパターン ( a set of patterns ) として記述することで、文書は上記要件をすべて満たせる HotDraw を例に、文書化の方法を示す
- 4. はじめに パターン言語とは 建築家C. Alexanderが考案 ( 70 年代) 人々が家やコミュニティを設計するためのもの パターン言語 = 一組のパターン パターン = ある特定の問題への解法を記述したもの Alexanderのパターン言語は、一般人(非建築家)のための文書 日常的な設計問題に焦点をおく コンサートホールや教会ではなく、寝室や住宅の建て方
- 6. フレームワーク = 「 一組のクラスで表された、 再利用可能なプログラムの設計 」 抽象度が高いので、文書化が難しい 専門家が設計して、一般プログラマが使うもの フレームワークの文書化には、パターンが有効 主な読者は、専門家でなく一般プログラマ 想定読者がAlexanderのパターン言語と同じ 本論文では、パターンを使ってフレームワークを文書化する一手法を示す
- 7. 1. パターンの書式 パターンの重要な特徴 統一された書式 パターンが別のパターンを導出する構成 パターンの書式 問題の記述 様々な解法についての詳細な議論(+ 具体例) 解法のサマリ 解法を補完する別のパターンへの参照
- 8. パターンの具体例 ~ 描画ツールフレームワーク HotDraw のパターン ~ パターン 4 : Complex Figures 図形には、視覚表現とともに内部構造をもつものがある。例えば、別の図形として表示されるような属性をもつものなどだ。こうした図形を、単純な図形の組み合わせで作成できるようにしたい。 PERT イベントのような複雑な図形は、より単純な図形から構成されていると考えられる。例えば、 PERT イベントは長方形に、タイトル、期間、終了日の文字図形が組み合わせられたものだ。 PERT イベントのような複雑な図形( complex figures )は、 CompositeFigure のサブクラスとする。(つづく)
- 10. パターンは「問題指向 ( problem-oriented ) 」である 解法指向 ( solution-oriented ) ではない 各パターンは、大きな設計問題の一部分を解いていく 解法はさまざま: サブクラスを作る (パターン 2 ) 既存のオブジェクトをパラメータ化する (パターン 10 ) いくつかのオブジェクトを連携させる (パターン 3 )
- 11. 2. フレームワークの文書化とは フレームワーク文書化の 3 つの目的 : フレームワークの 目的 を記述 フレームワークの 使い方 を記述 フレームワークの 内部設計 を記述 パターンで文書化すれば、この要件を満たせる (⇒ 付録「 HotDraw の文書化」を先に見てください)
- 12. 2.1 目的の記述 フレームワークの目的 = どの問題領域を設計したものか 文書で一番最初に説明されるべきこと 読者が探しているものかどうか、がすぐ分かる なるべく短くなければならない 誰もが簡単に読める パターン文書では、第一パターンがフレームワーク全体の動機を扱う 目的が最初に簡潔に示される 加えて、後続パターンへのロードマップも示す
- 13. 2.2 使い方の記述 実際に使ってみるまで、フレームワークなんか理解できない 多くの文書は、内部設計のことを先に書きたがる 読者が本当に求めているのは、料理本 ( cookbook ) 中には、料理本から始めている文書もある MacApp 、 Smalltalk-80 の MVC パターン文書は基本的に上記 2 つと似ているが次の 2 点が優れている : 構造化されている 本当の料理本のように、料理が完成するまでを説明する
- 15. 3. 具体例の役割について 具体例は、文書の中で重要な役割を果たす フレームワークを具体化し、理解を助ける パターンでも、ふんだんに具体例が使われる 使い方や内部設計の例ではなく、フレームワークが何に使えるかを示す例 ex) UIフレームワーク ⇒ UIの例 コンパイラフレームワーク ⇒ コンパイラの例 後続のパターンへの動機付けにもなる パターンの練習にも使える 実例(実際のアプリケーション)も示す
- 17. 4. パターンによる HotDraw の文書化 HotDraw 意味論的描画エディタのフレームワーク 作者は、 Tektronix 社の K. Beck & W. Cunningham HotDraw を選んだ理由 描画エディタのフレームワークは他にもある Unidraw 、 DRAW_Master 、 GUI_Master 他に比べて作りがシンプルだから 実際の文書は、 付録 を参照
- 18. 5. 文書化作業を振り返る パターン文書完成までの経緯 OOPSLA’91 で K. Beck に会ったのがきっかけ その後、大学院生に最初の文書を見せたが役に立たなかった パターンは、まだ具体例も内部設計も含まれない単なる文章 Alexander のパターン言語を読み直して、具体例と内部設計の必要性を認識し、文書に盛り込んだ パターンの構造が出来上がったが、不完全(説明不足/重複) Smalltalk プログラマに見せて、フィードバックを得た HotDraw の文書としては十分と言われたので、ここで完成! これ以上の改善には、管理された実験下でのフィードバックが必要 (非形式的な実験方法では、ここまでで限界)
- 23. パターン 1: Semantic Graphic Editors HotDraw は構造化された描画エディタのためのフレークワークである。回路図や見取り図、楽譜、プログラム設計図といった、専門的な二次元の図を描くためのエディタを構築するのに使うことができる。図の要素間には制約をつけることができ、ユーザのコマンドに応答することができる。また、アニメーションを走らせることもできる。エディタは一個のアプリケーションでもよいし、大きなシステムに組み込むこともできる。 [... 詳細な説明 ...] HotDraw を使って描画エディタを設計するには、まず図を構成する最小要素を列挙せよ。各要素は、 Figure のサブクラスとなる。図がアニメーションをする必要があるかを決めよ。パレットに載せるツールを列挙し、 DrawingEditor のサブクラスに tools メソッドを定義せよ。 tools メソッドは、パレットを構成するツールの配列を返すようにする。 Figure のサブクラスを作るには、 Defining drawing elements (2) を見よ。図をアニメーションさせるには、 Animating drawings (9) を見よ。描画エディタを大きなツールに組み込むには、 Embedding a drawing in another tool (7) を見よ。ツールをパレットに載せるには、 Tools (8) を見よ。
- 24. パターン 2: Defining Drawing Elements 図に含められる基本図形には、無限の種類が考えられる。そのため、アプリケーションごとに新しい図形を作成できる仕組みが必要である。 [... 詳細な説明 ...] HotDraw アプリケーションの描画要素はすべて Figure のサブクラスであり、 displayOn: 、 origin 、 extent 、 translateBy: を実装しなければならない。そのほか、 Figure のサブクラスはアプリケーションの必要に応じて好きなメソッドを実装できる。 displayOn: を記述するには、 [ParcPlace 90] を見よ。ユーザが図形のサイズや色を変更できるようにするには、 Changing drawing element attributes (3) を見よ。 PERT イベントのような複雑な図形の実装方法を知るには、 Complex Figures (4) を見よ。異なる図形間に制約条件を課すには、 Constraints (5) を見よ。
- 25. パターン 3: Changing drawing element attributes 図形の属性を編集するには、少なくとも 3 つの方法がある。ハンドルによる方法、ポップアップメニューによる方法、特定のツールによる方法である。どの方法が適切かは、ケースに応じて変わる。 [... 詳細な説明 ...] 編集したい描画要素の属性を列挙せよ。各属性について、ハンドル、メニュー、ツールのどれを使って編集するかを決めよ。そして、 handles メソッド、 menu メソッド、または描画エディタのツール一覧を更新せよ。 新しい種類のハンドルを作るには、 Handles (6) を見よ。新しい種類のツールを作るには、 Tools (8) を見よ。
- 26. パターン4: Complex Figures 図形には、視覚表現とともに内部構造をもつものがある。例えば、別の図形として表示されるような属性をもつものなどだ。こうした図形を、単純な図形の組み合わせで作成できるようにしたい。 [... 詳細な説明 ...] 複雑な図形は CompositeFigure のサブクラスとし、その一側面を表示する図形をその構成要素とする。 構成要素間に制約条件を課したいときは、 Constraints (5) を参照せよ。
- 27. パターン5: Constraints ある図形の属性が、別の図形の属性に作用することがある。たとえば、図 1 (論文)の PERT チャートエディタの中で、イベントの開始日は、それに先行する(つまり接続している)全イベントの終了日の最大値として与えられる。別の例では、イベント間を繋ぐ線の終端点は、そのイベントの位置に依存する。ハンドルも、それが取り付けられている図形に依存している。 [... 詳細な説明 ...] 描画の中にある制約は、すべて制約オブジェクトとして表現する。 図形間に線を繋いだときに自動的に制約が付与されるようにするには、 Adding Lines (10) を見よ。
- 28. パターン 6: Making new kinds of handles ハンドルによって振舞は変わる。図形のサイズを変更するハンドルもあれば、色を変更するハンドルもあるし、新しい線を生成するハンドルもある。一般的に、あらゆる操作をハンドルを使って実行することができるだろう。さらに、ハンドルは図形の好きな部分に取り付けることができ、図形が動くと一緒に動く。こうしたことから、ハンドルはなんらかの形でパラメータ化されなくてはならない。 [... 詳細な説明 ...] ドラッグによってひとつの図形の一面だけを変更するハンドラは、 TrackHandle インスタンスとする。ドラッグによって複数選択された図形の一面を変更するハンドラは、 SelectionTrackHandle インスタンスとする。ある図形から別の図形へ伸びる線を生成するハンドラは、 ConnectionHandle インスタンスとする。それ以外の機能を実現するハンドルを作るには、 Handle のサブクラスを作成する。 ConnectionHandle を生成するには、 Adding lines (10) を見よ。
- 29. パターン 7: Embedding a drawing in another program テキスト窓やボタン、リストなどを含んだ複雑なユーザインタフェースの中に、描画が組み込まれることがある。 HotDraw は Smalltalk-80 の MVC フレームワークの上に構築されており、複雑なアプリケーションの中に組み込めるようになっていなくてはならない。 [... 詳細な説明 ...] 複雑なアプリケーションの描画部分を構築するには、 DrawingView をアプリケーションビューの部分ビューとし、 DrawingView に対しては、 DrawingEditor のプロトコルに応答するモデルを渡せ。 DrawingEditor のプロトコルとは、 currentTool 、 menu 、 drawing 、 drawing: メソッドを実装することをさす。
- 31. パターン9: Animating drawings 制約、ハンドル、ツールでは、描画をユーザに対して反応させることができるが、描画そのものに生命を与えることはできない。アニメーションを行なうには、描画内のすべての図形を指揮する制御オブジェクトが必要になる。 [... 詳細な説明 ...] 描画にアニメーションを行なわせるには、描画を表すサブクラスに step メソッドを定義せよ。このメソッドは、アニメーションの次のステップを実行するものである。
- 32. パターン10: Adding lines 図形を接続するときに、よく線が使われる。こうした接続には、たとえば他のアクションの副産物として生成された線など、なんのセマンティクスももたないものもある。この場合は、線を削除したり移動させたりしても、他の図形に影響を与えることはない。その一方で、線を加える結果として新たな制約が発生したり、新たな図形が生成されることもある。 [... 詳細な説明 ...] 線を生成して図形を接続するには、ユーザは一方の図形の ConnectionHandle を押さえるようにする。 ConnectionHandle をパラメータ化することで、 2 つの図形を繋いだときに他のアクションも実行させられるようにする。こうすることで、制約を付加したり、接続が許されるかをテストしたりできるようになる。
- 33. 感想 現在の「 GoF デザインパターン」とは異なる ボキャブラリ化が目的ではない パターンに普遍性がない Alexander のパターン言語に近い 論文は、 パターンの書式を使ってフレームワークを文書化する試み に読める 目的は、フレームワークを文書化すること パターンカタログ/言語の記述が目的ではない
- 34. 関連研究との違いを考察して欲しかった たとえば ... Clements らの「 module guide 」 P. Clements, D. Parnas & D. Weiss, “The Modular Structure of Complex Systems.” IEEE Trans. in Software Engineering , SE-11(3): 259-266, 1985. 情報隠蔽の原理によって、ソフトウェアを文書化する試み [ 私見 ] module guide はモジュール(=計算単位)の視点からソフトウェアを分割 ( decompose ) するが、本論文は問題に基づいてソフトウェアを分割する。
- 36. 参考論文 K. Beck & R. Johnson, Patterns Generate Architectures , ECOOP’94 デザインパターンからアーキテクチャを創出する試み トップダウン式の本論文に対する、ボトムアップのアプローチ 同じ HotDraw を題材にしている