感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

PHPでデザインパターン

ことば

昔から悟は、試験で良い点数が取れるのと、頭の良さは一致しない。ただ、まったく別物でもない」とよく言った。
「物事の本質をぱっとつかむのは本当に大事なことで、それは試験問題を解くのと似ているかもしれない。一方で、試験は苦手でも、頭がいい人間もたくさんいるけどな」
オー・ファーザー!

PHPでインポートする方法

use \ClassName;
use 名前空間;
use 名前空間 as 別名;
use 名前空間\クラス名;

「インターフェースに対してプログラミングする」

デザインパターンの起源、ルーツは、1987年のOOPSLA(Object-Oriented Programming, Systems,Languages & Applications)というオブジェクト指向に関するカンファレンスで、KentBeck氏とWard Cunningham氏が発表した「Using Pattern Langages for Object-Oriented Programs」という論文による。ここでパターンという考え方がソフトウェア界に持ち込まれた。

GoF本が出たのは1995年のこと。
Design Patterns: Elements of Reusable Object Oriented Software
という伝説の本が出版された。この本で後々20年以上に渡り語られる23パターンが紹介された。

カプセル化

オブジェクト指向では「操作対象」に注目し、操作手順や操作に伴うデータはオブジェクトの中に隠される。
つまり、インターフェースがわかっていれば、中の実装は知らなくてもいいということ。
テレビのスイッチを押せば画面が映るように。何をするかがわかれば、どうするかを知らなくてもいい。
これがカプセル化という。
また、データにアクセスできるノアは用意された操作だけである。

継承

他のクラスの特徴を引き継ぎ、新しい特徴を加えたり変更したりすることを継承という。
元になるクラスをスーパークラスとか、基底クラス、親クラスと呼ぶ。

ポリモーフィズム

ポリモーフィズムとは、あるオブジェクトへの操作が呼び出し側ではなく受け手のオブジェクトによって定まる特性のことをいう。

GoFの23パターン

■オブジェクトの生成に関するパターン
Abstract Factory
Builder
Factory Method
Prototype
Singleton

■プログラムの構造に関するパターン
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy

■オブジェクトの振る舞いに関するパターン
Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memonto
Observer
State
Strategy
Template Method
Visitor

読んだ本

PHPによるデザインパターン入門

PHPによるデザインパターン入門


デザインパターンのいいところは、正しいオブジェクト指向の考え方がいつの間にか身につくところだ。
オブジェクト指向は、デザインパターンで学ぶのがいいと思う。どの言語でも。むしろJava,PHP,Rubyやその他の言語で横断的にデザインパターンを学ぶことで、より抽象化したモデルとして頭の中にパターンが蓄積されることを期待している。

感謝のプログラミング

今回で感謝のプログラミングは【370時間目】
10000時間まで、あと【9630時間】

PHPのクラスなど。

PHPでクラスを作る

・構文

class クラス名 {
	//クラスの実装
}

クラスも関数と同様に名前空間を使わない限り、グローバルに定義される。
クラス名はアッパーキャメルで記述されるのがPHPでは主流。

メソッドの呼び出しにはアロー演算子(->)を使う。
オブジェクトの参照を渡すのではなく、複製したい場合はcloneキーワードを使う。

$hoge = clone $fuga;

new演算子によって生成されたオブジェクトはunset()で解放できる。
ガーベジコレクタによって必要のないオブジェクトのリソースの解放が行われる。

自分自身のオブジェクトを参照したい時は、「$this」を使う。

staticプロパティは静的なプロパティで、プロパティの宣言時にstaticをつけると、そのプロパティはクラスがインスタンス化されていなくても読み書きすることができる。
staticプロパティへのアクセスはクラス名にダブルコロン(::)をつけてアクセスする。

定数はconstで宣言する。

PHPの継承

class クラス名 extends 親クラス名{
}

継承は普通はis-a関係(XXはYYである)に対して用いられる。

PHPで親クラスを表すキーワードはparent
finalキーワードをつけてメソッドを宣言すると、そのメソッドは継承された派生クラスでオーバーライドできなくなる。

ほんとPHPJavaにそっくりじゃないか・・・。
名前空間というのは2009年から登場した概念みたいなんだけど、Javaでいうpackageのことでしょう。
PHP名前空間の定義方法は、

namespace 名前空間;

名前空間を階層化するには「\」で区切る。

namespace 名前空間\サブ名前空間

読んだ本

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

感謝のプログラミング

今回で感謝のプログラミングは【369時間目】
10000時間まで、あと【9631時間】