Scala + Lift フレームワーク. Scala の概要 JVM 上で動作するオブジェクト指向+関数型言 語 JVM のスケーラビリティを適用できる Java との相互利用が可能 trait を利用した多重継承( Mix-In )が可能.

Slides:



Advertisements
Similar presentations
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
Advertisements

Scala + Liftフレームワーク その2.
RailsによるAjaxの利用 回生 小野 実.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
JavaScript プログラミング入門 2006/11/10 神津.
Applet 岡部 祐典 鈴木 敬幸.
関数型オブジェクト指向言語 Scala超入門
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
エンタープライズアプリケーション II 第10回 / 2006年7月23日
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
アルゴリズムとデータ構造1 2007年6月12日
最適化ソルバーのための Python言語入門
卒研:データベースチーム 第4回 DOMを使った処理
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
エンタープライズアプリケーション II 第7回 / 2006年7月9日
Day3 Day4 Day3 Day4.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
ピカチュウによる オブジェクト指向入門 (新版)
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
プログラミング言語入門 手続き型言語としてのJava
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
WebサービスII (第7回) 2007年11月7日 植田龍男.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
プログラミング言語入門.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
Java8について 2014/03/07.
Javaによる Webアプリケーション入門 第11回
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
セキュリティ解析アルゴリズムの実現と オブジェクト指向言語への適用に関する一考察
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
マイグレーションを支援する分散集合オブジェクト
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
2008/09/20 ジェネリクスを使おう! 凪瀬悠輝(なぎせゆうき).
2008/09/20 ジェネリクスを使おう! 凪瀬悠輝(なぎせゆうき).
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
第6回放送授業.
ソフトウェア理解支援を目的とした 辞書の作成法
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラム理解のための 付加注釈 DocumentTag の提案
JSFによるWebアプリケーション開発 第7回
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

Scala + Lift フレームワーク

Scala の概要 JVM 上で動作するオブジェクト指向+関数型言 語 JVM のスケーラビリティを適用できる Java との相互利用が可能 trait を利用した多重継承( Mix-In )が可能

Lift の概要 フルスタックの Web アプリケーションフレーム ワーク 簡潔な関数型 Web フレームワーク Snippet アプローチ View を中心としたアーキテクチャ

Lift の特徴 ( 抜粋 ) Lift の Comet サポートはほかに例のない優れた もので、 Ajax サポートも非常に簡単である。

Lift で Comet を使ったチャットアプリケーシ ョン 機能としては最小限のものとする actor ライブラリを利用する

チャットサーバーオブジェクトの定 義 object ChatServer extends LiftActor with ListenerManager { private var messages = List(" チャットルームへようこそ ") def createUpdate = messages override def lowPriority = { case s: String => messages ::= s ; updateListeners() } LiftActor を継承し、 ListenerManager トレイトを mixin することでリスナーを管理できる オブジェクト ( シングルトン ) として、チャットサーバーを定義。 createUpdate は updateListeners() 時に呼び出され、送信情報を返します(この場合、ポ ストされたメッセージリスト) lowPriority はメッセージが届いた際に呼び出されるメソッド。オーバーライドし、マッチ ング処理を行い、 updateListeners を呼び出す。 (low 、 medium 、 hight の三種類あるが、割愛 )

Chat コンポーネントの定義 class Chat extends CometActor with CometListener { private var msgs: List[String] = Nil def registerWith = ChatServer override def lowPriority = { case m: List[String] => msgs = m; reRender(false) } import scala.xml.NodeSeq def render = bind("chat", // バインディングのための名前空間 "line" -> lines _, // 関数 lines をバインド "input" -> SHtml.text("", s => ChatServer ! s)) private def lines(xml: NodeSeq): NodeSeq = msgs.reverse.flatMap(m => bind("chat", xml, "msg" -> m)) } 解説は次ページ

private var msgs: List[String] = Nil ローカル状態を格納する変数。 def registerWith = ChatServer ChatServer からの変更通知を受け取れるように、登録。 override def lowPriority = { case m: List[String] => msgs = m; reRender(false) } ChatServer からの変更通知時の処理。ローカル状態を更新し、 reRender(false) を呼び出す。 Comet コンポーネントのレンダリングを やり直す処理。

def render = bind("chat", "line" -> lines _, "input" -> SHtml.text("", s => ChatServer ! s)) private def lines(xml: NodeSeq): NodeSeq = msgs.reverse.flatMap(m => bind("chat", xml, "msg" -> m)) 名前空間 chat のタグにコンテンツをバインド。 lines の戻り値で を置き換え、 SHtml.text の戻り値で を置き換える。 SHtml オブジェクトの text メソッドは入力フィールドを返し、第一引数 は入力フィールドの初期値、第二引数はサブミット時に呼び出され る関数となる。 lines では、リストを逆順にして NodeSeq を返却する。

Index.html の中身

総評 trait による Mix-in と、 actor ライブラリを利用す ることで、 JavaScript を意識することなく、 Comet アプリケーションを作成することができ る Scala 自体が難解であるため、アプリケーショ ン作成難度自体が下がるとは言いがたい