プログラミング言語論0713

プログラミング言語論
第十四回
理工学部
情報システム工学科
新田直也
AWT(1)

1.
以下の3種類のGUI部品を用いる.
トップレベル・コンポーネント(コンテナ)

2.
中間コンポーネント(コンテナ)

3.
他の部品を追加できるが他の部品に含まれないもの.
他の部品に含まれ,他の部品を追加できるもの.
アトミック・コンポーネント

他の部品を追加できないもの.
中間コンポーネント
アトミックコンポーネント
トップレベル
コンポーネント
AWT(2)

コンポーネントのクラス階層.
アトミックコンポーネント
トップレベル
コンポーネント
AWT(3)

リスナインタフェース



各コンポーネント毎に追加され,そのコンポーネントで発
生するイベント(マウスクリックなど)を監視する.
各コンポーネントでイベントが発生したときに,イベントの
種類に応じたメソッドが呼ばれる.
実際のイベント処理は,リスナインタフェースを実装した
各具象クラス(ユーザが自由に定義する)に記述する.
AWT(4)
フレームワーク

フレームワークとは…



抽象クラスの集合とそのインスタンス間の相互作用によっ
て表現された,システムの全体または一部の再利用可能
な設計(ソースコード)
開発者がカスタマイズできる,アプリケーションの骨組み
例:
AWT, JavaBeans, OLE, CORBA, San Francisco, …
アプリケーション1
アプリケーション2
アプリケーション3
フレームワーク
フレームワーク
フレームワーク
フレームワークの再利用
→ 開発の効率化,アプリケーションの統一性
フレームワークとアプリケーション
フレームワーク
(17クラス)
アプリケーション
フレームワークの技術

フレームワークで用いる主な技術:

抽象クラス,インタフェース



フレームワーク中の多くクラスは抽象クラスかインタフェース.
アプリケーションクラスは,フレームワークのクラスを継承または
実装して用いる.(ホワイトボックス再利用)
制御の反転(IoC, Inversion of Control)


メインループがフレームワーク側に存在する.
アプリケーションのコードは必要に応じて呼び出される.
main
mouseClicked
windowClosing
MVCフレームワーク

MVC(Model-View-Controller)フレームワーク:





最初に広く使われたフレームワーク(’70年代後半)
Smalltalk-80のユーザインタフェースのフレームワーク
後世のさまざまなフレームワークに影響
アプリケーションロジックとユーザインタフェースを分離す
るのが目的
MVCの構造:
ユーザインタフェース
表示
アプリケーション
ロジック
ビュー
モデル
入力
コントローラ
データを保持
フレームワークの現状

現状:





GUIに限らず,さまざまな分野でフレームワークが発展し
ている.
多くはオブジェクト指向技術に基づいたもの.
商用(あるいはオープンソース)のものと,自社開発用の
ものがある.
コンポーネント技術(ActiveX, JavaBeansとしても発
展),アプリケーション構築ツールとも連動.
問題点:


習得が困難(優れたドキュメント,長時間のトレーニング)
開発も困難
(対象領域の注意深い分析が必要,後で変更しにくい)
デザインパターン

E. Gamma, R. Helm, R. Johnson, J. Vlissides
(GoF:ギャングオブフォー):
「オブジェクト指向における再利用のための
デザインパターン 改訂版」,ソフトバンクパブリッシング.
 ソフトウェアで頻繁に出現する設計のパターンをカタログ化.
 上記書籍では23種類のパターンを紹介.
 MVCフレームワークはデザインパターンの原型.
 各パターンは以下の4つの要素で構成される.




パターン名
問題
解法
結果
→ パターンとして抽出し名前をつけたことが重要!!
Observerパターン(1)


MVCフレームワークの主要部分.(モデルとビューに相当)
問題:
Observers (Views)
90
4 月
13%
80
1 月
13%
70
60
2 月
17%
50
東京
名古屋
40
大阪
1月
東京
名古屋
大阪
2月
20.4
30.6
45.9
3月
27.4
38.6
46.9
4月
90
34.6
45
20.4
31.6
43.9
30
20
3 月
57%
10
0
1 月
2 月
3 月
4 月
表示の更新
データの要求,変更
d[0][0] = 20.4
d[0][1] = 27.4
:
Subject (Model)
Observerパターン(2)

問題の詳細:






論理的な情報はSubjectが保持し,外観に関する情報は
各Observerが有する.
1つのSubjectに対して,Observerを任意個(実行時に)
対応させれる.
Subjectの情報の変更は,即座にObserverに反映される.
Observerに対する変更は,必要に応じてSubjectに反映
される.
Subjectの具象クラスは複数存在し,具象クラスによって
保持している論理情報は異なる.
Observerの具象クラス(表クラス,棒グラフクラス,円グラ
フクラスなど)も複数存在している.Subjectは,どんな具
象クラスが自分に対応しているかを知らない.
Observerパターン(3)

解法:
データを保持
フレームワーク側
アプリケーション側
複数個のObserverを参照
ConcreteSubjectを知っている
Factory Methodパターン

問題:アプリケーションはドキュメントを生成し保持するが,
具体的なドキュメントのクラスを知らないため,自身ではド
キュメントをインスタンス化できない.

解法:
フレームワーク側
アプリケーション側
Compositeパターン

問題:
オブジェクトを木構造に組み立てる際,個々のオブジェクトと
それらを合成したものを一様に扱いたい.

解法:
AWTのコンポーネントとコンテナ
アトミックコンポーネント
コンテナ
フレームワークとパターン

抽象度:
フレームワークはコードの再利用.パターンは設計の再利用.

粒度:
一般にフレームワークは複数のパターンを含んでいる.
パターンはフレームワークより小さい要素.

汎用性:
多くのフレームワークは特定のアプリケーション分野に特化
している.パターンは分野によらず使用できる.
講義で話せなかったこと

プログラム理論:




コンパイラやインタプリタの内部処理:




最適化
構文解析
ガベージコレクション
他のプログラミングパラダイム:



型理論
意味論
計算モデル
関数型プログラミング(特にLisp)
アスペクト指向
開発手法:(後期のソフトウェア工学で…)


RAD
リファクタリング
参考文献,URL

Java


Eclipse


http://www.uml.org/
デザインパターン:


http://www.eclipse.org/
UML:


http://java.sun.com/j2se/1.4.2/ja/download.html
E.Gamma, R.Helm, R.Johnson, J.Vlissides著,本位田真一, 吉田和樹
訳:「オブジェクト指向における再利用のための デザインパターン 改訂版」,
ソフトバンクパブリッシング.
フレームワーク:

R.Johnson, 中村宏明, 中山裕子,吉田和樹著:
「パターンとフレームワーク」, 共立出版 ソフトウェアテクノロジーシリーズ1.
講義を終えるに当たって…

日本のソフトウェア産業




2000年の日本のソフト
ウェアの輸出額は輸入
額の100分の1程度.
1995~2000年の間の
カスタムソフトの輸入の
伸びは約8倍(32%).
輸入元は米国89%,
欧州7%と続く.
中国,インドへのオフショ
アリングの増加.
「ソフトウェア輸出入統計調査」
電子情報技術産業協会(2003)
ソフトウェア産業の未来

ソフトウェアの高度化,大規模化
アプリケーション
コンポーネント指向
ダウンサイジング
アプリケーション
アプリケーション
アプリケーション
低級言語
高級言語
OS
アジャイル
ハードウェア
ハードウェア
OS
フレームワーク
ミドルウェア
高級言語
ビジネスモデリング
ハードウェア
SOA
OS
ハードウェア
オープンソース
世界の潮流を読むこと!!