-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第6章 ソリューションドメイン分析 #6
Comments
C++言語関係等、参考リンクメモ
引用されているBrige パターンと同様のパターンこれは読んでいないですが一応リンクを貼ります。 |
p.129
どちらかというとアンチパターンとして書かれている、「実装構造の共通性に焦点を当てる」とは? 「設計の柔軟性?」 |
p.135
https://twitter.com/sugimoto_kei/status/579509029501726720
|
p.139
C++標準stackを簡略化した実装 |
ソリューションドメイン分析の必要性
|
ソリューションドメインの言語機能とモデリング
概念メタファーの観点からは、モデリングとはソリューションドメインで表現可能なメタファーによってアプリケーションドメインを理解する(モデル化する)ことといえる。アプリケーションドメインの概念の一側面をソリューションドメインで表現可能なメタファーによって明らかにするともいえるだろう。 |
テンプレートパラメータのデフォルト式
template <class T, class SequenceClass = dequeue<T> >
class Stack {
...
} これはどのような意味なのか? |
振る舞いの継承と設計の柔軟性
|
コードの解説求む
|
2つの仮想関数のグルーピング方法
解説求む。 |
振る舞いと意味
|
ポリモーフィズム
図6.8も参照のこと。 |
C++における負の可変性の表現方法
|
テンプレートの特殊化p.128 template <class T, class SequenceClass = dequeue<T> >
class Stack {
...
} dequeはC++標準のコレクションの一種。 テンプレート引数で配列ベースのStackにするのか、dequeベースのスタックにするのか等、内部構造を選択できるようにしているのだと思います。 // おそらくこういう実装を想定。コンテナの管理はすべてSequenceClassに委譲している
template <class T, class SequenceClass = dequeue<T> >
class Stack {
public:
void push(T v) { imp.push_back(); }
T top() const { return imp.top(); }
void pop() { imp.pop_back(); }
private:
SuquenceClass imp;
}
// デフォルトでは以下と等価
template <class T>
class Stack {
public:
void push(T v) { imp.push_back(); }
T top() const { return imp.top(); }
void pop() { imp.pop_back(); }
private:
deque<T> imp;
} SequenceClassに与える型は特定のインターフェースを継承している必要が無い、というのはtemplateの特徴でもあります(push_back(), pop_back(), top()という3つのメソッドが上記のシグネチャで呼び出せればどんなクラスでも良い)。 stack<int> s1; // dequeを使う(デフォルト)
stack<int, list<int> > s2; // listを使う(特殊なニーズも満たす:負の可変性)
stack<int, list<int, my_allocator<int> > > s3; // list自身をさらにカスタマイズ
stack<int, my_container<int> > s3; // stack内の要件さえ満たせば、自作のコンテナでも良い この本では型・構造の可変性をテンプレート引数で表現するにとどまっていますが、さらに振る舞いの可変性にまで拡張させたものが本書以降に現れたポリシー・クラス (by Modern C++ Design)の考え方と理解しています |
負の可変性はルールの例外
|
負の可変性の反転
|
仮想関数とADT
|
ありがとうございます。別々のクラス階層にいたとしても、それらに一致するシグネチャを抽出してインターフェイスとすることができるよ、ということですね。これは複数のドメインにまたがるようなドメイン(相対的な水平ドメイン)の抽出ともいえそうです。 |
分類階層と多重継承
ワークフローエンジンWorkflowerの型ActivityInterfaceの例: ![ActivityInterfaceの分類階層](http://g.gravizo.com/g?
|
共通性/可変性分析とデザインパターン
パターンを設計の例外としてではなく、共通性/可変性分析を含む一般的な分析・設計の例として捉えるのがよいということだろう。 |
ホットスポットと可変パラメータ
|
ソリューションドメインとしてのパターンの力
|
パターンのカテゴリ
パターンのスペクトルフレームワークパターン---デザインパターン---イディオム フレームワークパターン例: イディオム
デザインパターン
|
パターンとマルチパラダイムデザイン
パターンとマルチパラダイムデザインの比較
パターンとマルチパラダイムデザインの関係
|
マルチパラダイムデザインで作るドメインモデルの構造
ドメイン駆動設計のモデル駆動設計に近いが、ドメイン駆動設計に比べるとソリューションドメインがアプリケーションドメインと同等かそれ以上の重要性を持つのがポイントだろう。 ここでの
|
パターンの役割
パターンについてジェネレーティブプログラミングには以下のような記述がある。
|
ソリューションドメインの拡張
プログラミング言語に加えて、フレームワーク・ライブラリ、パターン、モデリング技法(例:リレーショナルモデリング)等でソリューションドメインを拡張でき、それらを1つのドメインと見なすことができる。 |
構造の共通性のない共通化
#6 (comment) も参照のこと。 |
The text was updated successfully, but these errors were encountered: