Your SlideShare is downloading. ×
0
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標

2,691

Published on

OOAD + OFPについて現時点での考えをまとめてみました。 …

OOAD + OFPについて現時点での考えをまとめてみました。
PPTX→PPT出力の関係で、当日は非表示にしているスライドも入っています。

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,691
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
46
Comments
0
Likes
10
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Object-Functional!Analysis and Design!次世代モデリングパラダイムへの道標2012年3⽉月19⽇日匠BusinessPlace浅海智晴
  • 2. ⾃自⼰己紹介•  (株)匠BusinessPlace。⽇日本Javaユーザグループ副会⻑⾧長。 edge2.cc主宰。•  代表作 •  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. アジェンダ関数型プログラミング Object Functional Programming (OFP) Object Functional Analysis and Design (OFAD) 応⽤用
  • 7. 新しい現実クラウド・プラットフォーム•  クラウド・サービス、スマート・デバイス•  故障、遅延•  ⼤大規模データ、⼤大規模演算•  ⾼高頻度イベント•  ⾮非同期、並列、分散•  計算機科学メニーコア•  並⾏行行プログラミングメモリDB•  I/Oボトルネックの解消 •  アルゴリズム勝負 •  並⾏行行プログラミング
  • 8. OFADの要素技術/関連技術 CQRS Scala EIP クラウド DSL コンピュー EDA 計算機科学 ティング アジャイル OFP 開発 OOAD OFAD UCD/UXDDDDCI はセッションで触れる技術
  • 9. アプリケーションの階層と役割アプリケー •  DSLの作法に従ってビジネスロ ジックを記述 ション •  OO、関数型のスキルは最低限 •  フレームワークを簡単に使⽤用する DSL ための専⽤用⾔言語 •  OO、関数型の⾼高度なスキルフレーム •  ドメインの共通処理を記述 ワーク •  OO、関数型の⾼高度なスキル
  • 10. 関数型プログラミング
  • 11. 関数型⾔言語とは•  ⾼高階関数を扱える。 •  関数を値として扱える。 •  関数の引数と返却値に関数を渡せる。 •  関数リテラル(クロージャ)が記述できる。•  数学(ラムダ計算、圏論など)的にプログラムを記述でき る。
  • 12. 関数型⾔言語の系譜 新世代関数型 ⾔言語 •  Haskell 伝統的関数型 •  Scala(+scalaz) ⾔言語 •  ラムダ計算 •  Lisp, ML, OCaml •  代数、圏論 •  ラムダ計算 •  型クラス •  ⼿手続き、オブジェ •  代数データ型、 元祖関数型⾔言語 クト指向で補完 モナド •  pure Lisp •  抽象データ型 •  Parametric •  Subtype polymorphism •  ラムダ計算 polymorphism
  • 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. Object FunctionalProgramming (OFP)
  • 18. OFP新三種の神器 トレイト (trait)•  mix-in•  型安全のAOP的な運⽤用 モナド (monad)•  計算⽂文脈をカプセル化する新しい⾔言語概念•  Monadicプログラミング 型クラス (type class)•  型安全のダブルディスパッチ(?)•  Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
  • 19. オブジェクトと関数の連携(1)
  • 20. オブジェクトと関数の連携(2)
  • 21. Arrowを⽤用いたデーターフロー
  • 22. KleisliでOption/Listを合成
  • 23. Object Functional Analysisand Design (OFAP)
  • 24. オブジェクトモデリング協調の実装技術がボトルネック ドメイン・モデル になっている 状態 機械 協調 静的  アプリケーション 構造 モデル
  • 25. モデル変換の流れ 業務モデリング 要求モデリング システム・モデリング 設計 実装 アプリケーション・モデル システム 業務モデル 抽出 要求モデル 変換 具体化 設計モデル 実現 実装 モデル 調整 調整 参照 抽出 拡張 解決空間 解決空間 問題空間 プラットフォーム プラットフォーム 実現 実装 非依存 固有 ドメイン・モデル DDDのカバー範囲
  • 26. オブジェクトの世界と関数の世界
  • 27. オブジェクトの世界と関数の世界-2
  • 28. ユースケースと関数
  • 29. イベント→データフローの流れ
  • 30. メタモデル
  • 31. データフローの実装技術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の⾃自然なプログラミングで記述できる。
  • 32. 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演算
  • 33. 応⽤用
  • 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)
  • 35. Data Context Interaction (DCI) トレイト/型クラス でロールをデータ に編みこみ
  • 36. CQRS, EDA
  • 37. 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"); }};
  • 38. まとめ•  クラウド・コンピューティング、メニーコアで並⾏行行・分 散プログラミングが必須に。 •  関数型⾔言語で計算機科学、数学の果実を取り込む道筋をつ ける。 •  技術革新の発⽣生する場になる。•  要求仕様からシステムアーキテクチャはオブジェクト、 アルゴリズムは関数のハイブリッドが現実解。•  オブジェクト・モデリングのボトルネックである協調を 関数型で埋める⽅方法が論点の⼀一つ。 •  プロセス計算で協調を記述するのはまだ時期尚早? •  当⾯面はデータフローをDSLで記述する応⽤用が期待⼤大。
  • 39. END

×