プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也 インタフェースと抽象クラス インタフェース: メンバ変数を持たないクラスの一種.メソッドはすべて抽象メ ソッドで,抽象クラス同様,インスタンス化できない. 実装: 各クラスは,継承ではなく実装(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: Tetromino: PiledBlocks: テトリスの設計(2) 構成物を適切に分類する Model Movable Tetromino 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 ハードウェア オープンソース 世界の潮流を読むこと!!
© Copyright 2024 ExpyDoc