chapter2

オブジェクト指向・UML勉強会
~第2章 オブジェクト指向的な考え方~
九州大学 システム情報科学府
荒木研究室 修士1年
平地 智
1
目次
オブジェクト指向的な考え方
実装とインターフェイスの相違
抽象的に考えるインターフェイスの設計
インターフェイスの提示を最小限にする
2
オブジェクト指向的な考え方
手続き型からオブジェクト指向への移行

新しい思考プロセス(オブジェクト指向パラダイ
ム)の習得
手続き型開発
オブジェクト指向
パラダイムの導入
オブジェクト指向開発
手続き型言語
非オブジェクト指向開発
オブジェクト指向言語
3
目次
オブジェクト指向的な考え方
実装とインターフェイスの相違
抽象的に考えるインターフェイスの設計
インターフェイスの提示を最小限にする
4
実装とインターフェイスの相違
クラスの設計におけるカプセル化


ユーザーが知る必要があるものとそうでない
ものとを区別
不必要なデータはユーザーから隠蔽
5
カプセル化(1)
カプセル化の例1:発電所
オブジェクト
インターフェイス
実装
トースターは、電気の発電方法(実装)に関係なく
コンセント(インターフェイス)を用いることで電気を得る
6
カプセル化(2)
カプセル化の例2:自動車
ドライバーはハンドルというインターフェイスを知っており、
自動車の内部の実装方法を知る必要はない
7
インターフェイス
ユーザーに提供されるサービス
ユーザーに知らせる必要があるものだけを
含める

例:トースターのプラグを電気コンセントに差し
込む操作(メソッド)
8
実装
ユーザーには公開されない

インターフェイスを変えなければ実装は変更で
きる
インターフェイスの仕様に準拠する
9
インターフェイスと実装の例(1)
考える対象



Oracleデータベースの読み取り
(DataBaseReader)クラス
Oracleデータベースのレコードを取得するJava
クラスの記述
ユーザーとしてデータベースを使用するプログ
ラマを想定
10
インターフェイスと実装の例(2)
プロジェクトの要件をリストにする





データベースに接続できる
データベースへの接続を切断できる
データベースの最初のレコードにカーソルを合
わせられる
データベースの最後のレコードにカーソルを合
わせられる
…
11
インターフェイスと実装の例(3)
ユーザーとクラスとの関係

プログラマ(このクラスのユーザー)は、
 クラスを用いるために他に知るべき情報はない
 データベースを開くコードを記述できる必要はない
 正しい値が返され、操作が正しく実行されさえすれ
ばよい

プログラマのアプリケーションは、
 クラスを用いてデータベースを開く
12
インターフェイスと実装の例(4)
要件を元にインターフェイスを作成
•このクラスのメソッドは
全てパブリック
•実装は示されていない
DataBaseReader
+open:void
+close:void
+goToFirst:void
+goToLast:void
…
13
インターフェイスと実装の例(5)
インターフェイスメソッドのコード
Public void open(String name){
/* アプリケーション固有の処理 */
/* データベースを開くOracle APIを呼び出す */
/* アプリケーション固有の処理 */
};
データベースを開く
APIが変わっても問題ない
Public void open(String name){
/* アプリケーション固有の処理 */
/* データベースを開くSQLAnywhere APIを呼び出す */
/* アプリケーション固有の処理 */
};
14
インターフェイスと実装の例(6)
ユーザーコードとデータベース
ユーザーコード1
ユーザーコード2
インターフェイス
Oracle
DB2
SQL
Anywhere
15
目次
オブジェクト指向的な考え方
実装とインターフェイスの相違
抽象的に考えるインターフェイスの設計
インターフェイスの提示を最小限にする
16
抽象的に考えるインターフェイスの設計
再利用可能なクラス

抽象的なインターフェイスを持つ傾向
右折して
空港まで
お願いします
まっすぐ
行って
左折して
<抽象的>
<非抽象的>
右折して
17
目次
オブジェクト指向的な考え方
実装とインターフェイスの相違
抽象的に考えるインターフェイスの設計
インターフェイスの提示を最小限にする
18
インターフェイスの提示を最小限にする
本当に必要なものだけを提供する
クラス設計の際に考えるべきこと





ユーザーの指定
オブジェクトの動作
環境による制限
パブリックインターフェイスの指定
実装の特定
19
ユーザーの指定
システムを使用するのがユーザー
例:タクシー

タクシーオブジェクトにメッセージを送るのがユーザー
 運転手、客
利益が上がるなら
サービスを提供する
高すぎなければ
サービスを受ける
20
オブジェクトの動作と環境による制限
オブジェクトの動作

ユーザーの観点に立って以下を考える
 各オブジェクトの目的
 オブジェクトが正しく動作するための要件
環境による制限


オブジェクトの動作に制限
例:コンピュータのハードウェア、タクシー
21
パブリックインターフェイスの指定
ユーザーオブジェクトのパブリックインターフェイ
スを決定

タクシーオブジェクトの使い方を考える
 タクシーに乗り込む
 タクシーの運転手に行き先を告げる
…



インターフェイスがクラスの操作性に寄与するか判断
1つのインターフェイスで1つの振る舞いをモデル化
インターフェイスの例
Cabbie
+enterTaxi:void
+specifyDestination:void
…
22
実装の特定
パブリックインターフェイスではないものは
全て実装



パブリックでないメソッドの全体(シグニチャ+
コード)
パブリックメソッドのコード
例
Public void a(int x){
};
/* コード */
Private void b(int y){
/* コード */
};
インターフェイス
実装
23
まとめ
インターフェイスと実装の違い
抽象的に考える
ユーザーには最小限のインターフェイスを
提示する
24