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

Contenu connexe

Similaire à pi-11. 多相性, インターフェイス, デザインパターン

tech talk about JS #0
tech talk about JS #0tech talk about JS #0
tech talk about JS #0Hika Maeng
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドkunihikokaneko1
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストOhishi Mikage
 
Firefox 学生向けアドオンパック
Firefox 学生向けアドオンパックFirefox 学生向けアドオンパック
Firefox 学生向けアドオンパックKosei Moriyama
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdateYuki Iwanari
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようcharsbar
 
「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界Nozomi Ito
 
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーテスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーShuji Watanabe
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 

Similaire à pi-11. 多相性, インターフェイス, デザインパターン (20)

tech talk about JS #0
tech talk about JS #0tech talk about JS #0
tech talk about JS #0
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッド
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Selenium
SeleniumSelenium
Selenium
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
 
Hello Java
Hello JavaHello Java
Hello Java
 
Firefox 学生向けアドオンパック
Firefox 学生向けアドオンパックFirefox 学生向けアドオンパック
Firefox 学生向けアドオンパック
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
Electron early 2019
Electron early 2019Electron early 2019
Electron early 2019
 
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
 
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlexFlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
 
「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界
 
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーテスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ー
 
Modeling Workshop
Modeling WorkshopModeling Workshop
Modeling Workshop
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
2013 sguヒューマンインターフェース論0121
2013 sguヒューマンインターフェース論01212013 sguヒューマンインターフェース論0121
2013 sguヒューマンインターフェース論0121
 

Plus de kunihikokaneko1

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い kunihikokaneko1
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション kunihikokaneko1
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスkunihikokaneko1
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要 kunihikokaneko1
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門kunihikokaneko1
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスkunihikokaneko1
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 kunihikokaneko1
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタkunihikokaneko1
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンkunihikokaneko1
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線kunihikokaneko1
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システムkunihikokaneko1
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニングkunihikokaneko1
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習kunihikokaneko1
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例kunihikokaneko1
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要kunihikokaneko1
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について kunihikokaneko1
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承kunihikokaneko1
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しkunihikokaneko1
 

Plus de kunihikokaneko1 (20)

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンス
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョン
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システム
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニング
 
mi-4. 機械学習
mi-4. 機械学習mi-4. 機械学習
mi-4. 機械学習
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要
 
kaneko202304.pptx
kaneko202304.pptxkaneko202304.pptx
kaneko202304.pptx
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出し
 

pi-11. 多相性, インターフェイス, デザインパターン