Weitere ähnliche Inhalte Ähnlich wie Phpではじめるオブジェクト指向(公開用) (20) Mehr von VOYAGE GROUP (20) Phpではじめるオブジェクト指向(公開用)7. Web開発現場だと
開発依頼
ディレクター PM
デザイン依頼 実装依頼
デザイナ プログラマ
10. 例えば
社員 クラス
山田さん 鈴木さん 佐藤さん
インスタンス
11. コード例
class Employee
{
private $_name;
public function __construct($name)
{
$this->_name = $name;
}
public function getName()
{
return $this->_name;
}
}
$yamada = new Employee(‘山田’);
13. 例えば
社員 継承元(親クラス)
ディレクター エンジニア デザイナ
派生(子クラス)
14. コード例
class Designer extends Employee
{
public function design()
{
// デザイン処理の実装
}
}
$designer = new Designer(‘山田’);
$designer->getName(); // Employeeで定義
$designer->design(); // Designerで定義
16. 例えば
デザイン依頼
ディレクター デザイナ
この関係を
ディレクターが求めている事に
注目してみると
17. 例えば
デザイン依頼
ディレクター デザインできる
このように置き換える事ができます。
この「デザインできる」が
インターフェイスです。
18. 例えば
デザインできる
デザイナ デザイン会社
実装としてデザイナや
デザイン会社があります。
19. 例えば
デザイン依頼
ディレクター デザイン会社
ディレクターは「デザインできる」という
インターフェイスに基づき
デザイン会社に依頼できます
20. コード例
interface DesignerInterface
{
public function design();
}
class Designer extends Employee
implements DesignerInterface // デザイナインターフェイスを実装
{
public function design()
{
// デザイン処理の実装
}
}
21. コード例
// interface DesignerInterface
// {
// public function design();
// }
class DesignerCompany extends Company // 継承元は会社クラス
implements DesignerInterface // デザイナインターフェイスを実装
{
public function design()
{
// デザイン処理の実装
}
}
27. 例えば
エンジニア デザイナ
プログラミング
技術
エンジニアとデザイナの
技術を抜き出して
28. 例えば
エンジニア デザイナ
プログラミング デザイン
技術 技術
エンジニアとデザイナの
技術を抜き出して
29. 例えば
ハイパー
クリエーター
プログラミング法
デザイン法
再利用ができます。
30. 例えば
フリーランス
ハイパー
クリエーター
継承元が違ってもOK!
31. コード例
(トレイト定義)
trait CodingTrait
{
public function coding($design, $repository)
{
// 実装
}
}
32. コード例
(トレイトの利用)
class Engineer extends Employee
{
use CodingTrait;
}
$engineer = new Engineer(‘加藤’);
$engineer->coding($design, $repository);
33. コード例
(トレイト定義)
trait DesignTrait
{
public function design($info, $repository)
{
// 実装
}
}
34. コード例
(トレイトの利用)
class HyperCreator
{
use CodingTrait, DesignTrait;
}
$creator = new HyperCreator(‘北村’);
$creator->coding($design, $repository);
$creator->design($info, $repository);
35. もしここで
trait CodingTrait
{
public function coding($design, $repository) {/* 略 */}
public function design($info, $repository) {/* 略 */}
}
trait DesignTrait
{
public function design($info, $repository) {/* 略 */}
}
36. もしここで
trait CodingTrait
{
public function coding($design, $repository) {/* 略 */}
public function design($info, $repository) {/* 略 */}
}
trait DesignTrait
{
public function design($info, $repository) {/* 略 */}
}
メソッド名が被っていたら
37. 別名をつける
class HyperCreator
{
use CodingTrait, DesignTrait
{
CodingTrait::design insteadof designCode;
DesignTrait::design insteadof designUi;
}
}
$creator = new HyperCreator(‘北村’);
$creator->coding($design, $repository);
$creator->designCode($info, $repository);
$creator->designUi($info, $repository);
40. 例えば
人事部 開発部
部長 部長
同じ部長でも仕事が違う
区別したい
42. コード例
<?php // fileC.php
use DevelopmentDepart;
$hoge = new Boss(); // これは開発部部長
<?php // fileD.php
use Personnel;
$hoge = new Boss(); // これは人事部部長
$foo = new DevelopmentDepart¥Boss();
46. ディレクター ディレクター
デザイン会社 デザイン会社
デザイナ デザイナ
契約関係 指示の流れ
49. ディレクター ディレクター
デザイン会社 デザイン会社
デザイナ デザイナ
どっちが楽ですか?
55. 社員 給与
人事評価
変更理由を考えると
このように分割できる
58. 登場人物
社員
人事 プログラマ
西野さん 北野さん
61. 西野さん 北野さん
人事評価なんだけど
え?何のことです?
62. 西野さん 北野さん
人事評価なんだけど
え?何のことです?
社員なら分かれよ・・・
63. 西野さん 北野さん
人事評価なんだけど
え?何のことです?
社員なら分かれよ・・・
社員ができる事は
プログラマもできるべき!
74. 例えば
個人
契約できる
*個人契約する
*法人契約する
株式会社
個人は法人契約は
知らなくていい
75. 例えば
個人 個人契約できる
株式会社 法人契約できる
インターフェイスを分離する