русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Полиморфизм


Дата добавления: 2013-12-23; просмотров: 1174; Нарушение авторских прав


Запрет наследования

Финальные методы

Доступ к методом базового класса

При вызове функции базового класса используется особый синтаксис с ключевым словом parent, например: parent::_ construct(...);

При написании метода вы можете явно запретить его переопределение в производных классах, используя модификатор final.

<?php ## Финальные методы,

class Base {

public final function test() {}

}

class Derive extends Base {

public function test() {} // Ошибка! Нельзя переопределить!

}

?>

В РНР, как и в Java, можно не только запретить переопределение методов, но и запретить наследование от указанного класса вообще. Для этого ключевое слово final необходимо поставить перед определением класса

final class Base {}

// Теперь нельзя создавать классы, производные от Base.

Используйте final при описании класса только в тех случаях, когда это абсолютно необходимо, и вы уверены, что наследование к классу неприменимо.

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

Обычно при объяснении полиморфизма демонстрируют пример программы, выводящей различные геометрические фигуры (круги, квадраты, треугольники и т. д.) и позволяющей однотипно ими манипулировать (изменять размеры, передвигать и т. д.). С использованием полиморфизма вы можете писать классы-шаблоны, реализующие некоторую функциональность лишь частично, и лишь в той степени, в которой она им самим "известна". В дальнейшем, создавая производные классы, вы можете уточнить остальную часть кода, специфичную для вашего приложения. Пусть в программе имеется класс 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). Таким образом, их уже нельзя будет переопределить в производных классах, а значит, фигуры не смогут вести себя по другому.



<== предыдущая лекция | следующая лекция ==>
Переопределение методов | Совместимость родственных типов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.