さて、次のように1つの実装がある領域を計算する必要があります:
クラススクエア{ 公共 $側。 } クラスジオメトリ{ パブリック 関数領域($状){ 場合($形状正方形のinstanceof){ リターン $形状 - >側*の$形状 - > 側。 } 戻り 0 。 } }
あなたが変更される新しいタイプの、すべてのメソッドのジオメトリクラスを追加した場合、誰かがあなたにこの抽象的な問題を見て、ああ、明らかに、プロセス指向です。ああ、それはあなたが新しいメソッドを追加した場合、すべての既存の形状クラスは、移動するだけの行にジオメトリクラスにメソッドを追加していない、他の方法でラウンドそうですが、。
もちろん、多状態の実装があります:
クラススクエアは実装形{ プライベート $側を、 公共 ファンクションエリア(){ 返す $これを - >サイド* $この - > サイド。 } }
あなたはすべてがうまくなりそう思いますか?そして、いや。実際に達成し、限り、新しい靴のような方法を実装するクラスは非常に単純なことができ、新しいタイプを追加します。新しい機能を追加したい場合はしかし、私は申し訳ありませんことを、すべてのクラスを変更する必要があります。
要約の下では、その:
- 手続きコードが前提で構成されているデータ構造を変更せずに新しい機能を追加することが容易であり、オブジェクトが提供する機能の新しいタイプを追加するように配向電流を変更することは容易ではありません
- 手続きのコードでは、すべての機能を変更する必要があるため、新しいデータ構造を追加することは困難です。オブジェクト指向のコードでは、すべてのクラスを変更する必要があるため、新しい機能を追加することは困難です
- 公開されたオブジェクトの振る舞い、隠されたデータ。既存の動作を変更することなく、新しいデータ型を追加するのは簡単でなく、既存のオブジェクトに新しい振る舞いを追加することは困難です
- データ構造は、露光データ、有意な行動(上記の最初のを達成するために)。既存のデータ構造に新しい機能を追加するために、既存のデータ構造に新しい動作を追加し、さらに難しいのは簡単。
もちろん、どのような特定の使用のか、柔軟性が厳格に固執し、ないことを選択するために必要があります。
あなたは、柔軟性が新たな動作を追加したい場合は、データ構造を使用しています。あなたは、柔軟性がオブジェクト指向のアプローチを使用することで、新しいタイプを追加したい場合。