More Related Content
Similar to Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標 (20)
More from Tomoharu ASAMI (20)
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
- 2. ⾃自⼰己紹介
• (株)匠BusinessPlace。⽇日本Javaユーザグループ副会⻑⾧長。
edge2.cc主宰。
• 代表作
• XML SmartDoc (XML⽂文書処理システム)
• Relaxer (XML/Javaスキーマコンパイラ)
• 開発中
• SimpleModeler (Scala DSLモデルコンパイラ)
• SmartDox (⽂文書処理システム)
• g3 (サービスマッシュアップフレームワーク)
• g4 (Androidアプリケーションフレームワーク)
• 近著
• 「上流⼯工程UMLモデリング」(⽇日経BP)
• 「マインドマップではじめるモデリング講座」(翔泳社)
• 「ボクらのScala」(Softbank Creative)
- 4. 関連サイト
• Modegramming Style (テキストDSL駆動開発を
テーマにしたブログ)
• http://modegramming.blogspot.com/
• SimpleModeler
• http://github.com/asami/simplemodeler/
• SmartDox
• http://github.com/asami/smartdox
• g3フレームワーク
• http://code.google.com/p/goldenport3/
• g4フレームワーク
• http://github.com/asami/goldenport-android-
library/
- 7. 新しい現実
クラウド・プラットフォーム
• クラウド・サービス、スマート・デバイス
• 故障、遅延
• ⼤大規模データ、⼤大規模演算
• ⾼高頻度イベント
• ⾮非同期、並列、分散
• 計算機科学
メニーコア
• 並⾏行行プログラミング
メモリDB
• I/Oボトルネックの解消
• アルゴリズム勝負
• 並⾏行行プログラミング
- 8. OFADの要素技術/関連技術
CQRS
Scala EIP
クラウド
DSL コンピュー EDA
計算機科学 ティング
アジャイル
OFP
開発
OOAD OFAD UCD/UX
DDD
DCI
はセッションで触れる技術
- 9. アプリケーションの階層と役割
アプリケー • DSLの作法に従ってビジネスロ
ジックを記述
ション • OO、関数型のスキルは最低限
• フレームワークを簡単に使⽤用する
DSL ための専⽤用⾔言語
• OO、関数型の⾼高度なスキル
フレーム • ドメインの共通処理を記述
ワーク • OO、関数型の⾼高度なスキル
- 12. 関数型⾔言語の系譜
新世代関数型
⾔言語
• Haskell
伝統的関数型 • Scala(+scalaz)
⾔言語 • ラムダ計算
• Lisp, ML, OCaml • 代数、圏論
• ラムダ計算 • 型クラス
• ⼿手続き、オブジェ • 代数データ型、
元祖関数型⾔言語 クト指向で補完 モナド
• pure Lisp • 抽象データ型 • Parametric
• Subtype polymorphism
• ラムダ計算
polymorphism
- 13. 関数型⾔言語の⻑⾧長所と短所
⻑⾧長所
• ⾼高階関数を使った技が使える
• List, 関数合成(コンビネータ)など
• 定理と証明
• 証明された(動作保証された)定理(関数)を積み上げてプログラ
ムを記述できる (← 多少理想論も⼊入ってます)
短所
• 関数実⾏行行のオーバーヘッド
• 関数オブジェクト
• メモリを⼤大量に消費する
• 関数オブジェクト
• データの⼤大量複写
• スタックの使⽤用量が読めない
• 再帰
- 15. 代数的構造デザインパターン
結合律 (associative law)
• 半群 (semigroup)
• モノイド (monoid) (a + b) + c = a + (b + c)
• 群 (group)
可換律 (commutative law)
• 可換半群
• 可換モノイド a+b=b+a
• 可換群(アーベル群)
分配律 (distributive law)
• 環 (ring)
• 体 (field) a * (b + c) = a * b + a * c
- 16. 圏論デザインパターン
圏 (category)
モナド • Hask圏 (Scala圏?)
(monad) • クライスリ圏
(kleisli category)
Applicative 射 (arrow,
functor morphism)
関⼿手
(functor)
- 18. OFP新三種の神器
トレイト (trait)
• mix-in
• 型安全のAOP的な運⽤用
モナド (monad)
• 計算⽂文脈をカプセル化する新しい⾔言語概念
• Monadicプログラミング
型クラス (type class)
• 型安全のダブルディスパッチ(?)
• Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
- 25. モデル変換の流れ
業務モデリング 要求モデリング システム・モデリング 設計 実装
アプリケーション・モデル
システム
業務モデル 抽出 要求モデル 変換 具体化 設計モデル 実現 実装
モデル
調整
調整
参照
抽出
拡張
解決空間 解決空間
問題空間 プラットフォーム プラットフォーム 実現 実装
非依存 固有
ドメイン・モデル
DDDのカバー範囲
- 31. データフローの実装技術
A Unifiying ISBN: 978-0-521-11787-6
Framework for
Structured Yourdon(Structured Chart)、DeMarco(DFD)、Jackson(Structure Text)
Analysis and を代数(Initial algebra)で記述して、圏論で操作する試み
Design
Models SA/SDの技術を関数に繋ぐことができる可能性
AsakusaFW http://www.asakusafw.com/
DSLで記述したデータフローをHadoop上で実⾏行行するフレームワーク
Asakusa DSL設計⼿手法 (http://www.asakusafw.com/wp/wp-content/
uploads/2012/01/AsakusaDSLDesignMethodology.pdf)
Spark http://www.spark-project.org/
Apache Mesos上で動作するクラスタ計算システム。Scala⾔言語に統合さ
れているのが特徴。
データフロー的演算をScalaの⾃自然なプログラミングで記述できる。
- 32. SparkとScalding
val file = spark.textFile("hdfs://...")
file.flatMap(line => line.split(" "))
.map(word => (word, 1))
Spark
.reduceByKey(_ + _)
class WordCountJob(args : Args) extends Job(args) {
TextLine( args("input") ).read.
flatMap('line -> 'word) { line : String => line.split("s+") }.
groupBy('word) { _.size }.
write( Tsv( args("output") ) )
}
Scalding
• https://github.com/twitter/scalding
• CascadingのScala DSL
• Collection APIでHadoop演算
- 34. Domain-Driven Design (DDD)
• A Model Expressed in Software
• Value Object (97)
• Supple Design
• Side-Effect-Free Functions (250)
• Closure of Operations (268)
• Declarative Design – Domain Specific Language
• A Declarative Style of Design – Composite Specification
• Maintaining Model Integrity
• Context Map (344)
• Destillation
• Declarative Style (426)
- 37. Enterprise Integration
Patterns (EIP)
Apache Camel Enterprise Integration Patterns
• http://camel.apache.org/enterprise-integration-
patterns.html
RouteBuilder builder = new RouteBuilder() {
public void configure() {
errorHandler(deadLetterChannel("mock:error"));
from("seda:a")
.choice()
.when(header("foo").isEqualTo("bar"))
.to("seda:b")
.when(header("foo").isEqualTo("cheese"))
.to("seda:c")
.otherwise()
.to("seda:d");
}
};
- 38. まとめ
• クラウド・コンピューティング、メニーコアで並⾏行行・分
散プログラミングが必須に。
• 関数型⾔言語で計算機科学、数学の果実を取り込む道筋をつ
ける。
• 技術革新の発⽣生する場になる。
• 要求仕様からシステムアーキテクチャはオブジェクト、
アルゴリズムは関数のハイブリッドが現実解。
• オブジェクト・モデリングのボトルネックである協調を
関数型で埋める⽅方法が論点の⼀一つ。
• プロセス計算で協調を記述するのはまだ時期尚早?
• 当⾯面はデータフローをDSLで記述する応⽤用が期待⼤大。