SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
マルチパラダイムデザイン
再利用性の高いアプリケーションの設計
高橋 晶(Akira Takahashi)
faithandbrave@longgate.co.jp
2014/05/24(土) Boost.勉強会 #15 札幌
自己紹介
• 高橋 晶(Akira Takahashi)
• はてなID : faith_and_brave
• TwitterID : @cpp_akira
• Boost.勉強会 東京の主催者
• boostjp/cpprefjpサイトのコアメンバ
• 著書:C++テンプレートテクニック、C++ポケットリファレ
ンス、プログラミングの魔導書 Vol.1と3
• 好きなことは、「抽象」「直交」「再利用」「分割統治」
本日のお題
• アプリケーションの設計について話します。
• ライブラリではない、ソフトウェアやゲームなどです。
• 皆さんは普段、どのようなプログラム設計をアプリケーショ
ンに適用しているでしょうか。
• 今日は、私が普段のアプリケーション設計に採用している、
マルチパラダイムデザインというものを紹介します。
再利用
• アプリケーションコードは、全てのコードがそのアプリケー
ション専用というわけではない。
• ほとんどは、汎用的なコードか、そのアプリケーションが

属する(複数の)分野で共通利用できるコード。
• アプリケーションコードとしてべったり張り付いたコードを
他のプロジェクトに再利用するのはめんどう。
• 再利用可能なコードとアプリケーション固有のコードを、

きっちり住み分けするのが今日のお話。
文献
マルチパラダイムデザインの概要
• ドメイン駆動設計のアーキテクチャ(ディレクトリ構成)を

採用する。
• アプリケーションを構成するプログラムを、ドメインという
単位で分割し、部品の再利用性を高める。
• 各ドメイン/各機能を、共通性と可変性という考えの元に

設計する。
• 部品の再利用性が高まることによって、類似アプリケーショ
ンを、実績あるコードを元に作り上げることができる。
ドメイン駆動設計
• Eric Evansが提唱した、アプリケーションをドメインに

分割していく設計手法。
• プロジェクト内で共通の用語を使うユビキタス言語や、構成
要素(エンティティ、値オブジェクト、リポジトリ、サービ
ス等)が細かく規定されていたりする。
• 再利用は想定されておらず、一本のアプリケーションを効率
的に作ることを目標にしている。
• 今回紹介する私の設計では、ドメイン駆動設計のレイヤー
(ディレクトリ構成)のみを採用する。
ドメイン駆動設計のレイヤー構造
infrastructure
domain
app
インフラストラクチャ
• アプリケーション全体で使用する、ベースとなるライブラリ、
フレームワークを置くレイヤー。
• Boost、zlib、Ruby on Rails、.NET Framework等。
ドメイン
• アプリケーションを構成する部品を、できるだけ再利用可能
な形で分割して置くレイヤー。ライブラリのようなもの。
• クラスは複数の機能をまとめたものだが、

ドメイン(domain, 問題領域)はクラス・関数群をまとめた
機能ファミリー。
• 「アプリケーションを作る!」という大きな問題を、

ドメインという小さな問題群に分割する。
アプリケーション
• 特定アプリケーションのみで必要な機能を置くレイヤー。
• ユーザー情報、ビジネスロジック、戦闘ロジック、画面遷移など。
• 本当はこの上に、見た目を制御する「プレゼンテーションレイヤー」が
あるが、それほど重要ではないので省略する。
• できるだけ多くの機能を再利用可能な形でドメインに分割す
るので、アプリケーションレイヤーは薄くなる。
依存関係
• レイヤーとしては、上のレイヤーから下のレイヤーへの依存
のみ。
• アプリケーションはドメイン、インフラストラクチャに

依存するが、ドメインがアプリケーションに依存しては

ならない。
• ドメイン間は依存する場合がある。

相互依存にならないよう、図に書き起こして依存関係を整理
すること。
抽象化のためのドメイン分割
• ドメイン分割をすると、そのドメインのユーザー(アプリケー
ションや他のドメイン)へのインタフェースが、自然と抽象
的になる。
• 実装詳細をユーザーに直接使わせない。
• 抽象化が当たり前のように行われるようになる。
ここまでで大事なこと
• アプリケーションを構成するプログラムの

レイヤーを意識する。
• 大きな問題(アプリケーションを作る!)を

小さな問題群(ドメイン)に分割統治する。
再利用性を意識する
• ドメイン分割を行い、抽象的になったドメイン機能は、

