プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也
インタフェースと抽象クラス インタフェース: メンバ変数を持たないクラスの一種.メソッドはすべて抽象メソッドで,抽象クラス同様,インスタンス化できない. 実装: 各クラスは,継承ではなく実装(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) 以下の3種類のGUI部品を用いる. トップレベル・コンポーネント(コンテナ) 中間コンポーネント(コンテナ) 他の部品を追加できるが他の部品に含まれないもの. 中間コンポーネント(コンテナ) 他の部品に含まれ,他の部品を追加できるもの. アトミック・コンポーネント 他の部品を追加できないもの. トップレベル コンポーネント 中間コンポーネント アトミックコンポーネント
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 PiledBlocks FallingBlocks
テトリスの設計(2)
講義で話せなかったこと プログラム理論: コンパイラやインタプリタの内部処理: 他のプログラミングパラダイム: 型理論 意味論 計算モデル コンパイラやインタプリタの内部処理: 最適化 構文解析 ガベージコレクション 他のプログラミングパラダイム: 関数型プログラミング(特にLisp) アスペクト指向 開発手法:(後期のソフトウェア工学で…) デザインパターン リファクタリング
参考文献,URL Java Eclipse UML: デザインパターン: フレームワーク: http://java.sun.com/j2se/1.4.2/ja/download.html Eclipse http://www.eclipse.org/ UML: http://www.uml.org/ デザインパターン: E.Gamma, R.Helm, R.Johnson, J.Vlissides著,本位田真一, 吉田和樹 訳:「オブジェクト指向における再利用のための デザインパターン 改訂版」, ソフトバンクパブリッシング. フレームワーク: R.Johnson, 中村宏明, 中山裕子,吉田和樹著: 「パターンとフレームワーク」, 共立出版 ソフトウェアテクノロジーシリーズ1.
講義を終えるに当たって… 日本のソフトウェア産業 2000年の日本のソフトウェアの輸出額は輸入額の100分の1程度. 1995~2000年の間の カスタムソフトの輸入の伸びは約8倍(32%). 輸入元は米国89%, 欧州7%と続く. 中国,インドへのオフショアリングの増加. 「ソフトウェア輸出入統計調査」 電子情報技術産業協会(2003)
ソフトウェア産業の未来 ソフトウェアの高度化,大規模化 世界の潮流を読むこと!! コンポーネント指向 ダウンサイジング ビジネスモデリング ハードウェア アプリケーション 高級言語 OS フレームワーク ミドルウェア コンポーネント指向 ダウンサイジング ハードウェア アプリケーション 高級言語 OS ハードウェア アプリケーション 低級言語 OS アプリケーション ビジネスモデリング アジャイル ハードウェア SOA オープンソース 世界の潮流を読むこと!!