More Related Content
PDF
Object-Functional Analysis and Design and Programming温泉 PDF
オブジェクト指向開発におけるObject-Functional Programming PDF
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜 PDF
KEY
Algebraic DP: 動的計画法を書きやすく PDF
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標 PDF
What's hot
PDF
PDF
Scala の関数型プログラミングを支える技術 ODP
PDF
PDF
PDF
PDF
PDF
あなたのScalaを爆速にする7つの方法(日本語版) PDF
PPTX
(Lambdaだけで)純LISPのようなナニかを作る PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化 KEY
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Why Reactive Matters #ScalaMatsuri PPTX
Viewers also liked
PDF
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ PPTX
Prefer Cloud Platform - ビジョン、アーキテクチャ PDF
KEY
PDF
PDF
モデリングの未来 〜~パネルディスカッション PDF
RDSDataSource: App Thinning PDF
Similar to Object-Funcational Analysis and design
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ PDF
PDF
Scalaで萌える関数型プログラミング[1.1.RC1] PDF
Astah UML/ER/mindmapping modeling tool Introduction PDF
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】 PDF
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演 PPTX
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ PDF
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング PDF
PPTX
PPTX
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~ PDF
PDF
PDF
PDF
PDF
PDF
PDF
PPTX
More from Tomoharu ASAMI
PDF
ケーススタディ/実装 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第46回】 PDF
AI時代のソフトウェア開発 文芸モデル駆動アプローチ : 文芸モデルをDSLとした文芸モデル開発と生成AI連携の知識ベース PDF
要求モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第42回】 PDF
設計モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第45回】 PDF
要求モデル/BDD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第43回】 PDF
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】 PDF
ケーススタディ/テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第47回】 PDF
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】 PDF
ケーススタディ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第40回】 PDF
Cloud Native Component Framework 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第39回】 PDF
ビジネス・モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第41回】 PDF
Cloud Native CBD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第35回】 PDF
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】 PDF
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】 PDF
ドメイン・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第36回】 PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】 PDF
アプリケーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第37回】 PDF
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】 PDF
プレゼンテーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第38回】 PDF
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】 Object-Funcational Analysis and design
- 1.
- 2.
⾃自⼰己紹介
• ⽇日本Javaユーザグループ。
• 代表作
• XML SmartDoc (XML⽂文書処理システム)
• Relaxer (XML/Javaスキーマコンパイラ)
• 開発中
• SimpleModeler (Scala DSLモデルコンパイラ)
• SmartDox (⽂文書処理システム)
• g3 (サービスマッシュアップフレームワーク)
• g4 (Androidアプリケーションフレームワーク)
• 近著
• 「上流⼯工程UMLモデリング」(⽇日経BP)
• 「マインドマップではじめるモデリング講座」(翔泳社)
• 「ボクらのScala」(Softbank Creative)
- 3.
- 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/
- 5.
- 6.
- 7.
- 8.
OFADの要素技術/関連技術
クラウド
コンピュー
ティング
アジャイル
OFP
開発
OOAD OFAD UCD/UX
本セッションのスコープ外
- 9.
アプリケーションの階層と役割
アプリケー • DSLの作法に従ってビジネスロ
ジックを記述
ション • OO、関数型のスキルは最低限
• フレームワークを簡単に使⽤用する
DSL ための専⽤用⾔言語
• OO、関数型の⾼高度なスキル
フレーム • ドメインの共通処理を記述
ワーク • OO、関数型の⾼高度なスキル
- 10.
- 11.
- 12.
- 13.
関数型⾔言語の⻑⾧長所と短所
⻑⾧長所
• ⾼高階関数を使った技が使える
• List処理, 関数合成(コンビネータ)、モナドなど
• 定理と証明
• 証明された(動作保証された)定理(関数)を積み上げてプログラムを
記述できる (← 多少理想論も⼊入ってます)
短所
• 関数実⾏行行のオーバーヘッド
• 関数オブジェクト
• メモリを⼤大量に消費する
• 関数オブジェクト
• データの⼤大量複写
• スタックの使⽤用量が読めない
• 再帰
• 回避する技のノウハウが必要
- 14.
- 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の⽂文字列を計算して作成する感じ
• モナドのメカニズムを使って並列処理(+状態変更命令書)を
隠蔽
- 18.
- 19.
OFP新三種の神器
トレイト (trait)
• mix-in
• 型安全のAOP的な運⽤用
モナド (monad)
• 計算⽂文脈をカプセル化する新しい⾔言語概念
• Monadicプログラミング
型クラス (type class)
• 型安全のダブルディスパッチ(?)
• Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 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で記述する応⽤用が期待⼤大。
- 33.