|
||||||||||||||||
| 前のページ 1 2 3 | ||||||||||||||||
| PHP5版 Template Methodパターン | ||||||||||||||||
|
つづいてPHP4では実現できなかったGoFのデザインパターンのひとつTemplate MethodパターンをPHP5で検証してみます。 Template Methodパターンは、フレームワークを開発する際などに頻繁に利用されます。継承とポリモフィズム(※1)を利用して、コードの再利用性や拡張性を確保できます。 |
||||||||||||||||
|
※1 ポリモフィズムは多態性ともいいます。仕様と実装を分離することによって主に拡張性を高めることを目的としています。たとえば、親クラスにおいて仕様、つまりメソッドのみを宣言し、その親クラスによって宣言されたメソッドを子クラスにおいて実装することで仕様と実装を分離することができます。このポリモフィズムによって親クラスに変更を加えなくても、子クラスを取り替えることで内部実装を柔軟に交換することが可能となっています。 |
||||||||||||||||
|
PHP5版 Template Methodパターン |
||||||||||||||||
<?php
|
||||||||||||||||
|
PHP5版 Template Methodパターンの実行結果 |
||||||||||||||||
処理を開始しました
|
||||||||||||||||
|
AbstractClassクラスは、処理の手順を実装したtemplateMethodメソッドと抽象メソッドであるprimitiveOperationメソッドで構成されています。AbstractClassクラスは抽象クラスであるため直接オブジェクト化することはできません。したがって、AbstractClassクラスを継承したConcreteClassクラスをオブジェクト化して利用することになります。 ConcreteClassクラスでは、AbstractClassクラスを継承しているためAbstractClassクラスのtemplateMethodメソッドを再利用できます。また、AbstractClassクラスには抽象メソッドであるprimitiveOperationメソッドが宣言されているため、AbstractClassクラスを継承したConcreteClassクラスにはprimitiveOperationメソッドの実装が強要されます。 このprimitiveOperationメソッドへの実装が強要されることでコードの拡張性が高まっています。上記プログラムでは、primitiveOperation1メソッドで左辺、primitiveOperation2メソッドで右辺、primitiveOperation3メソッドで解をそれぞれ表示しますが、これらのメソッドのいずれが抜けても数式が成り立ちません。そのため、TemplateMethodパターンによってprimitiveOperationメソッドを実行する手順を明確にしたうえで、primitiveOperationメソッドへの実装を開発者に強制しています。もし他の数式を新たに表示したい場合、AbstractClassクラスを継承した新しいConcreteClassを作成することで容易に実現できますので、必要最小限度の労力で機能を拡張することが可能です。 ここまでPHP5によって実現された新機能を中心に解説してきました。PHP5によってPHPのオブジェクト指向機能は大幅に強化され、Javaと同じようなコードを記述できるようになりました。現在流行しているオブジェクト指向を取り入れた開発プロセスや設計手法もPHP5であれば容易に導入できます。 これらはオブジェクト指向を得意とするJavaの開発者にとっても、PHPが馴染み易い言語となったことを意味するものではないでしょうか。今後は状況に応じてJavaの開発者も開発生産性の高いPHP5を利用する必要があると筆者は強く感じています。 次回は企業システムにおけるPHP5の可能性について考察していきたいと思います。ご期待ください。 |
||||||||||||||||
|
前のページ 1 2 3 |
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||

