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
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
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
by
Ken Morishita
PPTX
スキトラ Spring + mybatis
by
小川 昌吾
PPTX
実践!Django + GraphQL 実装
by
ssuseraf19bf
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
by
Daichi Koike
PDF
PHP5.5新機能「ジェネレータ」初心者入門
by
kwatch
PDF
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
by
Amazon Web Services Japan
PDF
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
by
Ken Morishita
PDF
golang profiling の基礎
by
yuichiro nakazawa
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
by
Ken Morishita
スキトラ Spring + mybatis
by
小川 昌吾
実践!Django + GraphQL 実装
by
ssuseraf19bf
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
by
Daichi Koike
PHP5.5新機能「ジェネレータ」初心者入門
by
kwatch
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
by
Amazon Web Services Japan
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
by
Ken Morishita
golang profiling の基礎
by
yuichiro nakazawa
What's hot
PDF
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
by
Akinori SAKATA
PDF
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
by
yoshitaro yoyo
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
by
Takeshi Mikami
PDF
LINE API 紹介&LINE API Use Case(Azure編)
by
拓将 平林
PPTX
Clojureの世界と実際のWeb開発
by
Tsutomu Yano
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PPTX
エンジニアライクにドキュメントを作成してみた件
by
Mass310
PPTX
事例からわかる!テスト自動化導入パターン
by
友隆 浅黄
PDF
「Turtlebot3の紹介」 ROS Japan UG #10 勉強会
by
ROBOTIS Japan
PDF
Zaim 500万ユーザに向けて〜Aurora 編〜
by
Wataru Nishimoto
PPTX
ここがつらいよAws batch
by
Yu Yamada
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
PPTX
テストコードの DRY と DAMP
by
Yusuke Kagata
PPTX
Spring超入門-Springと出会ってから1年半-
by
Ryosuke Uchitate
PPTX
GraphQLのsubscriptionで出来ること
by
Shingo Fukui
PDF
AppiumのWebViewアプリテストの仕組みとハマりどころ
by
Masayuki Wakizaka
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
PPTX
MLOpsはバズワード
by
Tetsutaro Watanabe
PDF
テスト駆動開発のはじめ方
by
Shuji Watanabe
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
by
Akinori SAKATA
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
by
yoshitaro yoyo
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
by
Takeshi Mikami
LINE API 紹介&LINE API Use Case(Azure編)
by
拓将 平林
Clojureの世界と実際のWeb開発
by
Tsutomu Yano
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
エンジニアライクにドキュメントを作成してみた件
by
Mass310
事例からわかる!テスト自動化導入パターン
by
友隆 浅黄
「Turtlebot3の紹介」 ROS Japan UG #10 勉強会
by
ROBOTIS Japan
Zaim 500万ユーザに向けて〜Aurora 編〜
by
Wataru Nishimoto
ここがつらいよAws batch
by
Yu Yamada
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
テストコードの DRY と DAMP
by
Yusuke Kagata
Spring超入門-Springと出会ってから1年半-
by
Ryosuke Uchitate
GraphQLのsubscriptionで出来ること
by
Shingo Fukui
AppiumのWebViewアプリテストの仕組みとハマりどころ
by
Masayuki Wakizaka
ドメイン駆動設計の正しい歩き方
by
増田 亨
MLOpsはバズワード
by
Tetsutaro Watanabe
テスト駆動開発のはじめ方
by
Shuji Watanabe
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
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
PDF
「エクストリームエンジニアへの道(Swift編)」
by
tech-arts
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
Oop
by
Rindou Katsura
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
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
「エクストリームエンジニアへの道(Swift編)」
by
tech-arts
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
Oop
by
Rindou Katsura
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