Классы - это новый способ организации кода. Вы наверняка
знакомы с функциями - это достаточно удобные конструкции, которые позволяют
сохранить небольшой кусок кода и обозначать его одной строкой (вызов функции).
Раньше функций не было и программа, сколько там было строк состояла из одного
или нескольких файлов, повторно код использовать было нельзя и приходилось его
копировать, что приводило к ещё большему разрастанию кода и увеличению числа
ошибок. Именно с введением функций связывают новую эру в программировании -
структурный подход. Сейчас де факто, изучить программирование - это означает
научиться писать программы с использованием структурного подхода. Если
программист не использует в работе положения данного подхода, мы, глядя на его
код, качаем головой и говорим, что он не умеет программировать. Таким образом,
структурный подход позволил увеличить число строк в программе с нескольких тысяч
до 100 000 (предел когда программу ещё можно сопровождать). Ненасытное
человечество быстро добралось до этого предела, современные операционные
системы, библиотеки, сложные приложения превышают данный предел, а писать-то их
нужно.... Поэтому был введён новый подход объектно-ориентированный.
Программистское сообщество сейчас находится как раз на пути перехода от
структурного к объектному (здесь переход диалектический, т.е. объектный подход
не перечёркивает структурный, а дополняет). При создании ООП отталкивались
от простой идеи: что такое структурный подход? Это - функции - модели процессов,
т.е. программируя в функциях мы программируем в процессах - т.е. имеется поле
статичных данных, а над ними совершают в определённом порядке действия различные
функции. Создание функций и порядок их расположения и есть программирование. Но
в реальной жизни мы имеем дело не с процессами - чёрт знает, что это такое (во
времени человек всегда плохо ориентировался), а с объектами. Вот есть машина: у
неё дверцы открываются, она красного цвета, в неё бензин можно залить, может
быть она даже поедет, а ездить она может и назад и вперёд - если имея ввиду
машину мы будем всё это представлять, а ещё и не дай бог проговаривать - мы
свихнёмся, поэтому мы просто говорим - машина, подразумевая, что в любой момент
мы можем уточнить её свойства и перечислить, что она может. Это инкапсуляция - сложная структура предмета
скрыта за его именем, которое выглядит просто. Мы без труда можем пользоваться
машиной, даже не понимая как она устроена. Не плохо бы это понятие втащить в
программирование. Сказано – сделано. В ООП оперируют не голыми функциями, а
объектами – совокупностью структурированных данных (переменные, массивы),
которые называют членами, и функциями,
которые оперируют над членами, их называют методами. У машины имеются детали и свойства,
которые скрыты от глаз водителя, а есть такие, управление без которых
невозможно. Точно так же у объекта имеются открытые (public) и закрытые
(private) члены и методы. Что такое объект в повседневной жизни – это то,
что мы о нём думаем. Есть понятие "дерево" им мы называем все объекты-деревья.
Так устроен человек – он склонен к обобщению. Нет ни одного дерева похожего на
другое, но мы их все называем – "дерево". Точно так же и в ООП для всех объектов
имеется единый шаблон – класс, создав который один раз, потом по нему можно
плодить столько объектов при помощи конструкции new, сколько требуется. Класс –
понятие "дерева", объекты – "конкретные деревья". Создав объект мы уже в его
членах можем уточнять, сколько у него сучков, сбрасывает ли оно листья на зиму и
т.п. Прекрасно, давайте теперь покопаемся в конкретном дереве? Что мы о нём
знаем – оно имеет 1) корни, ствол и крону 2) которые состоят из тканей
3) ткани состоят из клеток 4) клетки из клеточных органов и цитоплазмы
5) вся эта требуха состоит из молекул 6) молекулы состоят из атомов
7) атомы состоят из электронов из ядер 8) ядра состоят из протонов и
нейтронов Из чего состоят протоны, нейтроны и электроны… ну ладно первые два
состоят вроде как из кварков, хотя их никто не выделял – они не живут вне ядер.
Всё это перечисление здесь приведено для того, чтобы показать, что человеческое
познание бесконечно и идёт по пути уточнения понятий (например, дерева). В
начале цивилизации о дереве знали только пункт 1), сейчас знают до 8) – потом
будут другие пункты. При этом, чтобы установить то, что молекулы состоят из
атомов исследователям не приходилось каждый раз изучать виды деревьев, их ткани,
клетки, состав клеток и т.п. они опирались на уже полученные ранее другими
людьми данные и результаты. Это – наследование (натянуто немного, ну да ладно).
Точно так же и живые организмы – как происходит эволюция? Накапливается генный
материал – одни гены блокируются, другие активируются, по активным генам
синтезируются ферменты, которые и управляют ростом и жизнедеятельностью
организма. При этом в нас сидят гены амёб, динозавров и не знаю кого ещё, но они
заблокированы (при желании их можно даже разблокировать), а работаю гены
человека. Но весь этот материал должен был быть наработан, чтобы получилось
такое сложное существо. При этом природа (или кто там) человека не с нуля из
грязи создавало, а использовала для этого подручные материалы – тех животных,
которые были на тот момент и их генный материал. Это я вот к чему.
Представьте кто-то разработал класс поискового робота, который ищет и
индексирует Web-сайты и у вас встала задача добавить в него функции поиска по
WAP-сайтам. В случае ООП вам не понадобится с нуля разрабатывать класс, который
ищет и WAP-сайты и Web-сайты. Вы отнаследуте от существующего класса новый, при
этом все члены и методы старого класса перейдут в новый автоматически. Выгоды
здесь две: вам не понадобится разрабатывать часть относящуюся к Web-сайтам, а
во-вторых код, который относится к Web-сайтам не будет путаться у вас под ногами
- он останется в классе-родителе.