phpmentors-jp/mpdosaka

第5章 オブジェクト指向分析

iteman opened this issue · 9 comments

この章では、問題ドメインを分析するテクニックの例として、オブジェクトパラダイムを取り上げる。これまでの章で説明してきた共通性と可変性の2つの原理に基づいて、オブジェクト指向分析を展開していく。オブジェクトパラダイムが最適なパラダイムであると仮定できるようなアプリケーションを対象にして、共通性と可変性の原則による分析を実施し、設計対象を導き出してみよう。
新装版 マルチパラダイムデザイン p.111

ソフトウェアにおけるパラダイム

5.1 パラダイムとオブジェクト (p.111)

「パラダイム」という用語は、クーンの古典的な著書[Kuhn1970]によって初めて一般に普及し、オブジェクトパラダイムの流行とともにソフトウェア分野で定着した語である。パラダイムとは、我々が自分の身の回りの世界を理解しようとするときに使う慣習の組である。ソフトウェアにおけるパラダイムは、抽象を形にする方法を規定する。あなたの世界は何で作られているのか、あなたはこの世界を何に分割するつもりなのか。手続きか、データレコードか、モジュールか、あるいはクラスとオブジェクトなのか。

モデリングツールとしてのパラダイム

5.1 パラダイムとオブジェクト (p.111)

実践的立場から見れば、パラダイムは、世界を個々に理解できる程度のピースに分割するための規則、ツール、慣習をコード化する。

オブジェクト指向によるモデリング

5.1 パラダイムとオブジェクト 5.1.3 仮想関数 (p.114)

オブジェクト指向分析では、通常、アプリケーションドメインの構造からオブジェクトとクラスを抽出する。そのとき、最もよく焦点をあてられるのは、クラス階層である。ほかの分析の活動と同様に、オブジェクト指向分析において良いオブジェクト、良いクラスをどのようにしたら抽出できるかは、分析者の直観に依存する。そして、その直観は過去に出会った優れたクラスやオブジェクトに裏づけされる。筆者の経験では、最も効果的なオブジェクト指向分析のテクニックは非形式的なものである。

マルチパラダイムデザインでオブジェクト指向を定義すると…

5.1 パラダイムとオブジェクト 5.1.4 オブジェクト指向:もう1つの定義 (p.114)

共通性と可変性を使ってオブジェクトパラダイムを定義することもできる。ドメイン辞書の作成から始めるとすれば、オブジェクト指向分析は、共通性分析、すなわち型の共通性を探すことに基礎を置いているといえるだろう。型はシグネチャの集合であり、シグネチャは名前と振る舞い(に関する共通性)を捉えていることを思い出そう(2.3.2項)。オブジェクト指向分析における最初の抽象化ステップは、振る舞いによってグループ化された抽象(abstraction)のファミリを構築することである。

オブジェクトパラダイムを一言でいえば…

5.1 パラダイムとオブジェクト 5.1.4 オブジェクト指向:もう1つの定義 (p.116)
  • 構造と振る舞いの可変性を、クラスという明示的なプログラミング要素によって捉える方法である。
  • これらのクラスを、振る舞いの共通性によって抽象へとグルーピングする方法である。
  • 似たクラス間のデフォルトの振る舞いを共有する方法である。
  • 実行時に変化する振る舞いを、1つのインタフェースへと統合する。このインタフェースはコンパイル時にわかる。そして、共通性分析の特性と関連する。

マルチパラダイムデザインにおけるオブジェクトパラダイムの位置付け

5.1 パラダイムとオブジェクト 5.1.4 オブジェクト指向:もう1つの定義 (p.116)

もちろん、オブジェクトパラダイムを、共通性/可変性分析の言葉で考える必要はない。事実、マルチパラダイムデザインでは、オブジェクトパラダイム自身を目的とはしていないし、それを必ずしも良いものだとは考えていない。…マルチパラダイムデザインを使ったとしても、このようなすでに検証された設計手法(ときには複数)を利用して、その設計手法の強みの上に築くのが、優れたプロジェクトというものだろう。

オブジェクトパラダイムが有用なケース

5.1 パラダイムとオブジェクト 5.1.5 オブジェクト指向設計の適合性 (p.116)

オブジェクトパラダイムは、そのアプリケーションの「ツボ」が、オブジェクトパラダイムによってサポートされた共通性と可変性に次元に沿って並んでいる場合には、良いアーキテクチャを生成する(Pree[Pree1995]はこれらをホットスポット(hot spot)と呼ぶ)。

5.1 パラダイムとオブジェクト 5.1.5 オブジェクト指向設計の適合性 言語とパラダイム (p.118)

オブジェクトパラダイムは、安定したドメインの資源と人工物を捉えるのに卓越している。

テレコム系システムのドメインにおける回線、リレー、ポート

5.1 パラダイムとオブジェクト 5.1.5 オブジェクト指向設計の適合性 言語とパラダイム (p.118)

オブジェクトはまた、人間が直接操作するようなユーザインタフェースにおいてもうまくいくようだ。

グラフィックな図形を扱うライブラリ、CADプログラム

5.3 要約 (p.121)

オブジェクトパラダイムとそれに関連する言語構造が表現できるものに沿って共通性とバリエーションが並んでいるような問題を扱うには、オブジェクト指向は十分であり、うまくいく。オブジェクトパラダイムは、オブジェクトがカプセル化されており、階層構造へと組織化あるいは分類ができるような設計を補足することには卓越している。

オブジェクトパラダイムが適合しない例

5.1 パラダイムとオブジェクト 5.1.5 オブジェクト指向設計の適合性 言語とパラダイム (p.117)

仕事の単位

産業界での実開発の経験からすると、「一仕事の単位」(unit of work)はオブジェクトではうまく表現できないことが示唆されている[Constantine1995]。なぜだろうか。(この種の概念に現れる)共通性と可変性は、時間の経過の中で互いに関係し合うような(連続的な励起)ステップとアルゴリズムを扱っているのであって、意味的関係を持つ構造と振る舞いの集合として扱っているわけではないからである。

例:テレコム系システムの、呼出しコール、自動転送、通話中着信

その他

  • データベースの構成要素
  • 並行プログラミングの構成要素

オブジェクト指向でない言語機能と意図

5.3 要約 (p.121)

しかしほとんどの言語は、言語自身がオブジェクト指向を超え、厳密にはオブジェクト指向ではない言語機能も統合している。いくつかの力(フォース、force)がこれらの言語機能の出現を駆動しているが、最も強いフォースは意図(intentionality)である。