どのようにその機能が使われるか、さらに想定を広げる必要が
出てくる。
• マルチパラダイムデザインでは、機能を共通性と可変性という
特性で分析して設計する。
• 共通性(commonality)とは、あらゆる目的に同じ使い方が

できる性質。
• 可変性(variability)とは、状況によって使い方が変わる性質。
共通性のためにできること
• 共通性を表現するためには、C++では継承やテンプレート、
関数オーバーロードといったものを使用できる。
• たとえば、std::vectorは、あらゆる要素型に同じ操作方法を提供する
という共通性を表現している。
• その他、プリプロセッサによるバックエンドの自動切り替え
も、共通性のために使用できる。
• たとえば、boost::threadは環境によって、pthreadによる実装と
Windows APIによる実装を、自動的に切り替えている。ユーザーに提供
するインタフェースを共通化している。
可変性のためにできること
• 可変性を表現するためには、C++では実行時多態性や、テン
プレートのポリシークラス、トレイト、関数オブジェクトを
使用できる。
• 与えられるパラメータによって動作を変えることは、たとえ
ばstd::sort()が行っている。与えられる関数オブジェクト
によって、比較の動作が変わる。
• 可変性を意識して設計したドメインは、他のプロジェクトへ
の再利用がしやすくなる。
ケーススタディ
• 以下の構成になっているドメインの設計を考える。
application
domain
ui
animation
infrastructure
ケーススタディ
• ウィンドウに何らかのアニメーションをさせる
namespace ui {
class Window;
}
domain/ui/Window.h
namespace animation {
class MyAnimation {
public:
void start(ui::Window& window);
};
}
domain/animation/MyAnimation.h
• いま、animationドメインはuiドメインに依存している
ケーススタディ
• ドメイン間の依存関係を断ち切る可変性を導入する
namespace animation {
class MyAnimation {
public:
template <class Window>
void start(Window& window);
};
}
domain/animation/MyAnimation.h
• これで、animationドメインのみを他プロジェクトに

再利用できる。
ケーススタディ
• 終了イベントを受け取る可変性を導入する。
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クラスが、複数の用途・状況に

対応できるようになった。
どこまで想定するか
• 抽象化や再利用とは、どこまで想定して作ればいいだろうか。
• 目の前のアプリケーションの要件だけを見てドメイン分割、

抽象化、可変性の導入をすると、設計が破綻しやすい。
• 再利用性を高めるには、プロジェクトの今後の方向性や、

複数のマーケットまでを見通す目が必要になる。
何がマルチパラダイムなのか
• 従来のオブジェクト指向設計では、可変性を表現する方法が
多態性に限定された。
• マルチパラダイムデザインでは、他のパラダイムを共通性と
可変性に使用し、設計にさらなる柔軟性を持たせる。
• たとえば、テンプレートの「特定インタフェースを持ってい
れば継承関係がなくていい」という性質は、ドメイン間の

やりとりをよりシンプルにする。
DSL
• DSL(domain specific language, ドメイン特化言語)は、特
定の問題を効率的に解決するための小さな言語。
• 昔はアプリケーション指向言語(AOL : application
oriented language)と呼ばれていた。
• 広義には、プレーンテキストの言語のみならず、ツールも含
む。SQLやUIエディタ、GraphvizもDSL。
• 問題領域にくわしい専門家(ゲームならプランナー)に、使っ
てもらったりする。
まとめ
• マルチパラダイムデザインでは、アプリケーションを構成す
るプログラムを、小さな問題(ドメイン)に分割する。
• 分割したドメインを、共通性と可変性に注目して設計し、

再利用性を高める。
• 再利用性を高めることによって、アプリケーションコードを
他のプロジェクトに使いまわせるようになり、他のプロジェ
クトを、高い品質のコードを元にして作れるようになる。
みんな読もう!
• あのCryoliteさんも2004年時点で読んでるぞ!
• ※ただしピアソンのため、絶版です。中古で…

Mais conteúdo relacionado

Mais procurados

なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話ota42y
 
サブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in expressサブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in expressTakahiro YAMAGUCHI
 
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめあと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ文樹 高橋
 
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみたYasushi Kato
 
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部Masahiro Wakame
 
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会nemumu
 
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介中條 剛
 
