Enviar pesquisa
Carregar
Multi paradigm design
•
8 gostaram
•
3,232 visualizações
Akira Takahashi
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 26
Baixar agora
Baixar para ler offline
Recomendados
Start Concurrent
Start Concurrent
Akira Takahashi
Boost container feature
Boost container feature
Akira Takahashi
Development C++ Community
Development C++ Community
Akira Takahashi
Study3 boost
Study3 boost
Kohsuke Yuasa
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
2014 08-30 life with roslyn
2014 08-30 life with roslyn
shibuki
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
Recomendados
Start Concurrent
Start Concurrent
Akira Takahashi
Boost container feature
Boost container feature
Akira Takahashi
Development C++ Community
Development C++ Community
Akira Takahashi
Study3 boost
Study3 boost
Kohsuke Yuasa
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
2014 08-30 life with roslyn
2014 08-30 life with roslyn
shibuki
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
ota42y
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
Takahiro YAMAGUCHI
Ciecleci
Ciecleci
YosukeHojo
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
nemumu
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
中條 剛
mrubyで作るマイコンボード
mrubyで作るマイコンボード
kishima7
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
Yuta Mizushima
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
いまNode Express4で書いてるディレクターが 初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが 初めて書き始める2ヶ月前くらいの自分に言っておく
Takahiro YAMAGUCHI
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2
tatsuo sakurai
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
Masahiro Wakame
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさん
rogy01
2014年の制作物報告
2014年の制作物報告
uu ymd
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
keroyonn
goroutineはどうやって動いているのか
goroutineはどうやって動いているのか
ota42y
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
ota42y
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
Boost study14
Boost study14
fjnl
Mais conteúdo relacionado
Mais procurados
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
ota42y
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
Takahiro YAMAGUCHI
Ciecleci
Ciecleci
YosukeHojo
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
nemumu
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
中條 剛
mrubyで作るマイコンボード
mrubyで作るマイコンボード
kishima7
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
Yuta Mizushima
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
いまNode Express4で書いてるディレクターが 初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが 初めて書き始める2ヶ月前くらいの自分に言っておく
Takahiro YAMAGUCHI
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2
tatsuo sakurai
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
Masahiro Wakame
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさん
rogy01
2014年の制作物報告
2014年の制作物報告
uu ymd
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
keroyonn
goroutineはどうやって動いているのか
goroutineはどうやって動いているのか
ota42y
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
ota42y
Mais procurados
(20)
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
Ciecleci
Ciecleci
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
mrubyで作るマイコンボード
mrubyで作るマイコンボード
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
いまNode Express4で書いてるディレクターが 初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが 初めて書き始める2ヶ月前くらいの自分に言っておく
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさん
2014年の制作物報告
2014年の制作物報告
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
goroutineはどうやって動いているのか
goroutineはどうやって動いているのか
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
Destaque
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
Boost study14
Boost study14
fjnl
左と右の話
左と右の話
Cryolite
Boost.Graph入門
Boost.Graph入門
egtra
error handling using expected
error handling using expected
Akira Takahashi
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Akira Takahashi
C++1z draft
C++1z draft
Akira Takahashi
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
Economía popular y solidaria
Economía popular y solidaria
César Guadamud
Percepción social de la discapacidad física.
Percepción social de la discapacidad física.
José María
Отзыв о работе переводчика
Отзыв о работе переводчика
Ksenia Mazheyko
Head start networking
Head start networking
Career Development Centre, La Trobe University
Marcus Chantrey, Go Green December Business Breakfast, St Mary Redcliffe Chur...
Marcus Chantrey, Go Green December Business Breakfast, St Mary Redcliffe Chur...
Go Green
Настанова щодо роботи в ВікіОсвіті
Настанова щодо роботи в ВікіОсвіті
galina_pr
ばすけ
ばすけ
roap_jp
Power of Outdoor Play - We Built a Hill
Power of Outdoor Play - We Built a Hill
Chris Wejr
10 trends reshaping digital
10 trends reshaping digital
Nils Mork-Ulnes
開発環境と言語
開発環境と言語
ujihisa
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
Gabriel Barliga
Destaque
(20)
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
Boost study14
Boost study14
左と右の話
左と右の話
Boost.Graph入門
Boost.Graph入門
error handling using expected
error handling using expected
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
C++1z draft
C++1z draft
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Economía popular y solidaria
Economía popular y solidaria
Percepción social de la discapacidad física.
Percepción social de la discapacidad física.
Отзыв о работе переводчика
Отзыв о работе переводчика
Head start networking
Head start networking
Marcus Chantrey, Go Green December Business Breakfast, St Mary Redcliffe Chur...
Marcus Chantrey, Go Green December Business Breakfast, St Mary Redcliffe Chur...
Настанова щодо роботи в ВікіОсвіті
Настанова щодо роботи в ВікіОсвіті
ばすけ
ばすけ
Power of Outdoor Play - We Built a Hill
Power of Outdoor Play - We Built a Hill
10 trends reshaping digital
10 trends reshaping digital
開発環境と言語
開発環境と言語
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
Semelhante a Multi paradigm design
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
Takahiro Hirata
普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。
c-mitsuba
初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?
Akira Hatsune
デザインツール戦争とMaterial Theme Editor
デザインツール戦争とMaterial Theme Editor
Asami Yamamoto
Cppmix 01
Cppmix 01
Akira Takahashi
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
Chihiro Tomita
Cvpr2017事前読み会
Cvpr2017事前読み会
Takuya Minagawa
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
Study Group by SciencePark Corp.
CodingTips+ 基礎編
CodingTips+ 基礎編
Yusuke Ito
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
Katsuya Shimizu
市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方
Daiki Tanoguchi
ownCloudについて
ownCloudについて
Shinya Saita
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
VirtualTech Japan Inc./Begi.net Inc.
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
Yasunori Kihara
WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用
Satoshi Kamigaki
アプリデザインの共通言語
アプリデザインの共通言語
Hiroki Akiyama
PyCharm入門
PyCharm入門
Yuki Nagai
システム設計の原則
システム設計の原則
You&I
ECMA-376の活用を考える(XLSX編)
ECMA-376の活用を考える(XLSX編)
You&I
Semelhante a Multi paradigm design
(20)
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。
初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?
デザインツール戦争とMaterial Theme Editor
デザインツール戦争とMaterial Theme Editor
Cppmix 01
Cppmix 01
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
Cvpr2017事前読み会
Cvpr2017事前読み会
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
CodingTips+ 基礎編
CodingTips+ 基礎編
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方
ownCloudについて
ownCloudについて
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用
アプリデザインの共通言語
アプリデザインの共通言語
PyCharm入門
PyCharm入門
システム設計の原則
システム設計の原則
ECMA-376の活用を考える(XLSX編)
ECMA-376の活用を考える(XLSX編)
Mais de Akira Takahashi
Cpp20 overview language features
Cpp20 overview language features
Akira Takahashi
Cppmix 02
Cppmix 02
Akira Takahashi
Modern C++ Learning
Modern C++ Learning
Akira Takahashi
cpprefjp documentation
cpprefjp documentation
Akira Takahashi
Boost tour 1_61_0 merge
Boost tour 1_61_0 merge
Akira Takahashi
Boost tour 1_61_0
Boost tour 1_61_0
Akira Takahashi
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
Boost tour 1.60.0
Boost tour 1.60.0
Akira Takahashi
Boost Tour 1_58_0
Boost Tour 1_58_0
Akira Takahashi
C++14 enum hash
C++14 enum hash
Akira Takahashi
Programmer mind
Programmer mind
Akira Takahashi
Boost.Study 14 Opening
Boost.Study 14 Opening
Akira Takahashi
Executors and schedulers
Executors and schedulers
Akira Takahashi
Improvement future api
Improvement future api
Akira Takahashi
C++14 variable templates
C++14 variable templates
Akira Takahashi
C++14 relaxing constraints on constexpr
C++14 relaxing constraints on constexpr
Akira Takahashi
C++14 binary literals
C++14 binary literals
Akira Takahashi
Leaning random using Boost Random
Leaning random using Boost Random
Akira Takahashi
C++14 Overview
C++14 Overview
Akira Takahashi
Boost Tour 1.53.0
Boost Tour 1.53.0
Akira Takahashi
Mais de Akira Takahashi
(20)
Cpp20 overview language features
Cpp20 overview language features
Cppmix 02
Cppmix 02
Modern C++ Learning
Modern C++ Learning
cpprefjp documentation
cpprefjp documentation
Boost tour 1_61_0 merge
Boost tour 1_61_0 merge
Boost tour 1_61_0
Boost tour 1_61_0
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Boost tour 1.60.0
Boost tour 1.60.0
Boost Tour 1_58_0
Boost Tour 1_58_0
C++14 enum hash
C++14 enum hash
Programmer mind
Programmer mind
Boost.Study 14 Opening
Boost.Study 14 Opening
Executors and schedulers
Executors and schedulers
Improvement future api
Improvement future api
C++14 variable templates
C++14 variable templates
C++14 relaxing constraints on constexpr
C++14 relaxing constraints on constexpr
C++14 binary literals
C++14 binary literals
Leaning random using Boost Random
Leaning random using Boost Random
C++14 Overview
C++14 Overview
Boost Tour 1.53.0
Boost Tour 1.53.0
Multi paradigm design
1.
マルチパラダイムデザイン 再利用性の高いアプリケーションの設計 高橋 晶(Akira Takahashi) faithandbrave@longgate.co.jp 2014/05/24(土)
Boost.勉強会 #15 札幌
2.
自己紹介 • 高橋 晶(Akira
Takahashi) • はてなID : faith_and_brave • TwitterID : @cpp_akira • Boost.勉強会 東京の主催者 • boostjp/cpprefjpサイトのコアメンバ • 著書:C++テンプレートテクニック、C++ポケットリファレ ンス、プログラミングの魔導書 Vol.1と3 • 好きなことは、「抽象」「直交」「再利用」「分割統治」
3.
本日のお題 • アプリケーションの設計について話します。 • ライブラリではない、ソフトウェアやゲームなどです。 •
皆さんは普段、どのようなプログラム設計をアプリケーショ ンに適用しているでしょうか。 • 今日は、私が普段のアプリケーション設計に採用している、 マルチパラダイムデザインというものを紹介します。
4.
再利用 • アプリケーションコードは、全てのコードがそのアプリケー ション専用というわけではない。 • ほとんどは、汎用的なコードか、そのアプリケーションが 属する(複数の)分野で共通利用できるコード。 •
アプリケーションコードとしてべったり張り付いたコードを 他のプロジェクトに再利用するのはめんどう。 • 再利用可能なコードとアプリケーション固有のコードを、 きっちり住み分けするのが今日のお話。
5.
文献
6.
マルチパラダイムデザインの概要 • ドメイン駆動設計のアーキテクチャ(ディレクトリ構成)を 採用する。 • アプリケーションを構成するプログラムを、ドメインという 単位で分割し、部品の再利用性を高める。 •
各ドメイン/各機能を、共通性と可変性という考えの元に 設計する。 • 部品の再利用性が高まることによって、類似アプリケーショ ンを、実績あるコードを元に作り上げることができる。
7.
ドメイン駆動設計 • Eric Evansが提唱した、アプリケーションをドメインに 分割していく設計手法。 •
プロジェクト内で共通の用語を使うユビキタス言語や、構成 要素(エンティティ、値オブジェクト、リポジトリ、サービ ス等)が細かく規定されていたりする。 • 再利用は想定されておらず、一本のアプリケーションを効率 的に作ることを目標にしている。 • 今回紹介する私の設計では、ドメイン駆動設計のレイヤー (ディレクトリ構成)のみを採用する。
8.
ドメイン駆動設計のレイヤー構造 infrastructure domain app
9.
インフラストラクチャ • アプリケーション全体で使用する、ベースとなるライブラリ、 フレームワークを置くレイヤー。 • Boost、zlib、Ruby
on Rails、.NET Framework等。
10.
ドメイン • アプリケーションを構成する部品を、できるだけ再利用可能 な形で分割して置くレイヤー。ライブラリのようなもの。 • クラスは複数の機能をまとめたものだが、 ドメイン(domain,
問題領域)はクラス・関数群をまとめた 機能ファミリー。 • 「アプリケーションを作る!」という大きな問題を、 ドメインという小さな問題群に分割する。
11.
アプリケーション • 特定アプリケーションのみで必要な機能を置くレイヤー。 • ユーザー情報、ビジネスロジック、戦闘ロジック、画面遷移など。 •
本当はこの上に、見た目を制御する「プレゼンテーションレイヤー」が あるが、それほど重要ではないので省略する。 • できるだけ多くの機能を再利用可能な形でドメインに分割す るので、アプリケーションレイヤーは薄くなる。
12.
依存関係 • レイヤーとしては、上のレイヤーから下のレイヤーへの依存 のみ。 • アプリケーションはドメイン、インフラストラクチャに 依存するが、ドメインがアプリケーションに依存しては ならない。 •
ドメイン間は依存する場合がある。 相互依存にならないよう、図に書き起こして依存関係を整理 すること。
13.
抽象化のためのドメイン分割 • ドメイン分割をすると、そのドメインのユーザー(アプリケー ションや他のドメイン)へのインタフェースが、自然と抽象 的になる。 • 実装詳細をユーザーに直接使わせない。 •
抽象化が当たり前のように行われるようになる。
14.
ここまでで大事なこと • アプリケーションを構成するプログラムの レイヤーを意識する。 • 大きな問題(アプリケーションを作る!)を 小さな問題群(ドメイン)に分割統治する。
15.
再利用性を意識する • ドメイン分割を行い、抽象的になったドメイン機能は、 どのようにその機能が使われるか、さらに想定を広げる必要が 出てくる。 • マルチパラダイムデザインでは、機能を共通性と可変性という 特性で分析して設計する。 •
共通性(commonality)とは、あらゆる目的に同じ使い方が できる性質。 • 可変性(variability)とは、状況によって使い方が変わる性質。
16.
共通性のためにできること • 共通性を表現するためには、C++では継承やテンプレート、 関数オーバーロードといったものを使用できる。 • たとえば、std::vectorは、あらゆる要素型に同じ操作方法を提供する という共通性を表現している。 •
その他、プリプロセッサによるバックエンドの自動切り替え も、共通性のために使用できる。 • たとえば、boost::threadは環境によって、pthreadによる実装と Windows APIによる実装を、自動的に切り替えている。ユーザーに提供 するインタフェースを共通化している。
17.
可変性のためにできること • 可変性を表現するためには、C++では実行時多態性や、テン プレートのポリシークラス、トレイト、関数オブジェクトを 使用できる。 • 与えられるパラメータによって動作を変えることは、たとえ ばstd::sort()が行っている。与えられる関数オブジェクト によって、比較の動作が変わる。 •
可変性を意識して設計したドメインは、他のプロジェクトへ の再利用がしやすくなる。
18.
ケーススタディ • 以下の構成になっているドメインの設計を考える。 application domain ui animation infrastructure
19.
ケーススタディ • ウィンドウに何らかのアニメーションをさせる namespace ui
{ class Window; } domain/ui/Window.h namespace animation { class MyAnimation { public: void start(ui::Window& window); }; } domain/animation/MyAnimation.h • いま、animationドメインはuiドメインに依存している
20.
ケーススタディ • ドメイン間の依存関係を断ち切る可変性を導入する namespace animation
{ class MyAnimation { public: template <class Window> void start(Window& window); }; } domain/animation/MyAnimation.h • これで、animationドメインのみを他プロジェクトに 再利用できる。
21.
ケーススタディ • 終了イベントを受け取る可変性を導入する。 namespace animation
{ class MyAnimation { std::function<void()> callback_; public: template <class Window> void start(Window& window); ! template <class Window, class F> void start(Window& window, F callback); }; } • これで、MyAnimationクラスが、複数の用途・状況に 対応できるようになった。
22.
どこまで想定するか • 抽象化や再利用とは、どこまで想定して作ればいいだろうか。 • 目の前のアプリケーションの要件だけを見てドメイン分割、 抽象化、可変性の導入をすると、設計が破綻しやすい。 •
再利用性を高めるには、プロジェクトの今後の方向性や、 複数のマーケットまでを見通す目が必要になる。
23.
何がマルチパラダイムなのか • 従来のオブジェクト指向設計では、可変性を表現する方法が 多態性に限定された。 • マルチパラダイムデザインでは、他のパラダイムを共通性と 可変性に使用し、設計にさらなる柔軟性を持たせる。 •
たとえば、テンプレートの「特定インタフェースを持ってい れば継承関係がなくていい」という性質は、ドメイン間の やりとりをよりシンプルにする。
24.
DSL • DSL(domain specific
language, ドメイン特化言語)は、特 定の問題を効率的に解決するための小さな言語。 • 昔はアプリケーション指向言語(AOL : application oriented language)と呼ばれていた。 • 広義には、プレーンテキストの言語のみならず、ツールも含 む。SQLやUIエディタ、GraphvizもDSL。 • 問題領域にくわしい専門家(ゲームならプランナー)に、使っ てもらったりする。
25.
まとめ • マルチパラダイムデザインでは、アプリケーションを構成す るプログラムを、小さな問題(ドメイン)に分割する。 • 分割したドメインを、共通性と可変性に注目して設計し、 再利用性を高める。 •
再利用性を高めることによって、アプリケーションコードを 他のプロジェクトに使いまわせるようになり、他のプロジェ クトを、高い品質のコードを元にして作れるようになる。
26.
みんな読もう! • あのCryoliteさんも2004年時点で読んでるぞ! • ※ただしピアソンのため、絶版です。中古で…
Baixar agora