pi-11. Javaにおけるオブジェク
ト指向設計:クラス階層,多相
性,インターフェース,デザイ
ンパターン
1
金子邦彦
Java マスター講座:基礎から応用まで)
URL: https://www.kkaneko.jp/pro/pi/index.html
Javaのオブジェクト指向設計における,クラス階層
多相性・インターフェースの仕組みとデザインパターン
の基礎
学習内容の構成
クラス階層と多相性:スーパークラスによる共通機能
の集約と,メソッドのオーバーライドによるサブク
スごとの振る舞いの実現
インターフェース:継承関係がないクラス間で同名メ
ソッドの実装を保証し,同一種類のオブジェクトと
て扱う仕組み
デザインパターン:プログラムで頻出するパターン
GoF23パターン)の活用
前提:Javaの基本文法,クラスとオブジェクトの理解
意義:プログラムのミス削減,拡張性の向上,設計
定石の習得
2
Java Tutor の起動
ウェブブラウザを起動する
Java Tutor を使いたいので,次の URL を開く
https://pythontutor.com/java.html
Java」をクリック 編集画面が開く
3
Java Tutor でのプログラム実行手
4
(1)Visualize Execution」をク
リックして実行画面に切り替える
(2)Last」をクリック.
(3) 実行結果を確認する.
(4)Edit this code」をク
リックして編集画面に戻る
Java Tutor 使用上の注意点①
実行画面で,次のような赤の表示が出ることがある
無視してよい
過去の文法ミスに関する確認表示
邪魔なときは「Close
5
Java Tutor 使用上の注意点②
please wait ... executing」のとき,10秒ほど待つ
混雑しているときは, Server Busy・・・」
というメッセージが出ることがある.
混雑している.少し(数秒から数十秒)待と自
動で表示が変わる(変わらない場合には,操作を
もう一度行ってみる)
6
11-1. クラス階層と多相性
7
8
円(Circle
半径 3,場所(2, 4
green
1, 高さ 2, 場所(6, 4
black
長方形
(Rectangle)
クラス階層は何のため?
似通ったクラス Circle, Rectangle を使いたい.プロ
グラムのミスを減らすため,スーパークラスを考える
将来,図形の種類を増やすときにも有効
9
Figure
Circle
Rectangle
クラス Circle, クラス Rectangle が似ている.
共通する機能を、スーパークラ Figure にまとめる.
スーパークラス
サブクラス
10
円(Circle
半径 3,場所(2, 4
green
1, 高さ 2, 場所(6, 4
black
長方形
(Rectangle)
Circle クラスでもあり,
Figure クラスでもある
Rectangle クラスでもあり,
Figure クラスでもある
Java のメソッド
上下左右の移動
オブジェクトの属性 x, y を増減
そのためのメソッド move Figure クラスに定義
11
x
y
x が増える
x が減る
y が増える
y が減る
Java のメソッド
面積を求める
そのためのメソッド size を定義
: 半径 × 半径 × 3.14
長方形: ×
12
メソッドのオーバーライド
同じ名前メソッドが,クラスによって違った意
を持つ
メソッド area
クラス Figure では 0
クラス Circle では 円の面積
クラス Rectangle では 長方形の面積
13
演習
資料:16 18
トピックス
クラス階層
メソッドのオーバーライド
14
15
メソッド area
メソッド move
メソッド area
Java Tutor のエディタで次のプログラムを入れ
16
続き
メソッドを呼び出す部分
メソッド area
実行し,結果を確認する
17
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
多相性
さまざまなサブクラスオブジェクトを、「スー
パークラスのオブジェクトである」と思って扱う
ときに役立つ
18
演習
資料:21 23
トピックス
クラス階層
メソッドのオーバーライド
多相性
19
20
Java Tutor のエディタで次のプログラムを入れ
21
続き
実行し,結果を確認する
22
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
リストに、要素を追加
このリストは「ArrayList<Figure>
x a は、Figure クラスのオブジェクトとして、
リストに追加される
多相性により、move メソッド(面積の算出)に
問題ない.x では円の面積、a では長方形の面積
23
11-2. インターフェイスと実装
24
さまざまなクラスオブジェクを、「同じ種類のオブ
ジェクトである」かのように扱う2つの方法
スーパークラスサブクラス、多相性 (11-1. で説明)
継承あり
インターフェイス (11-2. で説明)
Java 処理系は、クラスがインターフェイスに準拠
するかチェックを行う
(「継承」は無関係)
25
2つのクラス
Matome Bara
属性 属性
number price
unit
メソッド
total total
26
名前は同じだが,
中身が違う
(number)
単価 (unit)
価格 (price)
共通する属性がない
インターフェイス
複数のクラス A, B
名前が同じメソッドを持つとき
A, B は,共通するインターフェイスを持つ
と考えることができる
メソッドの中身は違っても構わない)
Java 処理系には,クラスがインターフェイスに準
拠するかをチェックする機能がある.
インターフェースは Java, C# 言語などが持つ機能
27
インターフェイスの Java プログラム例
28
インターフェイス名
中身のないメソッド
クラス定義で,インターフェイス準拠の指定
29
クラス Matome がインターフェイス Product 準拠するとき
クラス定義で,インターフェイス準拠の指定
30
クラス Bara がインターフェイス Product 準拠するとき
インターフェイスの機能①
メソッドの定義を忘れるなどで、
インターフェイスに適合しないときは、
警告メッセージが出る
31
演習
資料:34 36
【トピックス】
インターフェイス
32
33
クラス定義
インターフェイス
Java Tutor のエディタで次のプログラムを入れ
34
続き
クラス定義
実行し,結果を確認する
35
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
インターフェイスの機能②
コレクションとの組み合わせ
ArrayList<インターフェイス名>
のような使い方が可能
36
演習
資料:39 41
トピックス
インターフェイス
コレクション
37
38
Java Tutor のエディタで次のプログラムを入れ
39
続き
実行し,結果を確認する
40
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
インターフェイス
インターフェイスは,あるメソッド実装済みで
あること保証する仕組み
コレクションで「ArrayList<インターフェイス名
>」のように書くこともできる
さまざまなクラスオブジェクト、「同じ種類
のオブジェクトである」かのように扱う仕組みの
1つ
41
11-3. デザインパターン
42
デザインパターンとは
デザインパターンとは,プログラムで頻出される
とされるパターンのこと
デザインパターンを知り,活用することが,プロ
グラムを簡単に確実に作成できる手段であると唱
える人も
デザインパターンの種類は 23 である(GoF23
パターン)という説も
43
デザインパターンの例
Template Method」というデザインパターンの例.
サブクラスごとにメソッドの中身が違う.スーパーク
ラスでは、メソッドの中身は書かないというパターン
44
関連ページ
Java プログラミング入門
GDB online を使用
https://www.kkaneko.jp/pro/ji/index.html
Java の基本
Java Tutor, GDB online を使用
https://www.kkaneko.jp/pro/pi/index.html
Java プログラム例
https://www.kkaneko.jp/pro/java/index.html
45