Всем привет! В настоящий момент изучаю книгу Роберта Мартина "Чистый код - создание, анализ и рефакторинг". (можно встретить ссылку для скачивания) В процессе прочтения книги, у меня возник вопрос, что подразумевает автор книги, когда говорит "Абстрация - зло" - https://prnt.sc/26km3q8 Такая формулировка встречается достаточно часто, например, здесь - https://prnt.sc/26km6dh Вряд ли - это подразумевает абстрактный класс. Или скорее всего абстракция в широком смысле этого слова? Жду ваших комментариев. P.S. То да Абстракция - это сущее зло!
Своими словами. Абстракция - это представление объекта реального мира, при котором учитываются только только те его стороны, которые нужны для работы программы. Например, если речь идет о турфирме, абстракция объекта Самолет не будет учитывать технических деталей, а только такие как - количество мест, время перелета и т п.
Если с интерфейсами все понятно - типы, разрешение, содержание констант. То абстракция - абстрагироваться, копировать от чего-то, на основе, правило, фундамент. Это нужно для разработчиков, которые пишут свои классы на основе "изначальной абстракции(делай что хочешь, но эти правила ты должен реализовать обязательно)". Функционала никакого не несут. Тупо вещь для проектирования.
Я бы показал это на примере, когда тебе как технарю-программисту, какой-нибудь маркетолог-гуманитарий пытается объяснить, чего он от тебя хочет. Примерно так же выглядит программирование на язках с высоким уровнем абстракции по отношению к микросхемам, которые вообще-то понимают только нуль и единицу. Но компиляторы, интерпретаторы и препроцессоры с горем пополам переводят наши объекты, итераторы и прочие замыкания на их язык. Впрочем, делают это они довольно неплохо. Проблема только в том, что программист отдаляется от железа. Понимать как в действительности работает компьютер очень важно, чтобы писать хороший код. Низкоуровневые языки заставляют в этом разбираться. На высокоуровневых приходится это изучать отдельно. А если работать с фреймворками, навязывающими свою логику, то о железе вообще некогда думать.
Еще есть такое утверждение: "Любая нетривиальная абстракция в некоторой степени дырявая". А ещё, лично моё мнение: если в программирование и есть искусство (а не наука), то оно как раз в умении к месту применять абстракции. Учитывая их ограниченность