PHP 5 для начинающих |
Страница 479 из 813 иметь множество общих характеристик, например, цвет, марку, модель, год выпуска, номер и т.д. Чтобы гарантировать, что каждый из классов имеет такие свойства, можно было бы скопировать код, создающий данные свойства, во все файлы, содержащие определения классов. Однако, как уже отмечалось, одно из преимуществ OO-програм-мирования заключается в возможности повторного использования кода. Следовательно, можно не копировать код, создающий свойства, а вместо этого повторно использовать свойства и методы данных классов. Такую возможность предоставляет процесс, который называется наследованием (inheritance). Наследование — возможность класса получать методы и свойства родительского по отношению к нему класса. Наследование позволяет определить базовый класс— в данном случае класс Automobile — и указать, что другие классы представляют собой типы автомобилей, и поэтому имеют все те же свойства и методы, которые реализованы в классе Automobile. Таким образом, седан ------ это автомобиль, и поэтому он автоматически наследует все свойства и методы, определенные в классе Automobile, и копировать код для этого не требуется. Придется только написать дополнительные свойства и методы класса Sedan, которые нехарактерны для всех остальных автомобилей. Все что требуется сделать, это определить различия; сходные черты всех классов будут унаследованы от базового класса. Возможность повторного использования кода ------ не единственное достоинство применения наследования; есть еще одно значительное преимущество. Предположим, что существует класс Customer, имеющий метод buyAutomobile. Данный метод принимает один параметр— объект класса Automobile и распечатывает все необходимые документы для оформления продажи автомобиля, а затем уменьшает количество машин, оставшихся на складе. Так как все седаны, пикапы и фургоны являются автомобилями, можно передавать объекты соответствующих классов в функцию, которая ожидает объект класса Automobile. Так как объекты трех указанных типов наследуют характеристики более общего родительского класса, известно, что все они будут иметь одинаковый базовый набор свойств и методов. До тех пор, пока будут нужны только методы и свойства, общие для всех автомобилей, можно будет принимать объекты любого класса-наследника Automobile. Рассмотрим другой пример:кошки. Все кошки имеют ряд общих свойств — вес, окрас, длину усов и скорость бега. Вместе с тем, львы имеют гриву определенной длины (по крайней мере, самцы) и они рычат. Гепарды имеют пятнистый окрас. Обычные домашние кошки не имеют этих свойств, но все указанные животные принадлежат семейству кошачьих. В PHP можно указать, что класс представляет собой подмножество другого класса, с помощью ключевого слова extends (расширяет), которое сообщает PHP-машине, что объявляемый класс должен наследовать все свойства и методы родительского по отношению к нему класса, и что кроме этого в объявляемый класс будут добавлены дополнительные свойства или методы. Если бы пришлось создавать приложение, "имитирующее" животных в зоопарке, то, вероятно, понадобилось бы использовать классы Cat (кошка), Lion (лев) и Cheetah (гепард). Прежде чем писать какой-либо код, следует спланировать иерархию классов, используя UML-диаграммы. Эти диаграммы впоследствии послужат начальной точкой для написания кода и документации разрабатываемых классов. (Язык UML подробнее рассматривается в главе 13.) Диаграмма классов должна отражать родительский класс Cat и его подклассы Lion и Cheetah, наследующие его свойства и методы. Пример UML-диаграммы показан на рис. 12.1. |
Входные двери по выгодным ценам - двери марио риоли москва. Стальные двери 4500р. Москва.