プログラミング言語論14
Download
Report
Transcript プログラミング言語論14
プログラミング言語論
第十四回
理工学部
情報システム工学科
新田直也
インタフェースと抽象クラス
インタフェース:
メンバ変数を持たないクラスの一種.メソッドはすべて抽象メ
ソッドで,抽象クラス同様,インスタンス化できない.
実装:
各クラスは,継承ではなく実装(implements)を用いてイン
タフェースを利用する.Javaでは複数のクラスを同時に継承
すること(多重継承)は許されていないが,複数のインタ
フェースを同時に実装することは許されている.
抽象クラスとの違い:
抽象クラス
→ クラスの未完成品,汎化されたクラス
インタフェース → 会話するための約束事,付加的な機能
インタフェースの使用例
マウスイベントの監視インタフェース
public interface KeyListener extends EventListener {
public void keyTyped(KeyEvent e);
public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
}
abstract class MyKeyListner implements KeyListener {
:
public void keyTyped(KeyEvent e) {
// キーがタイプされたときの実際の処理
}
}
UML
UML(Unified Modeling Language)
ソフトウェアモデルの図的表記法
主に実装前の分析,設計に用いる
’97,OMG(Object Management Group)により標準
化
オブジェクト指向開発における世界的潮流
10種類の図(ダイアグラム)からなる
構造図
クラス図,オブジェクト図,パッケージ図
振る舞い図
ユースケース図,シーケンス図,コラボレーション図,
ステートチャート図,アクティビティ図
実装図
コンポーネント図,配置図
クラス図
クラスやインタフェース間の関係を記述する.
インタフェース
関連
実装
クラス
継承
クラス名
メンバ変数
メソッド
多重度
JavaAPI(1)
パッケージ: 複数のクラスをまとめたもの.
インポート:
パッケージの利用.プログラム先頭で以下のように指定する.
(Cの#include文のようなもの)
import パッケージ名.クラス名;
import パッケージ名.*;
import java.awt.*;
:
public class GraphicWindow extends Frame {
:
public void paint(Graphics g) {
:
:
JavaAPI(2)
JavaAPI:
標準で配布されるパッケージ.主にOSとの仲立ちを行う.
Java.langパッケージ:
System, String, Mathクラスなど,java.langパッケージ
に含まれる基本クラスは,インポートしなくても使える.
System.out.println(“Hello World!!”);
AWTパッケージ(java.awt):
GUIを提供しているパッケージ.プラットフォームによって動
作が異なる.
Swingパッケージ(javax.swing):
AWTを拡張したパッケージ.動作がプラットフォームに依存
せずかつ軽量.(軽量コンポーネント)
AWT/Swing(1)
1.
以下の3種類のGUI部品を用いる.
トップレベル・コンポーネント(コンテナ)
2.
中間コンポーネント(コンテナ)
3.
他の部品を追加できるが他の部品に含まれないもの.
他の部品に含まれ,他の部品を追加できるもの.
アトミック・コンポーネント
他の部品を追加できないもの.
中間コンポーネント
アトミックコンポーネント
トップレベル
コンポーネント
AWT/Swing(2)
コンポーネントのクラス階層.
アトミックコンポーネント
トップレベル
コンポーネント
AWT/Swing(3)
リスナインタフェース
各コンポーネント毎に追加され,そのコンポーネントで発
生するイベント(マウスクリックなど)を監視する.
各コンポーネントでイベントが発生したときに,イベントの
種類に応じたメソッドが呼ばれる.
実際のイベント処理は,リスナインタフェースを実装した
各具象クラス(ユーザが自由に定義する)に記述する.
Swingを用いたゲームプログラミング
テトリスの開発
Swingを使用
開発期間:9時間40分
コード行数:903行
http://silverbullet.is.konan-u.ac.jp/
lectures/ProgrammingLanguage/tetris.html
テトリスの設計(1)
画面の構成物にどのようなものがあるか?
Block:
FallingBlocks:
PiledBlocks:
テトリスの設計(2)
構成物を適切に分類する
Model
Movable
FallingBlocks
PiledBlocks
テトリスの設計(2)
講義で話せなかったこと
プログラム理論:
コンパイラやインタプリタの内部処理:
最適化
構文解析
ガベージコレクション
他のプログラミングパラダイム:
型理論
意味論
計算モデル
関数型プログラミング(特にLisp)
アスペクト指向
開発手法:(後期のソフトウェア工学で…)
デザインパターン
リファクタリング
参考文献,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
ハードウェア
オープンソース
世界の潮流を読むこと!!