11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

Similar documents
デザインパターン第一章「生成《

Microsoft PowerPoint ppt

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

PowerPoint プレゼンテーション

基本情報STEP UP演習Java対策

PowerPoint プレゼンテーション

JavaプログラミングⅠ

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

JavaプログラミングⅠ

PowerPoint プレゼンテーション

プログラミング基礎I(再)

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

Microsoft PowerPoint - OOP.pptx

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Java言語 第1回

オブジェクト指向開発論

Prog2_9th

プログラミング入門1

JavaプログラミングⅠ

JAVA入門

PowerPoint Presentation

JavaプログラミングⅠ

Microsoft PowerPoint - prog03.ppt

継承を積極的に利 することを推奨する専門家の主張 正しい設計を うには継承を正確に使 する事が極めて重要である [Ian Joyner] 開放閉鎖原理 (Open-Close Principle) を可能とするのは継承だけである [Bertrand Meyer] 表 1-1 共変化(co-varia

2

PowerPoint プレゼンテーション

JavaプログラミングⅠ

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

GEC-Java

ガイダンス

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

Microsoft PowerPoint ppt

Microsoft PowerPoint - chap10_OOP.ppt

ガイダンス

Microsoft PowerPoint pptx

ガイダンス

文字列操作と正規表現

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

データ構造とアルゴリズム論

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

V8.1新規機能紹介記事

Microsoft PowerPoint - prog04.ppt

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Make the Future Java FY13 PPT Template

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

メソッドのまとめ

Sort-of-List-Map(A)

JAVA とテンプレート

Java知識テスト問題

Microsoft Word - C言語研修 C++編 3.doc

Java から見たオブジェクト指向入門 オブジェクト指向 AtoZ セミナー ( 株 ) 豆蔵井上樹

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

<4D F736F F F696E74202D AC C8899E D834F E >

JavaプログラミングⅠ

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

design_pattern.key

HCI プログラミング 5 回目ウィンドウに画像を表示してみよう 今日の講義で学ぶ内容 画像の表示 画像のエフェクト 画像のビューポート指定 画像の表示 1 画像を表示してみましょう 画像の表示はクラス ImageView により管理されます ソースファイル名 :Sample5_1.java //

Factory Method 2003/07/18 特徴スーパークラスで複数のインスタンスを管理するためのパターン ( スーパークラス ( の型として ) で扱いたいインスタンスが存在するが, スーパークラスではそのインスタンスを生成せずにインターフェースだけを規定し, 各サブクラスでそのインスタン

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

スライド 1

JavaプログラミングⅠ

ガイダンス

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

情報処理Ⅰ

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

Microsoft PowerPoint - lec06 [互換モード]

ガイダンス

JavaプログラミングⅠ

Prog1_3rd

Javaプログラムの実行手順

ガイダンス

Prog1_15th

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

State 特徴ときどきの状態に合わせて動作の内容を変更するパターン各状態を異なるクラスで表現し, クラスを切り替えることにより状態を変化させるパターンクラス図 Context State requestx( ) requesty( ) requestz( ) State methoda( ) me

DVIOUT-exer

問題1 以下に示すプログラムは、次の処理をするプログラムである

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

PowerPoint プレゼンテーション

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

Prog1_10th

GEC-Java

Java 2 - Lesson01

IT プロジェクト

基礎計算機演習 実習課題No6

PowerPoint プレゼンテーション

PowerPoint Presentation

デジタル表現論・第4回

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

: : : TSTank 2

Microsoft PowerPoint - prog09.ppt

スライド 1

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

Microsoft PowerPoint - HITobject.ppt

平成 29 年度卒業研究 初心者のためのゲームプログラミング用 教材の開発 函館工業高等専門学校生産システム工学科情報コース 5 年 25 番細見政央指導教員東海林智也

Microsoft PowerPoint - prog09.ppt

Transcription:

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デザインパターンの主な内容 そのデザインパターンの目的と効果 どのような役割の部品 ( クラス, インタフェース ) が必要か それらの部品をどのように組み立てるか 個々の部品がどのように関連して大きな機能を果たすのか 1

デザインパターンの例 生成に関するパターン Factory Method Singleton スーパークラスでインスタンスの作り方を抽象的に定め, 具体的な作成はサブクラスにまかせる クラスのインスタンスが一つしかないことを保証する 構造に関するパターン Adapter 異なるインタフェースをもつ2つのクラスを接続するクラスを作る Facade 振る舞いに関するパターン Iterator Template Method Observer 複数のサブシステムの窓口となる共通のインタフェースを提供してシステムをシンプルにする 複数の要素をもつ集合体の要素を 1 つ 1 つ順番にアクセスする方法を提供する 必要な処理の一部をテンプレートとして抽象的に記述し, その具体的内容 ( カスタマイズ ) をサブクラスにまかせる 状態が変化するクラスと, その変化を通知してもらうクラスを分けて設計する 今回の授業では,Template Method パターンと Adapter パターンを具体的に学び, Factory Method パターンの調査を演習課題とする Template Method パターン 必要な処理の一部をテンプレートとして抽象的に記述し, その具体的内容 ( カスタマイズ ) をサブクラスにまかせる. いろいろな人がカスタマイズを考案し, それを簡単に実装できる. 2

テンプレートの概念 抽象カード ( テンプレート ) 処理の枠組み (framework) を定め, 細部はがカスタマイズできる printcard( ){ ( ); 枠組みはテンプレートで実装済み 抽象メソッドは未実装 ( カスタマイズ可能な部分 ) 実装 1 () { 画像をプリント 具体カード 祝誕生! 実装 2 () { 文字列をプリント 1 2 テンプレートのデザイン 抽象カード ( スーパクラス ) AbstractCard printcard printframe テンプレート テンプレートメソッド 抽象メソッド ImageCard image: Image 具体カード ( サブクラス ) StringCard : String 実装 実装 3

AbstractCard クラス Java による記述 抽象クラス public abstract class AbstractCard { public void printcard(graphics g) { printframe(g); (g); AbstractCard printcard printframe テンプレートメソッド public void printframe(graphics g) { 省略 // g を使って枠を表示する高品質のプログラム public abstract void (Graphics g); 抽象メソッド StringCard クラス StringCard : String public class StringCard AbstractCard{ private String ; サブクラスの定義 public StringCard(String str) { = str; コンストラクタ public void (Graphics g) { g.drawstring(, 140, 70); (140, 70) は表示する位置の x-y 座標 4

ImageCard クラス ImageCard image: Image サブクラスの定義 public class ImageCard AbstractCard{ private Image image; public ImageCard(Image img) { image = img; コンストラクタ public void (Graphics g) { g.drawimage(image, 140, 70); ( 実際にはもう少し複雑な実装となる ) AbstractCard 利用のしかた printcard(g) printframe(g) (g) ImageCard image: Image (g) StringCard : String (g) public void printtwocards(graphics g, Image img, String str) { AbstractCard cardholder[2]; cardholder[0] = new ImageCard(img); cardholder[1] = new StringCard(str); for(int i=0; i<2; i++) { cardholder[i].printcard(g); AbstractCard が規定する統一的なインタフェース 5

ホットスポット AbstractCard printcard abstract superclass 高度なサービス内容が書かれているが, このままでは動かない concrete subclass ニーズに合わせて簡単にカスタマイズ済みであり, このままで動く template method ( サービス ) printframe abstract method concrete method hot spot implementation ( カスタマイズ ) Template Method パターン 一般化すると, つぎのデザインパターンが得られる Template Method パターン AbstractClass - 抽象メソッド primitiveoperations を定義し - それを使い, アルゴリズムの枠組みを定義する templatemethod を実装 ConcreteClass - この具体クラス特有の処理を実行するように primitiveoperations を実装 AbstractClass templatemethod primitiveoperation1 primitiveoperation2 ConcreteClass primitiveoperation1 primitiveoperation2 6

Template Method パターンのありがたみ システムプラグラマの立場からのありがたみ のインタフェースだけをアプリプログラマに示せばよく, printcard と printframe のソースコードを公開しなくてよい すべてのアプリに影響を与えずに,printCard と printframe の実装の修正が可能 システムプラグラマが作成 AbstractCard printcard(g) printframe(g) (g) アプリケーションプラグラマの立場からのありがたみ printcard と printframe のコードを修正することなく, のみを実装すればよい ImageCard も StringCard も AbstractCard の一種なので, その統一的なインタフェース (API) である printcard を利用してアプリを作成可能 ImageCard image: Image (g) StringCard : String (g) 異なるアプリプラグラマが作成 Adapter パターン 異なるインタフェースをもつ 2 つのクラスを接続する. 開発するシステムのインタフェースを変えずに, 外部のいろいろなインタフェースに接続できる. 7

アダプターの概念 例 クラス 抽象メソッド アダプター クラス print 2 つの異なるインタフェース ( クラス ) が固定されていて変更できないとき, 両者を接続するクラス 提供されているもの クラスがプリンタメーカーから提供済. usb.print( ) により を印字可. 欲しいもの クラスの 抽象メソッドを実装したクラス ( アダプター ). ( それにより,gamePrinter.( ) によって を印字できるようになる.) 委譲を使うデザイン (1/4) (delegation) アダプタークラス クラス Adapter?? クラス print public abstract class { public abstract void ( ); に対して が隠されている public static void main(string[ ] args) { gp = new Adapter( You win! ); gp.( ); Adapter は, でもある public class { private String ; public (String str) {.. public void print() {.. 実際にはクラスファイルのみ提供 8

委譲を使うデザイン (2/4) スーパークラス print 継承 サブクラス Adapter usb: Adapter は,でもある has a 委 usb.print( ) 譲 (delegation) 委譲を使うデザイン (3/4) Adapter usb: has a print public class Adapter { private usb; public Adapter(String str) { usb = new (str); public void () { usb.print(); コンストラクタ 委 譲 9

委譲を使うデザイン (4/4) 一般化すると, つぎのデザインパターンが得られる Adaper パターン Client: Target オブジェクトを利用する Target: Client が使用できる特定のインタフェースを規定する Adaptee: 適合させたい既存のインタフェースをもつ実装 Adapter: Adaptee のインタフェースを Target のインタフェースに適合させる 依頼者 Client 対象アダプター適合される側 Target Adapter Adaptee has a adaptee request request specificrequest 委 譲 adaptee.specificrequest() Adapter パターンのありがたみ (1/2) アプリケーションプラグラマの立場からのありがたみ と のソースコードを修正することなく, から見たインタフェース () を変えずに Adapter を作成可能 以外との様々な Adapter を実装したとき, どれも の一種なので, は統一的なインタフェース (API) を利用してアプリを作成可能 Adapter usb: has a print 異なるアプリプラグラマが作成 異なるシステムプラグラマが作成 10

Adapter パターンのありがたみ (2/2) システムプラグラマの立場からのありがたみ と に影響を与えずに (print) の実装を変更可能 アプリプログラマに と のソースコードを公開しなくてもよい Adapter usb: has a print 異なるアプリプラグラマが作成 異なるシステムプラグラマが作成 演習問題 11 Factory Method パターンについて調べ, 概略を説明し, パターンの構造を図示しなさい. 11