Mais conteúdo relacionado
Semelhante a Object-Funcational Analysis and design (20)
Mais de Tomoharu ASAMI (20)
Object-Funcational Analysis and design
- 2. ⾃自⼰己紹介
• ⽇日本Javaユーザグループ。
• 代表作
• 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/
- 8. OFADの要素技術/関連技術
クラウド
コンピュー
ティング
アジャイル
OFP
開発
OOAD OFAD UCD/UX
本セッションのスコープ外
- 9. アプリケーションの階層と役割
アプリケー • DSLの作法に従ってビジネスロ
ジックを記述
ション • OO、関数型のスキルは最低限
• フレームワークを簡単に使⽤用する
DSL ための専⽤用⾔言語
• OO、関数型の⾼高度なスキル
フレーム • ドメインの共通処理を記述
ワーク • OO、関数型の⾼高度なスキル
- 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)
- 17. 並列プログラミング
• マルチスレッド
• 共有状態 (shared mutability)
• 共有状態をロック ← 伝統的⽅方法
• STM (Software Transactional Memory)
• アクター
• 状態をアクターローカル(スレッドローカル)にする (isolating
mutability)
• 不変オブジェクトによるメッセージで通信
• 関数プログラミング⽅方式
• 代数的データ型、永続データ構造
• ⇒ 不変オブジェクト
• 状態変更ではなく、状態変更命令書を計算
• イメージとしてはSQLの⽂文字列を計算して作成する感じ
• モナドのメカニズムを使って並列処理(+状態変更命令書)を
隠蔽
- 19. OFP新三種の神器
トレイト (trait)
• mix-in
• 型安全のAOP的な運⽤用
モナド (monad)
• 計算⽂文脈をカプセル化する新しい⾔言語概念
• Monadicプログラミング
型クラス (type class)
• 型安全のダブルディスパッチ(?)
• Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
- 29. データフローの実装技術
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の⾃自然なプログラミングで記述できる。
- 30. 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演算
- 31. 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");
}
};
- 32. まとめ
• 関数型⾔言語は時代の要請
• クラウド・コンピューティング、メニーコアで並⾏行行プログ
ラミングが必須に。
• DSLにより、アプリケーション開発の⽣生産性向上
• 関数型⾔言語で計算機科学、数学の果実を取り込む道筋をつ
ける。
• ⇒ 並列、分散、形式⼿手法
• オブジェクト技術は今も昔も⼤大⿊黒柱
• 要求仕様、システムアーキテクチャ、OOP
• オブジェクト技術と関数型⾔言語の併⽤用が必須
• OOAD+OOP+FP
• 当⾯面の現実解
• データフローをDSLで記述する応⽤用が期待⼤大。