Ну и зачем нам это ООП?

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

«Ну и зачем нам это ООП?» – думал я, изучая веб-программирование. Мне действительно непонятно (было), зачем в PHP засунули ООП (то есть классы). Оно было очень удобной штукой, когда, например, описывает злобную вражину в какой-нибудь игре. Особенно, если врагов много – массив или список объектов чертовски удобно обрабатывать (по сравнению с кучей глобальных переменных, например).

Но в PHP, как правило, не нужно создавать ничего такого – страница в одном экземпляре, подключение к базе одно и так далее.

Читая книгу по C++, я нашел там описание, которое помогло мне понять и расставить эти вопросы по полочкам. Попытаюсь объяснить это своими словами.

Давно-давно, когда я еще не родился, язык С был структурным языком, в нем не было классов. Со временем программы становились все больше, а уследить за ними и искать в них ошибки становилось все сложнее (то есть когда программы стали действительно большие – от 100.000 строк). Поэтому крутой чувак Страуструп (читаю и ужасаюсь каждый раз – «Страус+труп») решил язык Цэ немного подремонтировать – добавил в него классы.

Суть тут вот в чем. Во времена языка С на первый план выходил код, который обрабатывает какие-то данные. Под кодом я сейчас имею ввиду разные операторы, обрабатывающие переменные, а под данными сами переменные.

ООП же наоборот, отталкивается от того, что данные – важнее кода. Сам по себе объект (экземпляр класса) – это данные, а-ля переменная. Они ставятся во главу угла и сам код, получается, состоит из одних только данных.

То есть класс, если упрощенно, это переменная, которая может сама изменять свое значение по сложным алгоритмам. Круто, правда? Больше того. Класс можно составить так, что его переменные сможет обрабатывать только он (то есть из вне они будут не доступны), таким образом это почти что маленькая вселенная. Одна маленькая, но гордая «переменная» :) Интересная точка зрения, не находите?

Чем же это так помогло несчастным программистам 80ых? Дело в том, что когда программа состоит из таких вот «маленьких миров» (то есть множество классов, друг от друга не зависящих), уследить за тем, что происходит гораздо легче. Больше того, если что-то сломалось – сразу понятно, где искать ошибку (конечно, я сейчас не о том, что классы сами по себе тоже могут добавить ошибок при неправильном использовании).

Надеюсь, донес до Вас светлую мысль. И, кстати, в PHP классы – это жалкая пародия. Вот в C++ это да… Попробуй разберись во всех ньюансах.

UPD: Чтобы не быть голословным, попробую привести простой пример, даже не смотря на то, что я еще не проснулся.

MyClass *b = new MyClass;
MyClass a = b;

Будут ли какие-то неочевидные глюки программы при вполне правильном уничтожении класса «а», если в деструкторе освобождается какая-то занятая свойствами класса память?

Related posts

Оставить комментарий