mrubyで作るマイコンボード
mrubyで作るマイコンボードmrubyで作るマイコンボード
mrubyで作るマイコンボードkishima7
 
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング括弧を使わないLispプログラミング
括弧を使わないLispプログラミングYuta Mizushima
 
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!Toshiaki Maki
 
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておくいまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておくTakahiro YAMAGUCHI
 
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2tatsuo sakurai
 
TypeScriptは明日から使うべき
TypeScriptは明日から使うべきTypeScriptは明日から使うべき
TypeScriptは明日から使うべきMasahiro Wakame
 
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさんrogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさんrogy01
 
2014年の制作物報告
2014年の制作物報告2014年の制作物報告
2014年の制作物報告uu ymd
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドkeroyonn
 
goroutineはどうやって動いているのか
goroutineはどうやって動いているのかgoroutineはどうやって動いているのか
goroutineはどうやって動いているのかota42y
 
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかbootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかota42y
 

Mais procurados (20)

なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
 
サブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in expressサブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ
OAuthの罠の話 in express
 
Ciecleci
CiecleciCiecleci
Ciecleci
 
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめあと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
 
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
 
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
 
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
 
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScriptjQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
 
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
 
mrubyで作るマイコンボード
mrubyで作るマイコンボードmrubyで作るマイコンボード
mrubyで作るマイコンボード
 
括弧を使わないLispプログラミング
括弧を使わないLispプログラミング括弧を使わないLispプログラミング
括弧を使わないLispプログラミング
 
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
 
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておくいまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
いまNode Express4で書いてるディレクターが
初めて書き始める2ヶ月前くらいの自分に言っておく
 
チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2チーム開発積み重ね Rails Developers Meetup 2018 Day2
チーム開発積み重ね Rails Developers Meetup 2018 Day2
 
TypeScriptは明日から使うべき
TypeScriptは明日から使うべきTypeScriptは明日から使うべき
TypeScriptは明日から使うべき
 
rogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさんrogyゼミ第2回 ニックさん
rogyゼミ第2回 ニックさん
 
2014年の制作物報告
2014年の制作物報告2014年の制作物報告
2014年の制作物報告
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
 
goroutineはどうやって動いているのか
goroutineはどうやって動いているのかgoroutineはどうやって動いているのか
goroutineはどうやって動いているのか
 
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかbootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
 

Destaque

二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロdigitalghost
 
Boost study14
Boost study14Boost study14
Boost study14fjnl
 
左と右の話
左と右の話左と右の話
左と右の話Cryolite
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門egtra
 
error handling using expected
error handling using expectederror handling using expected
error handling using expectedAkira Takahashi
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorAkira Takahashi
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたMitsuru Kariya
 
Economía popular y solidaria
Economía popular y solidariaEconomía popular y solidaria
Economía popular y solidariaCésar Guadamud
 
Percepción social de la discapacidad física.
Percepción social de la discapacidad física.Percepción social de la discapacidad física.
Percepción social de la discapacidad física.José María
 
Отзыв о работе переводчика
Отзыв о работе переводчикаОтзыв о работе переводчика
Отзыв о работе переводчикаKsenia Mazheyko
 
Marcus Chantrey, Go Green December Business Breakfast, St Mary Redcliffe Chur...
Marcus Chantrey, Go Green December Business Breakfast, St Mary Redcliffe Chur...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 HillPower of Outdoor Play - We Built a Hill
Power of Outdoor Play - We Built a HillChris Wejr
 
10 trends reshaping digital
10 trends reshaping digital10 trends reshaping digital
10 trends reshaping digitalNils Mork-Ulnes
 
開発環境と言語
開発環境と言語開発環境と言語
開発環境と言語ujihisa
 
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
ADN Antreprenor 2016 - Cristian Logofatu, BittnetADN Antreprenor 2016 - Cristian Logofatu, Bittnet
ADN Antreprenor 2016 - Cristian Logofatu, BittnetGabriel Barliga
 

Destaque (20)

二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
 
Boost study14
Boost study14Boost study14
Boost study14
 
左と右の話
左と右の話左と右の話
左と右の話
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
 
Economía popular y solidaria
Economía popular y solidariaEconomí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.Percepción social de la discapacidad física.
Percepción social de la discapacidad física.
 
Отзыв о работе переводчика
Отзыв о работе переводчикаОтзыв о работе переводчика
Отзыв о работе переводчика
 
