Полиморфизм. Полиморфизм — это способность объекта использовать методы не своего собственного класса, а производного

Полиморфизм — это способность объекта использовать методы не своего собственного класса, а производного, даже если на момент определения базового класса производный еще не существует.

Обычно при объяснении полиморфизма демонстрируют пример программы, выводящей различные геометрические фигуры (круги, квадраты, треугольники и т. д.) и позволяющей однотипно ими манипулировать (изменять размеры, передвигать и т. д.). С использованием полиморфизма вы можете писать классы-шаблоны, реализующие некоторую функциональность лишь частично, и лишь в той степени, в которой она им самим "известна". В дальнейшем, создавая производные классы, вы можете уточнить остальную часть кода, специфичную для вашего приложения. Пусть в программе имеется класс shape, соответствующий некоторой геометрической фигуре. Программа должна уметь выполнять два действия: 1)перемещать фигуры при вызове метода moveBy(); 2) увеличивать или уменьшать размер фигуры с вызовом метода resizeBy().

Мы не уточняем, какой именно фигуре (квадрату, кругу, треугольнику и т. д.) соответствует объект shape. Мы хотим свободно добавлять все новые типы фигур (square, circle, Triangle), ведущие себя похожим образом и удовлетворяющие все тем же жестким требованиям.

<?php ## Базовый класс — геометрическая фигура,

class Shape {

// Любая фигура имеет координаты центра, а также масштаб.

private $х=0, $у=0, $scale=1.0;

// Конструктор класса. Отображает фигуру на экране.

public function _construct() {

$this->show() ;

}

// Деструктор класса. Стирает фигуру с экрана,

public function _destruct() {

$this->hide();

}

// Переместить фигуру на ($dx, $dy) точек,

public final function moveBy($dx, $dy) {

// Вначале стираем фигуру с экрана.

$this->hide();

// Затем изменяем координаты.

$this->x += $dx;

$this->y += $dy;

// Наконец, выводим фигуру на новом месте.

$this->show();

}

// Изменить масштаб отображения фигуры,

public final function resizeBy($coef) {

$this->hide();

$this->scale *= $coef;

$this->show();

}

// Методы возвращают координаты центра и масштаб.

public final function getCoord() { return array($this->x, $this->y); }

public final function getScale() { return $this->scale; }

protected function hide() {

die();

}

protected function show() {

die();

}

}

?>

Для гарантии того, что все геометрические фигуры будут вести себя одинаково, мы объявляем public методы финальными (final). Таким образом, их уже нельзя будет переопределить в производных классах, а значит, фигуры не смогут вести себя по другому.








Дата добавления: 2015-08-26; просмотров: 902;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.