Аргерих Л. О языке РНР. Часть 1. Страница 98


Ключ не потребуется, пока мы не станем действительно заводить машину, поэтому пока ошибки не возникнут. Итак, после нескольких первых строк кода все происходит нормально. Отвлекшись в сторону, посмотрим на ту строку, где создается объект Engine. Что если написать $car->Engine = new Engi- пеО (с прописной буквой «Е» в слове «Engine»)? Автомобиль не заведется, потому что двигатель тоже не будет инициализирован. Такие ошибки легко обнаруживаются, но, прежде всего, они не должны происходить. Теперь по­пытаемся завести автомобиль:

$car->speed = 400; // чтобы возникла ошибка, должно быть $car->setSpeed(400); $са г->st a rt($myKey);

Запустившись, автомобиль двинется вперед и наберет скорость 400 км/ч. В результате возможно дорожное происшествие с гибелью людей. Очевидно, нам этого не хотелось бы.

Кроме того, не понятно, как автомобиль узнает, какой ключ ему нужен для запуска? Он будет сравнивать наш правильный ключ с переменной, которая даже не существует (что дает значение 0), и в результате не сможет запус­тить двигатель. Такое сравнение пройдет контроль интерпретатора, по­скольку сравнивается введенное значение $key, а не член. Странно было бы купить новый автомобиль и обнаружить, что ключ, который дал продавец, не действует. Посмотрим, что произойдет, если останавливать автомобиль, когда Engine установлен в 0:

$car->engine = 0; $car->stop();

При вызове метода возникнет ошибка стадии выполнения, поскольку

объект Engine просто не существует, т. к. мы присвоили ему целое значение 0. Как можно видеть, установка значений членов извне класса способна при­вести к возникновению множества проблем. В условиях, когда над проектом работает много программистов, следует учитывать, что ваш код будут чи­тать и, скорее всего, использовать другие.

Какие же уроки можно извлечь из этого примера? Использование членов вне объекта (нарушение объектности) может привести к таким последствиям:

♦ потере уверенности в том, что предоставляемые объектом сервисы будут работать так, как это запланировано;

♦ нарушению целостности членов-данных объекта (или состояния объекта) в результате:

♦ нарушения правил, которым подчиняются данные;

♦ отсутствия инициализации членов;

♦ созданию более сложных интерфейсов, чем это требуется в действитель­ности;

♦ возложению на программистов необходимости помнить лишние сведения об объекте и способе взаимодействия данных с его сервисами;




Если вам нужная строительная бытовка - купить, то обращайтесь в компанию СпецМеталлКонструкция и получите нужную вам бытовку по самой лучше цене. Компания производит множество различных бытовок, которые подойдут каждому заказчику.