Head start networking
Head start networkingHead 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...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 HillPower of Outdoor Play - We Built a Hill
Power of Outdoor Play - We Built a Hill
 
10 trends reshaping digital
10 trends reshaping digital10 trends reshaping digital
10 trends reshaping digital
 
開発環境と言語
開発環境と言語開発環境と言語
開発環境と言語
 
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
ADN Antreprenor 2016 - Cristian Logofatu, BittnetADN Antreprenor 2016 - Cristian Logofatu, Bittnet
ADN Antreprenor 2016 - Cristian Logofatu, Bittnet
 

Semelhante a Multi paradigm design

ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』Takahiro Hirata
 
普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。c-mitsuba
 
初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?Akira Hatsune
 
デザインツール戦争とMaterial Theme Editor
デザインツール戦争とMaterial Theme Editorデザインツール戦争とMaterial Theme Editor
デザインツール戦争とMaterial Theme EditorAsami Yamamoto
 
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)Chihiro Tomita
 
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようC++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようStudy Group by SciencePark Corp.
 
CodingTips+ 基礎編
CodingTips+ 基礎編CodingTips+ 基礎編
CodingTips+ 基礎編Yusuke Ito
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppKatsuya Shimizu
 
市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方Daiki Tanoguchi
 
ownCloudについて
ownCloudについてownCloudについて
ownCloudについてShinya Saita
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17Yasunori Kihara
 
WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用Satoshi Kamigaki
 
アプリデザインの共通言語
アプリデザインの共通言語アプリデザインの共通言語
アプリデザインの共通言語Hiroki Akiyama
 
システム設計の原則
システム設計の原則システム設計の原則
システム設計の原則You&I
 
ECMA-376の活用を考える(XLSX編)
ECMA-376の活用を考える(XLSX編)ECMA-376の活用を考える(XLSX編)
ECMA-376の活用を考える(XLSX編)You&I
 

Semelhante a Multi paradigm design (20)

ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
ex-Workshop06『three.jsを使ってモデリングソフトを試作する』
 
普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。普段こういうこと気にしながら、こんな風に作ってます。
普段こういうこと気にしながら、こんな風に作ってます。
 
初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?初音玲の流儀 - なんでプログラミングしているの?
初音玲の流儀 - なんでプログラミングしているの?
 
デザインツール戦争とMaterial Theme Editor
デザインツール戦争とMaterial Theme Editorデザインツール戦争とMaterial Theme Editor
デザインツール戦争とMaterial Theme Editor
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
デザイナー×エンジニア ~ハッカソンからのつながり~(まにフェス)
 
Cvpr2017事前読み会
Cvpr2017事前読み会Cvpr2017事前読み会
Cvpr2017事前読み会
 
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようC++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
 
CodingTips+ 基礎編
CodingTips+ 基礎編CodingTips+ 基礎編
CodingTips+ 基礎編
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
 
市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方
 
ownCloudについて
ownCloudについてownCloudについて
ownCloudについて
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
 
WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用WordPressで行うシステム開発 WordCamp Tokyo 2015用
WordPressで行うシステム開発 WordCamp Tokyo 2015用
 
アプリデザインの共通言語
アプリデザインの共通言語アプリデザインの共通言語
アプリデザインの共通言語
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 
システム設計の原則
システム設計の原則システム設計の原則
システム設計の原則
 
ECMA-376の活用を考える(XLSX編)
ECMA-376の活用を考える(XLSX編)ECMA-376の活用を考える(XLSX編)
ECMA-376の活用を考える(XLSX編)
 

Mais de Akira Takahashi

Mais de Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 
Executors and schedulers
Executors and schedulersExecutors and schedulers
Executors and schedulers
 
Improvement future api
Improvement future apiImprovement future api
Improvement future api
 
C++14 variable templates
C++14 variable templatesC++14 variable templates
C++14 variable templates
 
C++14 relaxing constraints on constexpr
C++14 relaxing constraints on constexprC++14 relaxing constraints on constexpr
C++14 relaxing constraints on constexpr
 
C++14 binary literals
C++14 binary literalsC++14 binary literals
C++14 binary literals
 
Leaning random using Boost Random
Leaning random using Boost RandomLeaning random using Boost Random
Leaning random using Boost Random
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
Boost Tour 1.53.0
Boost Tour 1.53.0Boost Tour 1.53.0
Boost Tour 1.53.0
 

Multi paradigm design