Абстракция для программистов, или как я забыл MySQL и потерял 1500у.е
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Я совершенно не владею ООП и у меня для этого есть причины.
Первое — я прочитал какую-то юбилейную статью автора ООП, в которой он назвал ООП шуткой. Второе, когда я честно начал разбирать что там к чему, то мне сказали, что сейчас будет абстрактный класс, и смело показали ПУСТОЙ класс... Просто пустой класс, ктороый ни чего не делал и какие-то умники решили, что так и должно быть с абстракцией!
В программирование я пришел прямиком из философии, и убедить меня в том, что абстракция — суть пустое и не наполненное понятие не возможно в принципе. Я плюнул на ООП, поверил автору идеи ООП что это шутка, злая и глупая шутка и забил дверь в мир ООП корявыми досками и самыми крепкими гвоздями.
В СССР были два выдающихся физика: Гинзбург и Ландау. Я могу ошибаться, по этому заранее приношу извинения, если это так.
Ландау был большим поклонником математики. Гинзбург (еще раз оговорюсь, что могу ошибаться в персоналиях), был не таким большим поклонником. Результатом оказалось то, что школа Ландау легко громила школу Гинзбурга.
Математический аппарат — основа естествознания. Звучит банально, но это так. Если вы выбираете не владеть математическим аппаратом — вы лаборант. Вас легко поймают на не знании методов и... отправят учить, что нельзя делить на ноль сферического коня в вакууме.
Наличие математического аппарата позволяет подойти к объекту познания со стороны абстракции, то есть правильно! Отсутствие здравой абстракции в программировании натолкнуло меня на мысль, что как наука программирование не существует до сих пор и представляется чистым ремеслом.
Математика — царица наук именно потому, что она абсстрактна на 100%!
Истиность положений науки проверяется практикой. В том числе и математика.
Существование большинства наук, в основе которых лежит математический аппарат, их способность предсказывать состояние систем («А вот доедет это колесо до Москвы, если случись...») доказывает правильность и важность абстракции как в процессе познания мира, так и в процессе его изменения для пользы человека.
Програмирование не исключение.
Я не поверил в ООП потому, что с первых же шагов в нём грубо нарушалось элементарное представление об абстракции. Может это и может как-то работать, но зачем нам «как-то»?
Может я и не прав, но судя по тому, как именно ООП, вместо того, чтобы улучшить ситуацию повторного использования кода привело к раздуванию этого кода в разы вы можете видеть сами, что есть к этому подходу большие вопросы.
Но, ближе к делу.
Немного о природе абстракции.
В принципе, абстракция — это обобщение. Правильное обобщение приводит вас к тому, что ваше суждение, без оговорок, справедливо по отношению к любому случаю, к которому оно применимо.
Сейчас объясню!
Представим себе воду. Начнем с нуля градусов по Кельвину. Такая температура в реальности считается не достижимой. Вообразимой картины того, как будет выглядеть вода при —273,15 °C у меня лично нет. Дальше — лед (шампанское, коньки, Антарктида). Нагрев воду выше 0°C мы получаем жидкую фазу. Все понятно: пляжи, Моршинская, лишний текст. Дальше — пар: баня, облака, паровоз. Что дальше? — Плазма. Но до плазмы вода распадается на кислород и водород. Возможно, при абсолютном нуле воды тоже не станет — наверно разрушатся химические связи.
Что объединяет все эти приключения?
Первое, очевидно — присутствие воды. Второе — тепло. Но тепло — это производное от энергии. Значит объединив в правильных пропорциях воду и энергию, как абстрактные понятия, можно проехать от абсолютного нуля аж до плазмы!
Энергия — абстрактное понятие. Ничто — не абстрактное понятие.
Вещество — абстрактное понятие. Вода — производное от вещества, или, если хотите, от водорода и кислорода + реакция окисления с выделением энергии.
Современная физика считает, что само вещество — производное от «информация» + «энергия».
Помните: «в начале было Слово»?
Чем написание программ хуже сотворения Мира? Зачем косячить на этапе закладки фундамента? Ведь если в основу мироздания были заложены именно такие абстарктные идеи, что наука подтверждает, так давайте это использовать! Ну, ума и сил на такой же проект нам не хватит, но давайте посмотрим, на что может хватить.
Теперь еще немного о том, что такое «предмет науки». Это имеет отношение к абстракции. Взять, к примеру, число «1». В природе еденичных предметов не существует. Любой «единичный» предмет — совокупность других «еденичных» предметов. И так до энергии и информации. Взять, к примеру, звезды. Для чистого астронома звезда или точнее — любое небесное тело — единичный объект, который можно открыть, измерить и присвоить ему имя своей 14й любовницы или первой школьной любви. Для астро-физика звезда уже не еденичный объект. Для зоолога бык — единичный объект. Для анатома — нет. Для кулинара — и подавно нет! ))))
Любая наука возникает тогда, когда возникает ее условно-единичный объект — предмет изучения. А единица — это абстракция в чистом виде.
Еще одним, весьма существенным условием возникновения науки является наличие свободного времени. Галерный раб не может вносить вклад в науку. Между двумя гребками он не успевает подумать об абстрактном, он только успевает получить плетью по ребрам. Он не слышит «звуков небесных сфер». Все что он слышит это «раз-два», «раз-два», «раз-два», «раз-два», «раз-два», «дэд-лайн», «дэд-лайн», «дэд-лайн», «дэд-лайн», «дэд-лайн»...
Теперь вернемся к ООП. Вместо некой единицы познания нам предлагают «ноль». Сразу из нуля, происходит гипер-прыжок к конкретному объекту, но не к объекту, который представлял бы собой тот самый единичный объект науки о программировании, а... к быкам, счетам, комплектациям моделей AUDI... программисты принялись описывать абстракции из других областей знания, не имея ни собственного пресловутого единичного предмета, ни понятия об абстракции как таковом. Н-да... Это же на уровне алхимии!
Моя личная версия абстрактного единичного объекта науки о программировании стоила мне 1500 у.е. которые пришлось вернуть заказчику, по скольку все мыслимые дедлайны были пройдены. Начали, как всегда, с несчастных 20ти параметров в паре таблиц. Изменения в модель данных заказчик вносил лавинообразно, и последний вариант включал в себя более ста параметров, разбросаных по десятку таблиц со всякими хитроумными реляциями. Я хотел справиться. Мне было интересно найти такое решение, которое позволит вовсе не обращать внимания на выкрутасы заказчика и позволять ему резвиться, как он хочет. В конце концов, то, что для программиста — выкрутасы, для заказчика — сложный процесс познания, результатами которого он хочет поделиться с разработчиком. Маркетинг ведь от этого угла плясать должен? Ведь так?
Да, мне удалось создать свою версию абстракции для процесса разработки. Правда отношения с заказчиком восстановить не удалось, но не в этом дело.
Идеальным, или правильным я считал такое представление об абстракции, такой еденичный объект программирования, который позволит коду существовать отдельно, модели данных, бизнес-логике и интерфейсу — отдельно. Абстрактный код — цель. Код не должен содержать в себе ни каких элементов конкретной модели данных, конкретной бизнес-логики и конкретного интерфейса. Тогда он будет абстрактным. Тогда, создавая очередное приложение мне не нужно будет ни как изменять код. Если у меня есть 1000 заказчиков, то мне достаточно одного экземпляра кода, который можно и нужно улучшать, но не нужно менять под требования конкретного приложения создаваемого для конкретного заказчика.
Ведь ДНК строится именно так! Для любого живого существа есть лишь один набор лексем, один язык, на котором можно «написать» «Человек», «медведь», «акула», «скумбрия», «дуб», «подорожник»... И не надо выдумывать генетику каждый раз заново, когда нужен еще один «подорожник», например, со всеми его индивидуальными и видовыми признаками. ДНК + РНК — все работает! (РНК — типа такая штука, которая репродуцирует ДНК, если очень упростить).
Что вам сказать. У меня получилось. Один из результатов — я забыл SQL! Единожды написаный код обслуживает все четыре действия с базами данных: создать, изменить, извлечь, удалить запись. Работает, учитывая все реляции любых видов между данными в данной конкретной модели данных.
Остальное — так же.
Мой код абсолютно абстрактный. Из него можно строить любое приложение с любой моделью данных, с любым набором данных, менять это все хоть сто раз в час и при этом не трогать код вообще.
Абстракция — это то, что применимо к любому частному случаю. Абстрактная функция может больше, чем не абстрактная.
Решите задачу: какая функция более абстрактная?
1.
function plus ($a)
{
return $result = $a+ «3,14»;
}
2.
function plus ($a, $b)
{
return $result = $a+ $b;
}
Пустота — не абстракция!
Идеальная абстрактная функция будет делать ВСЕ! Ее одной будет достаточно! Но идеалов не существует! )))
Ищите свою модель абстракции, чтобы перестать слышать «раз-два», «раз-два», «дэд-лайн», «дэд-лайн»...
Удачи!
З.Ы.
В статье много упрощений, которые прошу оставить вне поля вашей критики, особенно, если вы спец в затронутой области знаний. В данной статье это всего-лишь иллюстрация.
Найкращі коментарі пропустити