Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 14:42   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию Полиморфизм и его особенности

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

PHP код:
<?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);
?>
НЕ понятно вот это место:
PHP код:
//Скажите $fig в этот параметр передаются объекты в качестве параметра
//и вот эта переменная $fig превращается в объект?
     
function drawFigure($fig) { 
        if (
$fig instanceof Figure) {     //А здесь сравнивается является ли объект под названием  $fig
//объектом класса под названием Figure?
     
$fig->Draw(); 
                         } else {
            echo 
'Неизвестная фигура';
        }
    } 
Syltan вне форума Ответить с цитированием
Старый 07.12.2010, 17:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и приведенный код нже демонстрирует ли полиморфизм?
Если не ошибаюсь да.
В приведенном коде каждый наследуемый класс переопределяет метод Draw - что придает классам многоликость - это и есть полиморфизм - возможность переопределять тела методов описанных в классе-родителе.
Цитата:
НЕ понятно вот это место:
А тут что неясно?
Проверяется тип $fig, если он унаследован от класса Figure, то выполнить его метод, каким бы наследником он ни был, ибо у всех их этот метод существует. но у каждого свой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.12.2010, 19:15   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Если не ошибаюсь да.
уточню чтоб не сомневался, нет не ошибаешься
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2010, 21:07   #4
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

1)То есть базовый класс вызывает функции производных классов когда они ещё не реализованы в этом смысл полиморфизма и abstract и interface?
2)Чем отличается interface от abstract?
Syltan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм в пхп Golovastik PHP 1 02.07.2010 20:40
Полиморфизм mister2010 Общие вопросы C/C++ 30 24.05.2010 01:07
Особенности SSL OCTAGRAM Свободное общение 2 01.01.2010 16:42
Полиморфизм. Пример. Scratch Общие вопросы C/C++ 53 28.09.2008 18:46