Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
アシアル株式会社
PDF, PPTX
13,148 views
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
PHP言語によるオブジェクト指向技術利用に関する入門資料です。 デザインパターンを読み解くことでクラス設計について学びます。
Technology
◦
Read more
9
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 41
2
/ 41
3
/ 41
4
/ 41
5
/ 41
6
/ 41
7
/ 41
8
/ 41
9
/ 41
10
/ 41
11
/ 41
12
/ 41
13
/ 41
14
/ 41
15
/ 41
16
/ 41
17
/ 41
18
/ 41
19
/ 41
20
/ 41
21
/ 41
22
/ 41
23
/ 41
24
/ 41
25
/ 41
26
/ 41
27
/ 41
28
/ 41
29
/ 41
30
/ 41
31
/ 41
32
/ 41
33
/ 41
34
/ 41
35
/ 41
36
/ 41
37
/ 41
38
/ 41
39
/ 41
40
/ 41
41
/ 41
More Related Content
PPTX
Goで実装した UPSIDERの決済金額リミット機能
by
Miki Masumoto
PDF
外部キー制約に伴うロックの小話
by
ichirin2501
PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
by
Yahoo!デベロッパーネットワーク
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
PPT
Linux/DB Tuning (DevSumi2010, Japanese)
by
Yoshinori Matsunobu
PDF
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
by
Akito Tsukahara
PDF
PHPでスマホアプリにプッシュ通知する
by
Tomoki Hasegawa
PDF
Rest ful api設計入門
by
Monstar Lab Inc.
Goで実装した UPSIDERの決済金額リミット機能
by
Miki Masumoto
外部キー制約に伴うロックの小話
by
ichirin2501
Yahoo! JAPANにおけるApache Cassandraへの取り組み
by
Yahoo!デベロッパーネットワーク
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
Linux/DB Tuning (DevSumi2010, Japanese)
by
Yoshinori Matsunobu
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
by
Akito Tsukahara
PHPでスマホアプリにプッシュ通知する
by
Tomoki Hasegawa
Rest ful api設計入門
by
Monstar Lab Inc.
What's hot
PDF
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
PDF
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
PPTX
CleanArchitecture 第4部 「コンポーネントの原則」
by
鈴木 セシル
PDF
ドメイン駆動設計をゲーム開発に活かす
by
増田 亨
PDF
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
by
Scott Wlaschin
PPTX
テストコードの DRY と DAMP
by
Yusuke Kagata
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
PDF
Webアプリでパスワード保護はどこまでやればいいか
by
Hiroshi Tokumaru
PDF
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
PDF
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
PDF
モジュールの凝集度・結合度・インタフェース
by
Hajime Yanagawa
PDF
Where狙いのキー、order by狙いのキー
by
yoku0825
PPTX
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
PDF
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
Riverpodでテストを書こう
by
Shinnosuke Tokuda
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
MySQL勉強会 クエリチューニング編
by
MicroAd, Inc.(Engineer)
PPT
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
PDF
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
CleanArchitecture 第4部 「コンポーネントの原則」
by
鈴木 セシル
ドメイン駆動設計をゲーム開発に活かす
by
増田 亨
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
by
Scott Wlaschin
テストコードの DRY と DAMP
by
Yusuke Kagata
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
Webアプリでパスワード保護はどこまでやればいいか
by
Hiroshi Tokumaru
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
モジュールの凝集度・結合度・インタフェース
by
Hajime Yanagawa
Where狙いのキー、order by狙いのキー
by
yoku0825
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
Riverpodでテストを書こう
by
Shinnosuke Tokuda
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
MySQL勉強会 クエリチューニング編
by
MicroAd, Inc.(Engineer)
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
Similar to 【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
PDF
Phpではじめるオブジェクト指向(公開用)
by
VOYAGE GROUP
ODP
デザインパターン(初歩的な7パターン)
by
和明 斎藤
PDF
DDD 20121106 SEA Forum November
by
増田 亨
PDF
ドメイン駆動設計という仕事の流儀
by
増田 亨
PDF
ドメイン駆動設計 の 実践 Part3 DDD
by
増田 亨
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
by
アシアル株式会社
PDF
Scrum alliance regional gathering tokyo 2013 pub
by
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
PDF
Howtoよいデザイン
by
Hiroki Yagita
PPT
覚えて帰ろうJavaデザインパターン
by
dcubeio
PDF
リッチなドメインモデル 名前探し
by
増田 亨
PDF
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
by
アシアル株式会社
PDF
ドメイン駆動設計(DDD)の実践Part2
by
増田 亨
PDF
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
by
陽一 滝川
PDF
DSL駆動によるクラウド・アプリケーション開発
by
Tomoharu ASAMI
PDF
協創型ソフトウェア開発 ガイダンス資料
by
Yoshihide Chubachi
PDF
デザインパターンとともに学ぶオブジェクト指向のこころ
by
jum paku
PDF
「エクストリームエンジニアへの道(Swift編)」
by
tech-arts
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
Oop
by
Rindou Katsura
PDF
GCSアジャイル開発を使ったゲームの作り方
by
Hiroyuki Tanaka
Phpではじめるオブジェクト指向(公開用)
by
VOYAGE GROUP
デザインパターン(初歩的な7パターン)
by
和明 斎藤
DDD 20121106 SEA Forum November
by
増田 亨
ドメイン駆動設計という仕事の流儀
by
増田 亨
ドメイン駆動設計 の 実践 Part3 DDD
by
増田 亨
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
by
アシアル株式会社
Scrum alliance regional gathering tokyo 2013 pub
by
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
Howtoよいデザイン
by
Hiroki Yagita
覚えて帰ろうJavaデザインパターン
by
dcubeio
リッチなドメインモデル 名前探し
by
増田 亨
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
by
アシアル株式会社
ドメイン駆動設計(DDD)の実践Part2
by
増田 亨
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
by
陽一 滝川
DSL駆動によるクラウド・アプリケーション開発
by
Tomoharu ASAMI
協創型ソフトウェア開発 ガイダンス資料
by
Yoshihide Chubachi
デザインパターンとともに学ぶオブジェクト指向のこころ
by
jum paku
「エクストリームエンジニアへの道(Swift編)」
by
tech-arts
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
Oop
by
Rindou Katsura
GCSアジャイル開発を使ったゲームの作り方
by
Hiroyuki Tanaka
More from アシアル株式会社
PDF
MonacaとEducation活動の紹介
by
アシアル株式会社
PDF
PWA 4 Business
by
アシアル株式会社
PDF
Monacaによるモバイルアプリ開発ことはじめ
by
アシアル株式会社
PDF
kintone 連携スマホアプリの開発・配布体験
by
アシアル株式会社
PDF
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
by
アシアル株式会社
PDF
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
by
アシアル株式会社
PDF
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
by
アシアル株式会社
PDF
Onsen UI 2 開発における JS フレームワーク衝突事例集
by
アシアル株式会社
PPTX
Web標準技術でiOS、Android両対応アプリを開発
by
アシアル株式会社
PPTX
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
by
アシアル株式会社
PDF
Cordovaの特徴と開発手法概要
by
アシアル株式会社
PDF
Html5/JSモバイルアプリ最前線
by
アシアル株式会社
PDF
Onsen UI の最近とこれから 〜 国内サポートはじめました
by
アシアル株式会社
PPTX
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
by
アシアル株式会社
PPTX
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
by
アシアル株式会社
PPTX
Gartner summit 2016
by
アシアル株式会社
PPTX
モバイル用Webフレームワーク最前線
by
アシアル株式会社
PDF
Monacaソリューションセミナー20160621
by
アシアル株式会社
PDF
20160308seminar2
by
アシアル株式会社
PDF
Nifty cloud mbaas
by
アシアル株式会社
MonacaとEducation活動の紹介
by
アシアル株式会社
PWA 4 Business
by
アシアル株式会社
Monacaによるモバイルアプリ開発ことはじめ
by
アシアル株式会社
kintone 連携スマホアプリの開発・配布体験
by
アシアル株式会社
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
by
アシアル株式会社
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
by
アシアル株式会社
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
by
アシアル株式会社
Onsen UI 2 開発における JS フレームワーク衝突事例集
by
アシアル株式会社
Web標準技術でiOS、Android両対応アプリを開発
by
アシアル株式会社
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
by
アシアル株式会社
Cordovaの特徴と開発手法概要
by
アシアル株式会社
Html5/JSモバイルアプリ最前線
by
アシアル株式会社
Onsen UI の最近とこれから 〜 国内サポートはじめました
by
アシアル株式会社
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
by
アシアル株式会社
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
by
アシアル株式会社
Gartner summit 2016
by
アシアル株式会社
モバイル用Webフレームワーク最前線
by
アシアル株式会社
Monacaソリューションセミナー20160621
by
アシアル株式会社
20160308seminar2
by
アシアル株式会社
Nifty cloud mbaas
by
アシアル株式会社
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
1.
PHPオブジェクト指向再入門 デザインパターンに学ぶクラス設計 1回3,000円のWeb技術教育・アシアル塾
http://www.asial.co.jp/school/juku.php URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 1
2.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 2 本講座の目的 „ 本講座の目的 • 書籍だけでは理解することが難しいオブジェクト指向の技術や考え方を、ひとつずつ理解していきます。 „ 受講対象者 • プログラミングの基本的な手法である構造化プログラミング(順次・反復・分岐)や変数・関数の仕組みを理 解している方 „ 第四回目の目標 1. デザインパターンとは何か?を理解する 2. 各パターンを読み解くために必要な知識を身に付ける 3. 実際にパターンを読み解く
3.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 3 デザインパターンとは何か?
4.
デザインパターンとは何か? URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 4 „ デザインパターンとは • オブジェクト指向設計(Object-Oriented Design: OOD)の達人たちが、優れたクラス設 計から共通のパターンを見出し、名前を付けてカタログ化したもの。 „ 代表的なデザインパターン • GoF (Gang of Four)によるデザインパターン 9 最も有名 – デザインパターンという考え方を初めにソフトウェア開発の世界に持ち込んだのもGoF 9 23のパターンが紹介されている – パターンは3つのカテゴリに分類されている » 生成に関するパターン » 構造に関するパターン » 振る舞いに関するパターン
5.
GoF ‒ 生成に関するパターン
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5 „ 生成に関するパターン • Abstract Factory:セットで使われるクラスを生成する • Builder:複雑なオブジェクトを組み立てる • Factory Method:生成するクラスを子クラスに決めさせる • Prototype:オブジェクトのクローンを作る • Singleton:一人っ子オブジェクトを作る
6.
GoF ‒ 構造に関するパターン
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6 „ 構造に関するパターン • Adapter:好みのインターフェイスでラッピングする • Bridge:インターフェイスと実装を独立して発展させる • Composite:オブジェクトのツリー構造を表現する • Decorator:好きな順で振る舞いにフィルタを施す • Facade:パッケージの利用窓口を設ける • Flyweight:同じデータを持つオブジェクトを生成しない • Proxy:同じインターフェイスを持つクラスで仲介する
7.
GoF ‒ 振る舞いに関するパターン
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7 „ 振る舞いに関するパターン • Chain of Responsibility:処理の責任をバトンタッチする • Command:処理実行のリクエストをクラスで表現する • Interpreter:プログラムの文法をクラスで表現する • Iterator:集合の要素に共通のインターフェイスでアクセス • Mediator:多数のオブジェクトのまとめ役をたてる • Memento:思い出を記憶してUndo機構を実現する • Observer:オブジェクトの状態変化を監視する • State:状態によって振る舞いを切り替える • Strategy:処理内容を実行時に切り替えられるようにする • Template Method:ひな型メソッドから抽象メソッドを利用 • Visitor:型が統一されていない集合の要素にアクセスする
8.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 8 【余談】デザインパターン „ システム開発における他のアイディアとの比較 • アルゴリズム 9 問題を解くための手順 – 実装して利用する。あるいは実装済みのものを利用する。 • ライブラリ 9 汎用性の高いプログラムをまとめたもの – 呼び出して利用する。 • フレームワーク 9 アプリケーションの土台・半完成品 – ルールに従いつつ、プログラムを記述して完成品に仕上げていく。 • パターン 9 優れた対処方法を命名してカタログ化したもの – 状況に応じて選択し、実情に適合させつつ利用する „ クラス設計以外のパターン • AWSクラウドデザインパターン 9 AWSのクラウドサーバーでインフラ設計を行う際のパターン集
9.
デザインパターンを理解するために必要な知識 URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9
10.
デザインパターンを理解するために必要な知識 „ デザインパターンを理解するために必要な知識
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10 • 継承 • 委譲 • インタフェース • 抽象クラス • クラス図 • カプセル化 • ポリモーフィズム(多態性・多様性) „ 理由 • デザインパターンはオブジェクト指向の特徴を活用したものが多いため、上記の考え方などを再確認しな がら学習すると理解しやすい。
11.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 11 継承とは „ 継承 • クラスのプロパティ・メソッドを受け継いで新しいクラスを作成する仕組みです 9 元になるクラスを親クラス・基底クラス・スーパークラスなどと呼びます 9 新しいクラスを子クラス・サブクラス・派生クラスなどと呼びます „ 継承のメリット • 親クラスの機能を再利用することができます „ 記述方法 • クラスを定義する際に「extends」で親クラスを指定します „ 注意点 • 単純に機能を再利用したいだけの場合、継承ではなく委譲を検討して下さい
12.
関連(has) URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12 委譲とは „ 委譲(delegation) • あるクラスの処理の一部を「別のクラスに任せる」こと • 例えばアプリケーション全体を管理するApplicationクラスがあったと仮定 9 「ログを出力する」という処理が必要な場合 – 具体的な処理はApplicationクラス内には直接記述しない – Loggerクラスを実装し、具体的な処理はそのクラスに任せる(委譲する) • ApplicationとLoggerの関連を表したクラス図 „ 委譲のメリット • クラスの役割分担を行うことができる 9 巨大なクラスができてしまうことを防ぐことができる 9 Loggerを別のApplicationで再利用することも可能
13.
インタフェースと抽象メソッド・抽象クラス URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13 „ インターフェイスとは • 「実装コードを定義せずに、どんなメソッドを持つかだけを定義する」もの 9 抽象メソッドのみもつことができます „ 抽象メソッドとは • 実装コードのない、宣言だけのメソッド „ 抽象クラスとは • 直接インスタンス化できないクラス 9 継承して利用します • プロパティやメソッドは普通のクラスと同じように実装することができます 9 抽象メソッドを持つこともできます
14.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 14 インターフェースの利用例 „ インタフェースの利用例 <?php interface Logger { public function log($message); // インターフェイス内のメソッドは、すべて抽象メソッドとなる } class FileLogger implements Logger // Loggerインターフェイスを実装する { public function log($message) { // ここで実際のログ処理を行う } } FileLogger.php
15.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 15 抽象クラスの利用例 „ 抽象クラスの利用例 <?php abstract class AbstractLogger // 抽象クラス { abstract public function doLog($message); // 抽象メソッド(実装は子クラスにまかせる) public function log($message) // 通常のメソッド { $this->doLog( date('[Y-m-d H:i:s] ') . $message . "¥n" ); } } AbstractLogger.php <?php // FileLogger.php class FileLogger extends AbstractLogger { public function doLog($message) { file_put_contents('app.log', $message, FILE_APPEND); } } FileLogger.php
16.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 16 クラス図の見方1/2
17.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 17 クラス図の見方2/2
18.
カプセル化・ポリモーフィズム URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18 „ カプセル化 • 他クラスからアクセスされたくないプロパティやメソッドを隠すこと „ ポリモーフィズム • 同じ名前のメソッドを呼ぶ場合でも、クラスによって挙動が変化する性質のこと
19.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 19 Strategyパターン
20.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 20 Strategyパターン „ Strategyパターン • Strategyとは 9 戦略・方策 • 特徴 9 特定の処理を別クラスに移譲し、処理ロジックを切り替えできるようにするパターン • 利用例 9 開発環境と本番環境で挙動を変えたい – デバッグ用のメール送信クラスと本番用のメール送信クラスを切り替える 9 データの保存方式を複数対応できるようにしたい – ファイルに保存するクラスやデータベースに保存するクラスを等を用意して切り替える • 鍵となる技術 9 委譲 9 ポリモーフィズム
21.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 21 Strategyパターンの一般形
22.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 22 今回作成するプログラム
23.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 23 【実習】Strategyパターン „ インタフェースで、どんなメソッドを持つか定義 <?php interface IMailSender { public function send($message); } MailSender.php
24.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 24 【実習】Strategyパターン „ インターフェースを実装するためのクラスを作成 class MailSender implements IMailSender { public function send($message) { echo 'メールを送ります: '.$message; } } „ デバッグ用のメール送信クラスも作成 MailSender.php class DebugMailSender implements IMailSender { public function send($message) { echo 'メールを送りません: '.$message; } }
25.
public function setSender(IMailSender
$sender) { $this->sender = $sender; } URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 25 【実習】Strategyパターン „ Mailを送信するクラスを作成 • 実際の送信は別のクラスに委譲します <?php // Mail.php class Mail { private $sender; „ デバッグ用のメール送信クラスも作成 public function send($message) { $this->sender->send($message); } } Mail.php
26.
strategy_client.php URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 26 【実習】Strategyパターン „ クライアント側 <?php require_once('Mail.php'); require_once('MailSender.php'); $mail = new Mail(); $mail->setSender(new DebugMailSender()); $mail->send('Hello, world!'); // 「メールを送りません: Hello, world!」と表示されるはず
27.
strategy_client.php URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 27 Strategyクラスの切り替え „ 実行時にパラメータや設定ファイルの値を読み、生成するStrategyクラスを切り替える <?php require_once('Mail.php'); require_once('MailSender.php'); $mail = new Mail(); $mailer_class = 'DebugMailSender'; // 設定ファイルからクラス名を読み込むとする。 $mail->setSender(new $mailer_class()); $mail->send('Hello, world!');
28.
DI(Dependency Injection)依存性注入 URL
: http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 28 „ Dependency Injectionとは • Mailクラスは「MailSender」か「DebugMailSender」クラスを利用しています 9 この状態が「依存している」状態です • MailクラスはsetSenderを用意しており、どちらのクラスを利用するか選択が可能 9 依存先のオブジェクトを外部から生成し、メソッドの引数として渡す(注入する)ことをDIと呼ぶ – セッターに渡す場合、Setter Injection – コンストラクタに渡す場合、Constructor Injection • メリット 9 クラス間の結びつき(依存度)を弱めることができる „ DIコンテナとは • 設定ファイルを記述するだけで、Dependency Injectionを自動的に行なってくれる仕組みのこと 9 メリット – ソースコードを変更せずにクラスを切り替えることができる
29.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 29 【付録】Compositeパターン
30.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 30 Compositeパターン „ Compositeパターン • Compositeとは 9 混成・複合 • 特徴 9 ファイルとディレクトリのような木構造を表せるパターン – 枝にあたるオブジェクトと葉にあたるオブジェクトを同様に扱うこともできる • 利用例 9 ファイルやディレクトリのような仕組みを実現したい 9 ECの単品商品やセット商品を分かりやすく管理したい • 鍵となる技術 9 委譲 9 ポリモーフィズム
31.
Compositeパターンの一般形 URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 31
32.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 32 今回作成するプログラム
33.
【実習】Compositeパターン URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 33 „ 枝と葉で利用するインタフェースを定義 <?php interface Entry { public function getPrice(); } Entry.php <?php class Item implements Entry { private $price = 0; public function __construct($price) { $this->price = $price; } public function getPrice() { return $this->price; } } Item.php
34.
【実習】Compositeパターン URL :
http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 34 „ 枝は枝と葉を持つことが出来る <?php class CompositeItem implements Entry { private $child_entries = array(); public function addEntry(Entry $entry) { $this->child_entries[] = $entry; } public function getPrice() { $total_price = 0; foreach ($this->child_entries as $entry) { $total_price += $entry->getPrice(); } return $total_price; } } CompositeItem.php
35.
【実習】Compositeパターン „ セット商品もカートも同一のクラスで表現可能
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 35 <?php require_once('Entry.php'); require_once('Item.php'); require_once('CompositeItem.php'); // 商品 $mouse = new Item(2000); $note_pc = new Item(1); $wifi_router = new Item(4800); // セット商品 $pc_set = new CompositeItem(); $pc_set->addEntry($note_pc); $pc_set->addEntry($wifi_router); // カートに入れる $cart = new CompositeItem(); $cart->addEntry($mouse); $cart->addEntry($pc_set); // 合計金額を表示 echo $cart->getPrice().'円'; // 6801円と表示されるはず composite_client.php
36.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 36 参考文献
37.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 37 参考文献 „ PHPでGoFデザインパターンを実装したい • PHPによるデザインパターン入門 9 http://www.doyouphp.jp/book/book_phpdp.shtml 9 23のデザインパターンが全てPHPのコードで紹介されています。コードも分かりやすいので学習用におすすめ です。
38.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 38 【CM】アシアルスクール
39.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 39 アシアルスクールのご案内 „ Web関連技術を集中的かつ体系的に学べる研修サービスです • 半日~二日間の集中講義を中心に実施 • PHPやJavaScript、LinuxといったWeb関連技術が学べます „ URL • http://www.asial.co.jp/school/guide.php „ 例:PHP講座の学習ロードマップ
40.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 40 アシアル塾のご案内 „ 1回3,000円でWeb技術を約90分学習できる格安の教育サービスです • 60分の講義+30分の復習&質問タイム „ 主な対象 • IT業界やWeb業界で働いているプロの方の学習を応援します! 9 Webデザイナーの方大歓迎 • 技術を分かりやすく教えます „ 絶対理解保証キャンペーン実施中 • もし講義内容にご満足いただけなかった場合は返金いたします 9 (返金手数料のみ頂戴いたします) „ URL • http://www.asial.co.jp/school/juku.php
41.
URL : http://www.asial.co.jp/
│ Copyright © Asial Corporation. All Rights Reserved. │ 41 企業研修のご案内 „ アシアルではWeb技術に関する企業研修を行っています • 技術職採用の社員に向けた新人研修・中途採用者向け研修 • 総合職向けのWeb技術入門研修 „ 主な実績 • グリー株式会社様 • 株式会社ドワンゴ様 • 株式会社朝日新聞社様 • 他多数(詳しくは、Webサイトをご参照下さい) „ URL • http://www.asial.co.jp/business/training/
Download