Object-Funcational Analysis and design

3,928 views

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,928
On SlideShare
0
From Embeds
0
Number of Embeds
1,288
Actions
Shares
0
Downloads
21
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Object-Funcational Analysis and design

  1. 1. Object-Functional!Analysis and Design!次世代モデリングパラダイムを考える2012年5⽉月28⽇日JJUG浅海智晴 (@asami224)
  2. 2. ⾃自⼰己紹介•  ⽇日本Javaユーザグループ。•  代表作 •  XML SmartDoc (XML⽂文書処理システム) •  Relaxer (XML/Javaスキーマコンパイラ)•  開発中 •  SimpleModeler (Scala DSLモデルコンパイラ) •  SmartDox (⽂文書処理システム) •  g3 (サービスマッシュアップフレームワーク) •  g4 (Androidアプリケーションフレームワーク)•  近著 •  「上流⼯工程UMLモデリング」(⽇日経BP) •  「マインドマップではじめるモデリング講座」(翔泳社) •  「ボクらのScala」(Softbank Creative)
  3. 3. 活動
  4. 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. 5. ⽂文脈
  6. 6. アジェンダ関数型プログラミング Object Functional Programming (OFP) Object Functional Analysis and Design (OFAD) 応⽤用
  7. 7. 新しい現実クラウド・プラットフォーム•  クラウド・サービス、スマート・デバイス•  故障、遅延•  ⼤大規模データ、⼤大規模演算•  ⾼高頻度イベント•  ⾮非同期、並列、分散•  計算機科学メニーコア•  並⾏行行プログラミングDSL (Domain Specific Language)•  モデル記述としてのDSL •  ⾃自動⽣生成•  フレームワークAPIとしてのDSL •  作りやすさの向上、開発量の激減
  8. 8. OFADの要素技術/関連技術 クラウド コンピュー ティング アジャイル OFP 開発OOAD OFAD UCD/UX 本セッションのスコープ外
  9. 9. アプリケーションの階層と役割アプリケー •  DSLの作法に従ってビジネスロ ジックを記述 ション •  OO、関数型のスキルは最低限 •  フレームワークを簡単に使⽤用する DSL ための専⽤用⾔言語 •  OO、関数型の⾼高度なスキルフレーム •  ドメインの共通処理を記述 ワーク •  OO、関数型の⾼高度なスキル
  10. 10. 関数型プログラミング
  11. 11. 関数型⾔言語とは•  ⾼高階関数を扱える。 •  関数を値として扱える。 •  関数の引数と返却値に関数を渡せる。 •  関数リテラル(クロージャ)が記述できる。•  数学(ラムダ計算、圏論など)的にプログラムを記述でき る。
  12. 12. 関数型⾔言語の系譜浅海私⾒見見。20年ほどの空⽩白の後の⾒見見え⽅方、あるいはOOプログラマが後追いで調べたときの⾒見見え⽅方と考えてください。 新世代関数型 ⾔言語 •  Haskell 伝統的関数型 •  Scala(+scalaz) ⾔言語 •  ラムダ計算 •  Lisp, ML, OCaml •  代数、圏論 •  ラムダ計算 •  型クラス •  ⼿手続き、オブジェ •  代数データ型、 元祖関数型⾔言語 クト指向で補完 モナド •  pure Lisp •  抽象データ型 •  Parametric •  Subtype polymorphism •  ラムダ計算 polymorphism
  13. 13. 関数型⾔言語の⻑⾧長所と短所 ⻑⾧長所 •  ⾼高階関数を使った技が使える •  List処理, 関数合成(コンビネータ)、モナドなど •  定理と証明 •  証明された(動作保証された)定理(関数)を積み上げてプログラムを 記述できる (← 多少理想論も⼊入ってます) 短所 •  関数実⾏行行のオーバーヘッド •  関数オブジェクト •  メモリを⼤大量に消費する •  関数オブジェクト •  データの⼤大量複写 •  スタックの使⽤用量が読めない •  再帰 •  回避する技のノウハウが必要
  14. 14. 関数型⾔言語の技術マップ
  15. 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. 16. 圏論デザインパターン 圏 (category) モナド • Hask圏 (Scala圏?) (monad) • クライスリ圏 (kleisli category) Applicative 射 (arrow, functor morphism) 関⼿手 (functor)
  17. 17. 並列プログラミング•  マルチスレッド •  共有状態 (shared mutability) •  共有状態をロック ← 伝統的⽅方法 •  STM (Software Transactional Memory)•  アクター •  状態をアクターローカル(スレッドローカル)にする (isolating mutability) •  不変オブジェクトによるメッセージで通信•  関数プログラミング⽅方式 •  代数的データ型、永続データ構造 •  ⇒ 不変オブジェクト •  状態変更ではなく、状態変更命令書を計算 •  イメージとしてはSQLの⽂文字列を計算して作成する感じ •  モナドのメカニズムを使って並列処理(+状態変更命令書)を 隠蔽
  18. 18. Object FunctionalProgramming (OFP)
  19. 19. OFP新三種の神器 トレイト (trait)•  mix-in•  型安全のAOP的な運⽤用 モナド (monad)•  計算⽂文脈をカプセル化する新しい⾔言語概念•  Monadicプログラミング 型クラス (type class)•  型安全のダブルディスパッチ(?)•  Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
  20. 20. オブジェクトと関数の連携(1)
  21. 21. オブジェクトと関数の連携(2)
  22. 22. Arrowを⽤用いたデーターフロー
  23. 23. KliesliでOption/Listを合成
  24. 24. Object Functional Analysisand Design (OFAP)
  25. 25. オブジェクトモデリング協調の実装技術がボトルネック ドメイン・モデル になっている 状態 機械 協調 静的  アプリケーション 構造 モデル
  26. 26. オブジェクトの世界と関数の世界
  27. 27. ユースケースと関数
  28. 28. 応⽤用
  29. 29. データフローの実装技術A Unifiying ISBN: 978-0-521-11787-6Framework forStructured Yourdon(Structured Chart)、DeMarco(DFD)、Jackson(Structure Text)Analysis and を代数(Initial algebra)で記述して、圏論で操作する試みDesignModels 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. 30. SparkとScaldingval 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. 31. Enterprise Integration Patterns (EIP) Apache Camel Enterprise Integration Patterns •  http://camel.apache.org/enterprise-integration- patterns.htmlRouteBuilder 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. 32. まとめ•  関数型⾔言語は時代の要請 •  クラウド・コンピューティング、メニーコアで並⾏行行プログ ラミングが必須に。 •  DSLにより、アプリケーション開発の⽣生産性向上 •  関数型⾔言語で計算機科学、数学の果実を取り込む道筋をつ ける。 •  ⇒ 並列、分散、形式⼿手法•  オブジェクト技術は今も昔も⼤大⿊黒柱 •  要求仕様、システムアーキテクチャ、OOP•  オブジェクト技術と関数型⾔言語の併⽤用が必須 •  OOAD+OOP+FP•  当⾯面の現実解 •  データフローをDSLで記述する応⽤用が期待⼤大。
  33. 33. END

×