オブジェクト指向言語論 第十二回 知能情報学部 新田直也
抽象クラス,抽象メソッド 抽象メソッド: 実体を持たないメソッド.abstract 修飾子を付ける. メソッドの実装は派生クラスに任せる. 抽象クラス: 抽象メソッドを1つ以上持つクラス.抽象クラスはインスタンス化できない.(継承しなければ使えない.) abstract class Shape { // 抽象図形クラス abstract void view(Graphics g); // 抽象表示メソッド } → Shape クラスはインスタンス化できない.
インタフェースと抽象クラス インタフェース: メンバ変数を持たないクラスの一種.メソッドはすべて抽象メソッドで,抽象クラス同様,インスタンス化できない. 実装: 各クラスは,継承ではなく実装(implements)を用いてインタフェースを利用する.Javaでは複数のクラスを同時に継承すること(多重継承)は許されていないが,複数のインタフェースを同時に実装することは許されている. 抽象クラスとの違い: 抽象クラス → クラスの未完成品,汎化されたクラス インタフェース → 会話するための約束事,付加的な機能
インタフェースの使用例 マウスイベントの監視インタフェース public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); } abstract class Shape implements MouseListener { : public void mouseClicked(MouseEvent e) { // マウスクリックされたときの処理
UML UML(Unified Modeling Language) ソフトウェアモデルの図的表記法 主に実装前の分析,設計に用いる ’97,OMG(Object Management Group)により標準化 オブジェクト指向開発における世界的潮流 10種類の図(ダイアグラム)からなる 構造図 クラス図,オブジェクト図,パッケージ図 振る舞い図 ユースケース図,シーケンス図,コラボレーション図,ステートチャート図,アクティビティ図 実装図 コンポーネント図,配置図
クラス図 クラスやインタフェース間の関係を記述する. インタフェース 関連 実装 クラス 多重度 継承 クラス名 メンバ変数 メソッド
JavaAPI(1) 前回の図形描画プログラムで説明しなかったこと. import文 Frameクラス Graphicsクラス import java.awt.*; : public class GraphicWindow extends Frame { : public void paint(Graphics g) {
JavaAPI(2) パッケージ: 複数のクラスをまとめたもの. インポート: パッケージの利用.プログラム先頭で以下のように指定する. (Cの#include文のようなもの) import パッケージ名.クラス名; import パッケージ名.*; import java.awt.*; : public class GraphicWindow extends Frame { : public void paint(Graphics g) {
JavaAPI(3) 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を用いたゲームプログラミング