プログラム再構成に関する 特許申請について

プログラミング言語論
第十三回
理工学部
情報システム工学科
新田直也
インタフェースと抽象クラス

インタフェース:
メンバ変数を持たないクラスの一種.メソッドはすべて抽象メ
ソッドで,抽象クラス同様,インスタンス化できない.

実装:
各クラスは,継承ではなく実装(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
ハードウェア
オープンソース
世界の潮流を読むこと!!