Practical developers (dexSoft.ru)
VPS

Рейтинг

Метки

Сервис

Обсуждения

Марс атакует!
Сгинули все инопланетяне... Надоели мы им...

Статистика

 

Статьи > Разное

ООП: в шутку и в серьез

07 август 2009 15:40, рейтинг: 4732, автор: Cheerful Programmer

Давным давно, лет 50 назад плюс минус еще лет 20, короче на заре человечества, жизнь программистов была раем. Они гордо писали короткие программы, вычисляющие 1+1, 2+2, 3+3 и т.п. и длинные статьи о том, почему они не работают. И за это платили деньги!

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

К сожалению, редко кому удавалось обеспечить себе пожизненное существование, написав одну единственную программу. Рано или поздно большинству из них приходилось начинать новую. И тут кто-то из них заметил, что в программе вычисляющей 1+1 и программе вычисляющей 2+2 большая часть кода абсолютно одинаковая!

Лень движитель прогресса! Лень было человеку пешком ходить – он автомобиль придумал. Программисты, в этом плане, ничем не отличаются от простых смертных. Самые умные (а может самые ленивые) из них сразу озадачились вопросом: как бы писать поменьше, а получать побольше, ну и заодно сократить объем исходного кода? Учитывая, что использование метода copy/paste в те времена было затруднительно ввиду отсутствия дисплея и ныне привычной клавиатуры и то, что большинство тогдашних программистов компьютер в глаза не видели и даже слова такого не знали, вопрос повторного использования кода был совсем не прост. Постоянно перекладывать кучи перфокарт или переклеивать куски перфолент совсем не подарок! А на магнитной ленте так вообще ничего не видно!

Из всех этих извращений родилось понятие подпрограмм. Правда пришлось отказаться от привычного линейного программирования и ввести возможность вычисления адресов и переходов ни них. Но это уже мелочи (хотя для этого пришлось пересмотреть концепцию линейного программирования и вспомнить, что прямая линия частный случай кривой или, говоря по-русски, для бешеной собаки 100 верст не крюк). Теперь для вычисления 1+1, 2+2 и т.д. требовалась лишь одна функция с возможностью передачи в нее нужных параметров. Программисты были счастливы и были уверенны, что ближайшие века их работа будет сводиться только к передаче этих самых параметров, но… В любом деле есть свое НО! Здесь им стали системщики.

Когда появилась возможность запускать на одном компьютере более чем одну программу, выяснилось, что эти программы опять по большей части повторяют друг друга и в памяти в разных местах развешаны одни и те же куски кода. Немало народу полегло в попытках умыкнуть эти куски из одной программы в другую. Конец этим не нужным жертвам положил очередной гений, чтоб ему…, т.е. счастья и удачи. Может этим гением был не один человек, а целый коллектив. А с коллективом шутки плохи! Не плюй в коллектив, коллектив плюнет – ты утонешь! Короче, этот самый который гений, придумал систему указателей. Т.е. заливаем в память по некоторому адресу некий код и обзываем его объект. А указатель дает возможность найти этот самый объект и использовать по своему усмотрению. Мало того, он придумал систему последовательных связей указателей. Получилась иерархическая система объектов. А весь список указателей свел в таблицу и запихнул ее в память компьютера.

Не беда, что, например, в Windows таблица указателей может быть побольше иной приличной программы, что половину времени выполнения программы стали тратить не на что-то полезное, а на вычисление адресов и переходы по ним. Не беда, что для этой, вроде бы простой задачи, пришлось вводить принципиально новые понятия наследования, полиморфизма, инкапсуляции, перегрузки, перекрытия и много еще чего малопонятного. Зато теперь каждый придур…, пардон, программист мог написать некий код, назвать его MyObject, вписать в него массу полезной информации о размере своих тапочек, имени любимой девушки, вычисления фаз Луны, а также ссылку на родительский объект, в надежде, что там все-таки найдется функция, которая сумеет вычислить, сколько же будет 1+1 и разместить этот объект в памяти компьютера на веки вечные.

Компьютер железный и ему мытарства программистов до лампочки. Но и для него кое-какие полезные изменения все же произошли.

Используя принципы ООП можно существенно сократить объем используемой памяти. Все потомки объекта могут использовать его видимый для них код (а могут и не использовать) без повторения самого кода. Для того чтобы вычислить 2+2 теперь не обязательно писать все с нуля. Не обязательно даже знать, как вообще это делается 2+2. Можно, например, два раза вызвать функцию родителя, которая вычисляет 1+1... А можно изгаляться и по круче. Надо еще учитывать и то, что бывают случаи, когда повторение некоторых кусков программного кода вообще недопустимо. Да и система указателей позволяет располагать программный код объектов где угодно в памяти, хоть на Луне, лишь бы эта память была доступна операционной системе.

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

К тому же появилась возможность упрощения самого процесса программирования. Например, один создает объекты умеющие считать, другой - их потомков умеющих выводить на экран, третий - платежные ведомости в бухгалтерию на повышенную оплату непосильного труда себя и своих коллег. Теперь не обязательно знать все. Вполне можно разбить проектирование на отдельные задачи и поручить их разработку отдельным специалистам, что облегчает жизнь, как заказчикам, так и исполнителям. Хотя нередко это достаточно спорный вопрос: что лучше 33 спеца, умеющих писать по 1 букве, или 1, но умеющий писать их все?

А чтобы как-то заставить программистов бережно относиться к ресурсам и использовать все эти нововведения, было введено понятие «Объектно-ориентированное программирование» (ООП). В нем популярно и доходчиво изложено как простой программист может увековечить сведения о своих тапочках и как сделать так, чтобы другие пользователи тапочек могли эту ценную информацию применить для себя.


P.S.
Цитаты из форумов.
Вопрос: «Чем отличается труд программиста от труда писателя?»
Ответ: «Последовательностью нажатий клавиш.»
Вопрос: «Как лучше программировать? С использованием ООП или без?»
Ответ: «Чтоб работало...»
Реплика: «Ваш код безграмотный! Он просто чудовищный!»
Ответ на реплику: «А Ваш НЕ работает!»



Примечания автора:
1. Автор не претендует на 100%-ую правильность изложенного материала и соблюдение исторической хронологии событий.
2. Претензии и замечания по ошибкам в грамматике, орфографии, пунктуации, стилистики и т.п. ваще не принимаются.

Добавил guest, 17 сентябрь 2009 18:46
Круто!!!
Комментировать могут только зарегистрированные пользователи.