/* +---------------------------------------------- --- ---------------------------------+ | = この記事は Haohappy によって読まれています> = 章のクラスand Objects Notes | = 翻訳 + 個人的な経験 | = 不必要なトラブルを避けるため、転載はご遠慮ください。 = 批判や修正は歓迎です。PHP 愛好家の皆さんと一緒に進歩していきたいと思っています。 -------------------------------------------------- -- --------------------+ */ セクション 10 - 抽象メソッドと抽象クラス 単一継承言語では、オブジェクト指向プログラムはクラスの階層構造を通じて構築されます。たとえば、PHP では、クラスの継承はツリー状になっています。ルート クラスには 1 つ以上のサブクラスがあり、各サブクラスは 1 つ以上の次のレベルのサブクラスを継承します。もちろん、異なる関数を実装するために使用されるルート クラスが複数存在する場合があります。適切に設計されたシステムでは、各ルート クラスには、アプリケーション コードで使用できる便利なインターフェイスが必要です。アプリケーション コードがルート クラスで動作するように設計されている場合、ルート クラスを継承するサブクラスでも動作できます。抽象メソッドは、サブクラス内の通常のメソッドのプレースホルダーであり (場所を占めますが機能しません)、1 つ以上の抽象メソッドが存在する場合、通常のメソッドとは異なります。クラス内では、クラスは抽象クラスになります。抽象クラスを継承してからサブクラスをインスタンス化する必要があります。すべての抽象メソッドをオーバーライドすると、サブクラスはテンプレートになります。すべてのメソッドをオーバーライドしない場合でも、サブクラスは抽象メソッドのままです。クラスに抽象メソッドが含まれる場合は、class キーワードの前に abstract を追加して、このクラスを抽象クラスとして宣言する必要があります。抽象メソッドは、通常のメソッドの宣言とは異なります。抽象メソッドには、通常のメソッドのように中かっこ {} で囲まれた本体部分がありません。例 6.13 では、次の内容を含むクラス Shape を定義しました。 getArea メソッドですが、形状が分からなければ形状の面積を決定することは不可能なので、getArea メソッドを抽象メソッドとして宣言しました。Shape オブジェクトをインスタンス化することはできませんが、それを継承したり使用したりすることはできます。例 6.13 のように、抽象メソッドのみを含むクラスを作成する場合は、インターフェイスを定義します。この場合、PHP には、抽象クラスの代わりにインターフェイスと実装のキーワードを使用できます。 extends の代わりに、クラス定義を記述するか、インターフェイスを使用することができます。これらの 2 つのメソッドは、個人の好みに応じて選択できます。 1. 抽象クラス。 aaa{} (aaa には抽象メソッドのみがあり、一般メソッドは存在しないことに注意してください) class bbb extends aaa{} (bbb 抽象メソッドの aaa を上書きします) 2. インターフェイス aaa{} class bbbimplements aaa{} (aaa{} の抽象メソッドを上書きします) aaa in bbb) */ リスト 6.13 抽象クラス base * $this->height)/2); } public function getNumberOfSides() //サイドカウントメソッドをオーバーライドします { return(3) } } //具体的なクラスのエンティティクラス;四角形クラス Rectangle extends Polygon { public $width; public $height; public function getArea() { return($this->width * $this->height) } / /concrete class エンティティクラス Circle class Circle extends Shape { public $radius; public function getArea() { return(pi () * $this->radius * $this->radius) } //具体的なルートクラスは色を定義しますclass class Color { public $name; } $myCollection = array(); // 図形のコレクションを作成し、配列に入れます $r = new Rectangle = 5; >height = 7; $myCollection[] = $r; // 三角形を作成 $t->base = 4; = $t; unset($t); // 円を作成します $c = new Circle = 3; $myCollection[] = $c; = new Color; $c->name = "blue"; $myCollection[] = $c; foreach($myCollection as $s) //$s がShape クラスのインスタンス { print("Area: " . $s->getArea() . "