Программирование и жизнь

Прочее
Программирование и жизньВ статье будет несколько слов о сходстве мироустройства и программирования.

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

Эволюция стремится к совершенству. Любая живность на планете всегда стремится приспособится к условиям обитания, чтобы выжить, пройти жизнь более менее комфортно и дать потомство. Каким боком это связано с программистами? Программисты тоже стремятся выжить в среде конкурентов и поэтому ищут способы создать удобный инструмент и комфорт в своей программистской жизни…

Когда-то компьютеры были большие, а программы – маленькими. В те времена существовал процедурный подход, который всех вполне устраивал – любая программа состояла из набора инструкций и процедур, которые выполнялись строка за строкой.

Но программы постепенно стали разрастаться, процедуры накапливались и появилось желание их постепенно собрать в библиотеки. Потом размеры проектов стали достаточно большими и сопровождать их становилось все трудней. Зашевелилась мировая программистская братия и задумалась… Что делать? И придумали – нужен совсем иной подход, чтобы упростить разработку проектов.

Так появился ООП – программы состоят из объектов, которые отражают объекты реального мира. Вскоре появились новые языки программирования, которые уже стали поддерживать ООП. Программисты воодушевились… Что их так могло окрылить?

Перенесем все вышесказанное в сферу строительства. Можно строить из кирпича – дом получится более изящной формы – кирпич – он маленький, но строить придется дольше. Можно применить панели – они покрупнее, но и работа пойдет быстрее… А если применить уже готовые блоки, например санузел и кухню. Здание будет построено еще быстрее, но полета для творчества будет еще меньше.

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

Объекты в программах сродни реальным объектам. Объект имеет набор свойств и часто, уже определено его поведение. Например – кирпич – объект. Какие у него свойства? – размеры, масса, цвет, форма. Объекты можно описать отдельными классами, которые имеют общие свойства для всех объектов данного класса. Каким образом, имея классы, можно упростить разработку программ? Построить иерархию классов – грамотно спроектированная иерархия классов – успех в реализации проекта!

Например – класс «Кирпич». Иерархия классов создается наследованием – классика ООП! Из класса «Кирпич» можно получить классы-потомки «Кирпич Красный», «Кирпич Белый». Для них базовым или родительским классом будет «Кирпич». Классы можно переопределять! Например – создать на базе класса «Кирпич Белый» новый класс «Кирпич Белый Половинчатый».

А из «Красный Кирпич» - «Красный Кирпич Дырчатый», Далее – «Кирпич Термостойкий» - то есть, внося минимум изменений, мы улучшаем классы-потомки ("наследник" всегда талантливей "родителя", так как он умеет делать все то же, что и "родители", плюс имеет еще и свои "таланты". Программы, написанные в стиле ООП легко читаются, легко сопровождаются и дорабатываются).

В реальной жизни нужна половинка кирпича – разбили кирпич пополам – всего-то делов. В программировании также – есть готовый отличный класс, все в нем отлично, но вот самую малость неплохо бы переделать – наследуемся от данного класса и в новом классе эту «малость» и переделываем!

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

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

Пример в реальной жизни – башенный кран. Какая разница, что у него под крышкой пульта управления – крановщик знает, какие кнопки за что отвечают и может управлять краном – пульт в данном случае – интерфейс объекта "Кран". Крановщик – другой объект, который через интерфейс крана взаимодействует с краном. Если пульт сделать лучше и совершеннее, но оставить те же кнопки, крановщик продолжит спокойно управлять краном – ничего не изменится в худшую сторону.

Если поменять интерфейс – добавить, к примеру, несколько новых, ранее неизвестных крановщику кнопок – крановщика придется переобучать, иначе он обрушит кран на соседнее здание. Также и в программировании – поменяли у класса интерфейс – прощаемся с совместимостью с уже разработанным гигантским проектом, встречаем лавину проблем с переписыванием отдельных фрагментов проекта!

ООП упрощает разработку, так как по своей сути – он отражает реальный мир и подходы в разработке – примерно те же. Разработка неграмотно спроектированного проекта заведет в тупик, время будет потеряно, трудозатраты гигантские, результат - нулевой – проще будет все переделать заново. Неграмотно спроектированное здание – проще будет снести и перестроить иначе… Программирование – это отражение жизни!

4 комментариев

Это давно известная проблема взаимоотношений конструкторов и технологов. В любых реальных проектах борются эти две ипостаси. Если побеждает идея, при поддержке реальных технологических возможностей, прогресс идет вперед. Если таких возможностей нет, идея кладется в стол для будущих поколений.
Всё имеет сходство с реальностью, ведь из жизни всё берётся.
Есть какая-то доля истины - праздники повлияли. но не сильно - я все еще сторонник трезвости, поэтому даже после таких праздников не было утренних бед с похмельем... А статья - просто аналогия современного программирования с реальностью... Слишком много сходства...
Да-а-а-а! Вот до чего праздники доводят! В чем заключается совет-то? С Новым годом!
  • Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.