Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Полиморфизм и его особенности (https://javascript.ru/forum/server/13636-polimorfizm-i-ego-osobennosti.html)

Golovastik 07.12.2010 14:39

Полиморфизм и его особенности
 
Скажите в двух словах, какой главный смысл полиморфизма(читал что 1 интерфейс и множество реализаций), и приведенный код нже демонстрирует ли полиморфизм?

Код:

<?php header('content-type: text/html;charset=utf-8'); ?>
<?
    // Класс Фигуры (какой фигуры - неизвестно. просто фигуры)
    abstract class Figure {
        abstract public function Draw(); // абстрактный метод «Нарисовать фигуру»
    }

    // Класс Треугольника
    class Triangle extends Figure {
        public function Draw() {  // метод «Нарисовать треугольник»
            echo 'рисуем треугольник '.'<br/>';
                }
    }

    // Класс Эллипса
    class Ellipse extends Figure {
        public function Draw() {  // метод «Нарисовать эллипс»
            echo 'рисуем эллипс '.'<br/>';
        }
    }
   
    // Класс Круга
    class Circle {
        public function Draw() {  // метод «Нарисовать круг»
            echo 'рисуем круг '.'<br/>';
        }
    }

    // Класс Прямоугольника
    class Rectangle extends Figure {
        public function Draw() {  // метод «Нарисовать прямоугольник»
            echo 'рисуем прямоугольник '.'<br/>';
        }
    }



    // обыкновенная функция рисования фигуры
    function drawFigure($fig) {
        if ($fig instanceof Figure) {
            $fig->Draw(); // тут мы на этапе написания этой функции не знаем,
                          // какая именно фигура будет рисоваться, а интерпретатор
                          // php это знает только на этапе выполнения скрипта
        } else {
            echo 'Неизвестная фигура';
        }
    }


    // создадим фигуры
    $triangle  = new Triangle();  // треугольник
    $ellipse  = new Ellipse();  // эллипс
    $rectangle = new Rectangle(); // прямоугольник
    $circle    = new Circle();    // круг
   
    // нарисуем прямоугольник
    drawFigure($rectangle);
   
    // нарисуем эллипс
    drawFigure($ellipse);
   
    // попытаемся нарисовать круг
    drawFigure($circle);
?>

НЕ понятно вот это место:
Код:

//Скажите $fig в этот параметр передаются объекты в качестве параметра
//и вот эта переменная $fig превращается в объект?
    function drawFigure($fig) {
        if ($fig instanceof Figure) {    //А здесь сравнивается является ли объект под названием  $fig
//объектом класса под названием Figure?
    $fig->Draw();
                        } else {
            echo 'Неизвестная фигура';
        }
    }


Gozar 07.12.2010 15:30

удалено.


Часовой пояс GMT +3, время: 05:59.