Рейтинг@Mail.ru
 

Введение в ООП

Тут мы приведем несколько выдержек, чтобы сложилось представление, в каком ключе написаны уроки в нашей школе. Если понравилось - милости просим.

. . . . . . . . . . . . . . . . . . . . . . . . .

Начиная с пятой ветки, PHP начал претендовать на звание объектного языка. И хотя объектная модель, по мнению многих экспертов, в нем оставляет желать лучшего, однако тенденция идет в эту сторону и императивная и функциональная прадигмы сейчас не особо в моде. А значит, если настраиваться на профессиональное программирование, волей-неволей придется изучать принципы обектного построения программ.

. . . . . . . . . . . . . . . . . . . . . . . . .

Представим себе большой офис какой-нибудь компании. Это будет наша программа. Работники офиса - функции, каждый делает свое дело. Обрабатывает информацию на своем рабочем месте. Данные, это документы. Пока документ на столе работника (внутри функции), снаружи его взять никто без разрешения не может. Но есть еще общие шкафы - глобальная область видимости. Если документ положить туда (объявить переменную глобальной), то любой работник может не только взять документ, но и изменить его или вообще уничтожить. Уследить бывает за этим довольно сложно, но обмениваться документами как то надо, иначе офис перестанет работать.

. . . . . . . . . . . . . . . . . . . . . . . . .

Вот чтобы обратиться к инкапсулированному в класс свойству или методу, нужно обозначить этот класс (выбрать кабинет), и только потом получить данные. Делается это через двойное двоеточие (очень смешно на него реагирует интерпретатор ошибок: PAAMAYIM_NEKUDOTAYIM. Что-то из иврита наверное).

. . . . . . . . . . . . . . . . . . . . . . . . .

Чтобы не путать класс с объектом, создадим ассоциацию. Это похоже на ксерокс. Класс - это документ-образец, который мы собираемся размножать. Допустм анкета. А вот копия - это и есть объект.

. . . . . . . . . . . . . . . . . . . . . . . . .

Никогда не слушайте тех, кто пытается навязать такую ассоциацию, что весь мир состоит из объектов. Что собака - объект, лает - метод, а рыжая - свойство. Если вы в программировании начнете отталкиваться от этого, никакого ООП не выйдет, а получится жалкое чертичё.
Дело в том, что и мир совершенно не так прост, и программирование тем более нельзя загонять в эти рамки. Если бы это было похоже, мы легко бы в жизни могли научить собаку мяукать, кошку нести яйца, а автомобили летать.

. . . . . . . . . . . . . . . . . . . . . . . . .

Здесь мы подготовили данные в классе Example, а вывели в поток в виде HTML в классе Display. Это уже разделение бизнесс-логики и представления, но все аккуратно и красиво, всего одной строчкой. И хотя это достаточно серьёзно бьёт по прозрачности кода (на вызове совершенно не ясно кто откуда), такой синтаксис применяется в фреймворках и понимать его необходимо

. . . . . . . . . . . . . . . . . . . . . . . . .

Вообще я не знаю, откуда пошло называть это явление наследованием. С наследством, как термином юридическим, это не имеет ничего общего. Первое - наследование предполагает благоолучную кончину первооблдателя, второе - наследник на конкретные блага может быть только один. Тут все не так.
Наверное из генетики. Там потомок наследует геном родителя. Однако и это нифига не подходит, так как родителей бывет двое, это раз. А в PHP нет множественного наследования. И еще, наследник в генетике совершенно не обязательно наследует все признаки. В отличие от.
А посему это явление должно было бы называться "расширением", что прямым текстом обозначено в ключевом слове extends, которым обозначается класс-наследник. Extend с английского так и есть - "расширять, продлевать".

. . . . . . . . . . . . . . . . . . . . . . . . .

Вспомним про офис из первого раздела. И представим себе большой бизнесс-центр, который сдает офисы в аренду. В объявлениях о сдаче их внаем никогда не указывают, что именно будет делать предприятие, снявшее это помещение. Указывают только общий для всех функционал: кондиционер, телефон, интернет, охрана и так далее. Вот этот бизнесс-центр в переносе на ООП является абстрактным классом. А та организация, которая организует в предоставленном помещении какую-то работу - наследник.

. . . . . . . . . . . . . . . . . . . . . . . . .

Интерфейсы не выполняют никакой полезной функции, они как седло на корове. Они нужны только для того, чтобы не забыть ненароком реализовать какой-либо метод. Но абстрактные классы делают тоже самое гораздо продуктивнее, поэтому в последнее время все реже можно встретить интерфейс как таковой.

. . . . . . . . . . . . . . . . . . . . . . . . .

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

. . . . . . . . . . . . . . . . . . . . . . . . .

Ну вот собственно и все, что нужно знать для вхождение в мир Объектно Ориентированного Программирования. Дальше пойдет архитектура, паттерны и прочие изыски, это дело практики. Главное не бояться ООП, это такое же программирование, только немного с другим уклоном.