SlideShare a Scribd company logo
1 of 39
Download to read offline
Object-Functional!
Analysis and Design!
次世代モデリングパラダイムへの道標
2012年3⽉月19⽇日
匠BusinessPlace
浅海智晴
⾃自⼰己紹介
•  (株)匠BusinessPlace。⽇日本Javaユーザグループ副会⻑⾧長。
   edge2.cc主宰。
•  代表作
  •  XML SmartDoc (XML⽂文書処理システム)
  •  Relaxer (XML/Javaスキーマコンパイラ)
•  開発中
  •  SimpleModeler (Scala DSLモデルコンパイラ)
  •  SmartDox (⽂文書処理システム)
  •  g3 (サービスマッシュアップフレームワーク)
  •  g4 (Androidアプリケーションフレームワーク)
•  近著
  •  「上流⼯工程UMLモデリング」(⽇日経BP)
  •  「マインドマップではじめるモデリング講座」(翔泳社)
  •  「ボクらのScala」(Softbank Creative)
活動
関連サイト
•  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/
⽂文脈
アジェンダ

関数型プログラミング

 Object Functional
 Programming (OFP)

   Object Functional Analysis
   and Design (OFAD)

      応⽤用
新しい現実
クラウド・プラットフォーム

•    クラウド・サービス、スマート・デバイス
•    故障、遅延
•    ⼤大規模データ、⼤大規模演算
•    ⾼高頻度イベント
•    ⾮非同期、並列、分散
•    計算機科学

メニーコア

•  並⾏行行プログラミング

メモリDB

•  I/Oボトルネックの解消
   •  アルゴリズム勝負
   •  並⾏行行プログラミング
OFADの要素技術/関連技術
                            CQRS

      Scala                 EIP
                    クラウド
      DSL           コンピュー   EDA

 計算機科学              ティング
                             アジャイル
              OFP
                              開発




  OOAD              OFAD           UCD/UX

DDD

DCI
                            はセッションで触れる技術
アプリケーションの階層と役割

アプリケー   •  DSLの作法に従ってビジネスロ
           ジックを記述
 ション    •  OO、関数型のスキルは最低限


        •  フレームワークを簡単に使⽤用する
 DSL       ための専⽤用⾔言語
        •  OO、関数型の⾼高度なスキル


フレーム    •  ドメインの共通処理を記述
 ワーク    •  OO、関数型の⾼高度なスキル
関数型プログラミング
関数型⾔言語とは
•  ⾼高階関数を扱える。
 •  関数を値として扱える。
 •  関数の引数と返却値に関数を渡せる。
 •  関数リテラル(クロージャ)が記述できる。




•  数学(ラムダ計算、圏論など)的にプログラムを記述でき
   る。
関数型⾔言語の系譜


                                      新世代関数型
                                      ⾔言語
                                      •  Haskell
                 伝統的関数型               •  Scala(+scalaz)
                 ⾔言語                  •  ラムダ計算
                 •  Lisp, ML, OCaml   •  代数、圏論
                 •  ラムダ計算             •  型クラス
                 •  ⼿手続き、オブジェ            •  代数データ型、
  元祖関数型⾔言語          クト指向で補完                 モナド
  •  pure Lisp      •  抽象データ型            •  Parametric
                    •  Subtype              polymorphism
  •  ラムダ計算
                       polymorphism
関数型⾔言語の⻑⾧長所と短所
 ⻑⾧長所

 •  ⾼高階関数を使った技が使える
    •  List, 関数合成(コンビネータ)など
 •  定理と証明
    •  証明された(動作保証された)定理(関数)を積み上げてプログラ
       ムを記述できる (← 多少理想論も⼊入ってます)

 短所

 •  関数実⾏行行のオーバーヘッド
    •  関数オブジェクト
 •  メモリを⼤大量に消費する
    •  関数オブジェクト
    •  データの⼤大量複写
 •  スタックの使⽤用量が読めない
    •  再帰
