|
||||||||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||||||||
| Singletonパターンによる比較 | ||||||||||||||||
|
先ほど、オブジェクト指向を利用したソフトウェア開発の利点を3点挙げましたが、この利点を享受するためにはオブジェクト指向に基づいた正しい設計が必要不可欠となります。このオブジェクト指向設計の教科書ともいえるものにデザインパターンがあります。デザインパターンとは、オブジェクト指向設計の定番いわば定石を集めたもので、オブジェクト指向設計のノウハウが分かりやすくまとめられています。 今回は、GoF(the Gang of Four)のデザインパターンの中でも最も簡単なSingletonパターンを利用して、PHP4とJavaのオブジェクト指向を比較してみたいと思います。Singletonパターンは、オブジェクトを生成する個数を制限するために利用するもので、データベースのコネクションプールを開発する時などにも頻繁に利用されます。Singletonパターンでは、制限した個数を超えたオブジェクトを生成しようとした場合、既に生成済みのオブジェクトを再利用するための仕組みを提供します。 |
||||||||||||||||
| PHP4版 Singletonパターン | ||||||||||||||||
<?php
|
||||||||||||||||
|
PHP4版 Singletonパターンの実行結果 |
||||||||||||||||
処理を開始しました
|
||||||||||||||||
|
PHP4版Singletonパターンには問題があります。上記プログラムにおいて3回目にオブジェクトを生成する際、Singletonクラスを直接オブジェクト化していますが、それによって3回目のオブジェクト生成では、Singletonパターンでは許されない全く別のオブジェクトを生成しています。 Singletonパターンは本来、開発者の意識やスキルに依存することなくオブジェクトを生成する個数を制限できなければなりません。つまりSingletonパターンではgetInstanceメソッドでしかオブジェクトを生成できない仕組みを実現しなければいけません。しかし、PHP4には変数や関数に対するアクセス制限の機能がないため、上記プログラムでは開発者がSingletonクラスを直接オブジェクト化することを防げません。 一方、JavaでSingletonパターンを実現すると下記のとおりとなります。 |
||||||||||||||||
| Java版 Singletonパターン | ||||||||||||||||
class Singleton {
|
||||||||||||||||
|
Java版 Singletonパターンのコンパイル結果 |
||||||||||||||||
SingletonMain.java:52: Singleton() は Singleton で
|
||||||||||||||||
|
Java版Singletonパターンにおいても3回目のオブジェクト生成はSingletonクラスを直接オブジェクト化するようにコードを書きました。しかし、上記「Java版 Singletonパターンのコンパイル結果」をご覧のとおり、コンパイル時にエラーが発生します。PHP4と違いJavaには変数や関数に対するアクセス制限の機能があるため、SingletonパターンにおいてSingletonクラスを直接オブジェクト化することはできません。つまり、Singletonクラスをオブジェクト化する場合、開発者はgetInstanceメソッドの利用を強制されます。そのような仕組みによってSingletonパターンは開発者の意識やスキルに依存することなく、オブジェクトを生成する個数を制限することが可能となっています。 以上のとおり、PHP4のオブジェクト指向はまだまだ発展途上といった観があります。変数や関数に対するアクセス制限の機能を持たないPHP4では、堅牢なアーキテクチャを実現することが困難だといえるでしょう。また、PHP4では抽象クラスや抽象メソッド、インターフェースといったオブジェクト指向にとって重要な機能を備えていません。そのため、Javaと比較してコードの拡張性や再利用性、保守性といったものが低下することは否めません。これら大規模企業システムにとって必須の要件を満たしていないPHP4では、大規模な企業システムを開発することが困難だと言えるのではないでしょうか。 |
||||||||||||||||
|
前のページ 1 2 3 次のページ |
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||

