Object-Functional Analysis and Design and Programming温泉
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Object-Functional Analysis and Design and Programming温泉

  • 2,285 views
Uploaded on

クラウド温泉3.0の資料です。 ...

クラウド温泉3.0の資料です。
ディスカッションのネタ提供を目的としています。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,285
On Slideshare
1,246
From Embeds
1,039
Number of Embeds
4

Actions

Shares
Downloads
8
Comments
0
Likes
2

Embeds 1,039

http://modegramming.blogspot.jp 1,010
http://modegramming.blogspot.com 27
http://webcache.googleusercontent.com 1
http://modegramming.blogspot.de 1

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-FunctionalAnalysis and Designand Programming温泉2012年年8⽉月18⽇日浅海智晴
  • 2. ⽂文脈
  • 3. 論論点•  業務アプリケーションにおける関数型⾔言語 •  どこまでかけるのか •  モナドの使い所•  業務アプリケーションにおけるオブジェクト指向⾔言語 •  本物のオブジェクト指向⾔言語から新たな気づきはないか•  関数型⾔言語とオブジェクト指向⾔言語の選択•  関数型⾔言語とモデリング技術の連携 •  形式⼿手法とモデリング?
  • 4. アジェンダディスカッションの元ネタを提供します。関数型プログラミング Object Functional Programming (OFP) Object Functional Analysis and Design (OFAD)
  • 5. 新しい現実ハードウェア•  メニーコア、⼤大容量量メモリ、SSD•  インメモリデータベース•  並列列プログラミングクラウド・プラットフォーム•  クラウド・サービス、スマート・デバイス•  故障、遅延•  ⼤大規模データ、⼤大規模演算•  ⾼高頻度度イベント•  ⾮非同期、並列列、分散•  NoSQL
  • 6. アプリケーションの階層と役割アプリケー •  DSLの作法に従ってビジネスロ ジックを記述 ション •  OO、関数型のスキルは最低限 •  フレームワークを簡単に使⽤用する DSL ための専⽤用⾔言語 •  OO、関数型の⾼高度度なスキルフレーム •  ドメインの共通処理理を記述 ワーク •  OO、関数型の⾼高度度なスキル
  • 7. ⽤用語•  セッション内でのローカルな⽤用法•  (普通の)オブジェクト指向⾔言語 •  Java的なオブジェクト指向⾔言語。オブジェクト+クラス+抽象 データ型+静的型付け+⼿手続き+値。•  本物のオブジェクト指向⾔言語 •  オブジェクトとメッセージから構成される核に何かを加えたも の。•  関数型⾔言語 •  純粋関数型⾔言語(での利利⽤用も可能) •  イミュータブル、参照透過性 •  モナドが⼀一級市⺠民 •  型クラス(相当)•  モデリング •  業務アプリケーションを分析・設計するためのモデリング⼿手法 •  UMLを使ったオブジェクト指向モデリング
  • 8. 関数型プログラミング
  • 9. 関数型⾔言語とは•  ⾼高階関数を扱える。 •  関数を値として扱える。 •  関数の引数と返却値に関数を渡せる。 •  関数リテラル(クロージャ)が記述できる。•  数学(ラムダ計算、圏論論など)的にプログラムを記述でき る。
  • 10. 関数型⾔言語の系譜浅海私⾒見見。20年年ほどの空⽩白の後の⾒見見え⽅方、あるいはOOプログラマが後追いで調べたときの⾒見見え⽅方と考えてください。 新世代関数型 ⾔言語 •  Haskell 伝統的関数型 •  Scala(+scalaz) ⾔言語 •  ラムダ計算 •  Lisp, ML, OCaml •  代数、圏論論 •  ラムダ計算 •  型クラス •  ⼿手続き、オブジェ •  代数データ型、 元祖関数型⾔言語 クト指向で補完 モナド •  pure Lisp •  抽象データ型 •  Parametric •  Subtype polymorphism •  ラムダ計算 polymorphism
  • 11. 関数型⾔言語の⻑⾧長所と短所 ⻑⾧長所 •  ⾼高階関数を使った技が使える •  List処理理, 関数合成(コンビネータ)、モナドなど •  定理理と証明 •  証明された(動作保証された)定理理(関数)を積み上げてプログラムを 記述できる  (← 多少理理想論論も⼊入ってます) 短所 •  関数実⾏行行のオーバーヘッド •  関数オブジェクト •  メモリを⼤大量量に消費する •  関数オブジェクト •  データの⼤大量量複写 •  スタックの使⽤用量量が読めない •  再帰 •  回避する技のノウハウが必要
  • 12. 関数型⾔言語の技術マップ
  • 13. 代数的構造デザインパターン結合律律 (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
  • 14. 圏論論デザインパターン 圏  (category) モナド   • Hask圏 (Scala圏?) (monad) • クライスリ圏   (kleisli category) Applicative 射 (arrow, functor morphism) 関⼿手   (functor)
  • 15. 並列列プログラミング•  マルチスレッド   •  共有状態 (shared mutability) •  共有状態をロック ← 伝統的⽅方法 •  STM (Software Transactional Memory)•  アクター •  状態をアクターローカル(スレッドローカル)にする (isolating mutability) •  不不変オブジェクトによるメッセージで通信•  関数プログラミング⽅方式 •  代数的データ型、永続データ構造 •  ⇒ 不不変オブジェクト •  状態変更更ではなく、状態変更更命令令書を計算 •  イメージとしてはSQLの⽂文字列列を計算して作成する感じ •  モナドのメカニズムを使って並列列処理理(+状態変更更命令令書)を 隠蔽
  • 16. Object  Functional  Programming  (OFP)
  • 17. OFP新三種の神器 トレイト  (trait)•  mix-in•  型安全のAOP的な運⽤用 モナド  (monad)•  計算⽂文脈をカプセル化する新しい⾔言語概念念•  Monadicプログラミング 型クラス  (type class)•  型安全のダブルディスパッチ(?)•  Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
  • 18. オブジェクトと関数の連携(1)
  • 19. オブジェクトと関数の連携(2)
  • 20. Arrowを⽤用いたデーターフロー
  • 21. モナドによる計算⽂文脈
  • 22. Object  Functional  Analysis  and  Design  (OFAP)
  • 23. オブジェクトモデリング協調の実装技術がボトルネック ドメイン・モデル になっている 状態 機械 協調 静的  アプリケーション 構造 モデル
  • 24. オブジェクトの世界と関数の世界
  • 25. ユースケースと関数
  • 26. メタモデル
  • 27. 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演算
  • 28. まとめ•  論論点 •  業務アプリケーションにおける関数型⾔言語 •  どこまでかけるのか •  モナドの使い所 •  業務アプリケーションにおけるオブジェクト指向⾔言語 •  本物のオブジェクト指向⾔言語から新たな気づきはないか •  関数型⾔言語とオブジェクト指向⾔言語の選択 •  関数型⾔言語とモデリング技術の連携 •  形式⼿手法とモデリング?
  • 29. END