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