関数型⾔言語の技術マップ
代数的構造デザインパターン
結合律 (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
圏論デザインパターン

                         圏 (category)
          モナド            • Hask圏 (Scala圏?)
         (monad)         • クライスリ圏
                          (kleisli category)




   Applicative                     射 (arrow,
    functor                        morphism)




                      関⼿手
                   (functor)
Object Functional
Programming (OFP)
OFP新三種の神器
 トレイト (trait)

•  mix-in
•  型安全のAOP的な運⽤用

 モナド (monad)

•  計算⽂文脈をカプセル化する新しい⾔言語概念
•  Monadicプログラミング

 型クラス (type class)

•  型安全のダブルディスパッチ(?)
•  Scalaでは、⽂文脈、主体、客体の組でオブジェクトを束縛
オブジェクトと関数の連携(1)
オブジェクトと関数の連携(2)
Arrowを⽤用いたデーターフロー
KleisliでOption/Listを合成
Object Functional Analysis
and Design (OFAP)
オブジェクトモデリング
協調の実装技術
がボトルネック              ドメイン・モデル
 になっている         状態
                機械

           協調
                 静的  
アプリケーション         構造
  モデル
モデル変換の流れ


 業務モデリング          要求モデリング        システム・モデリング             設計          実装
                                 アプリケーション・モデル


                                    システム
 業務モデル     抽出     要求モデル     変換                具体化     設計モデル    実現   実装
                                    モデル




                                      調整




                                                        調整




                                                                    参照
   抽出




                     拡張




                                     解決空間             解決空間
           問題空間                    プラットフォーム         プラットフォーム   実現   実装
                                      非依存              固有


                                   ドメイン・モデル




                                   DDDのカバー範囲
オブジェクトの世界と関数の世界
オブジェクトの世界と関数の世界-2
ユースケースと関数
イベント→データフローの流れ
メタモデル
データフローの実装技術
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の⾃自然なプログラミングで記述できる。
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演算
応⽤用
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)
Data	 Context	 Interaction	 (DCI)




    トレイト/型クラス
    でロールをデータ
      に編みこみ
CQRS,	 EDA
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");
     }
};
まとめ
•  クラウド・コンピューティング、メニーコアで並⾏行行・分
   散プログラミングが必須に。
 •  関数型⾔言語で計算機科学、数学の果実を取り込む道筋をつ
    ける。
 •  技術革新の発⽣生する場になる。
•  要求仕様からシステムアーキテクチャはオブジェクト、
   アルゴリズムは関数のハイブリッドが現実解。
•  オブジェクト・モデリングのボトルネックである協調を
   関数型で埋める⽅方法が論点の⼀一つ。
 •  プロセス計算で協調を記述するのはまだ時期尚早?
 •  当⾯面はデータフローをDSLで記述する応⽤用が期待⼤大。
END

More Related Content

What's hot

Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数
amkt922
 

What's hot (20)

Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
 
協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】
協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】
協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数
 
Xcore introduction
Xcore introductionXcore introduction
Xcore introduction
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
はてなブックマーク in Scala
はてなブックマーク in Scalaはてなブックマーク in Scala
はてなブックマーク in Scala
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
 

Viewers also liked

20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogramming
Masanori Kado
 
SimpleModelerによるAndroidアプリ自動生成 with g3/g4
SimpleModelerによるAndroidアプリ自動生成 with g3/g4SimpleModelerによるAndroidアプリ自動生成 with g3/g4
SimpleModelerによるAndroidアプリ自動生成 with g3/g4
Tomoharu ASAMI
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
Tomoharu ASAMI
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
Tomoharu ASAMI
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 

Viewers also liked (17)

20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogramming
 
SimpleModelerによるAndroidアプリ自動生成 with g3/g4
SimpleModelerによるAndroidアプリ自動生成 with g3/g4SimpleModelerによるAndroidアプリ自動生成 with g3/g4
SimpleModelerによるAndroidアプリ自動生成 with g3/g4
 
モデリングの未来 〜~パネルディスカッション
モデリングの未来 〜~パネルディスカッションモデリングの未来 〜~パネルディスカッション
モデリングの未来 〜~パネルディスカッション
 
JavaWorld Day 2009 Scala
JavaWorld Day 2009 ScalaJavaWorld Day 2009 Scala
JavaWorld Day 2009 Scala
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
 
Monadicプログラミング マニアックス
Monadicプログラミング マニアックスMonadicプログラミング マニアックス
Monadicプログラミング マニアックス
 
Everforth AWS
Everforth AWSEverforth AWS
Everforth AWS
 
Scala DSLの作り方
Scala DSLの作り方Scala DSLの作り方
Scala DSLの作り方
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
Scala in Model-Driven development for Apparel Cloud Platform
Scala in Model-Driven development for Apparel Cloud PlatformScala in Model-Driven development for Apparel Cloud Platform
Scala in Model-Driven development for Apparel Cloud Platform
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考えるオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
 
Prefer Cloud Platform - ビジョン、アーキテクチャ
Prefer Cloud Platform - ビジョン、アーキテクチャPrefer Cloud Platform - ビジョン、アーキテクチャ
Prefer Cloud Platform - ビジョン、アーキテクチャ
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
 

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

Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
Atsuhiro Kubo
 
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
貴志 上坂
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
Atsuhiro Kubo
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
 

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

設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
 
Kaleidox
KaleidoxKaleidox
Kaleidox
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
 
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
RDB開発者のためのApache Cassandra データモデリング入門
RDB開発者のためのApache Cassandra データモデリング入門RDB開発者のためのApache Cassandra データモデリング入門
RDB開発者のためのApache Cassandra データモデリング入門
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 

More from Tomoharu ASAMI

More from Tomoharu ASAMI (20)

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
 
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
 
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
 
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
 
ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】
ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】
ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】
 
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
 

Recently uploaded

Recently uploaded (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

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

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