Важность абстракций и их недостатки.

Что такое абстракция?

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

Абстракция: упрощение чего-то гораздо более сложного, что происходит под прикрытием.

— Джоэл Спольски, создатель Stack Overflow.

Чтобы прояснить концепцию абстракции, мы могли бы рассмотреть следующие ситуации:

  • Мы все знаем, что на самом деле все в компьютере работает за комбинацией 1 и 0. Однако в логической схеме компьютера не существует таких понятий, как число, истина/ложь или символ. Как мы разрабатываем типы данных на языке программирования? Нам нужно определить правила того, как представлять эти понятия в компьютере. Возьмем для примера целое число. Мы определяем количество битов для представления целого числа. Вот это абстракция! Фактически, при объявлении целого числа в программировании нам не нужно знать, как целое число реализовано в компьютере. Создатель языка программирования абстрагирует 1 и 0 в компьютере, чтобы пользователь этого языка программирования мог использовать целое число, не зная, как число реализовано в компьютере.

В другой ситуации речь идет о том, как реализовать концепт человека в программе.

  • В реальном мире у человека есть много свойств, таких как цвет волос, цвет кожи, рост, вес, пол и т. д. Когда мы хотим реализовать человека в программе, мы одновременно абстрагируемся. Мы могли бы создать класс с именем Person с множеством свойств и множеством методов, которые мог бы выполнять класс person. Когда пользователь хочет создать экземпляр person, ему не нужно знать подробности о том, как реализован человек, и он может вызвать метод этого человека, чтобы выполнить множество вещей, которые человек сможет сделать. На самом деле класс person абстрагирует детали реального человека.

С существованием абстракций кажется, что программирование — это чудесный мир, и мы всегда можем взять что-то, чего мы не знаем в деталях, и использовать эти вещи для создания множества расширенных функций.

Однако это неправильно! Абстракция обычно дырявая! Мы будем производить обширные проблемы.

Что такое дырявая абстракция?

Закон дырявой абстракции:

Все нетривиальные абстракции в той или иной степени негерметичны.

— Джоэл Спольски, создатель Stack Overflow.

Дырявая абстракция говорит о дефектах абстракции. Упомянутая выше абстракция кажется идеальной и не создаст никаких проблем. Однако в абстракции всегда в той или иной степени отсутствует что-либо.

В качестве примера возьмем ситуацию с целочисленной реализацией:

  • Предположим, вы новичок в языке C и вам интересно, что получится в результате присвоения большого числа (например, 21474836470) целочисленной переменной. Оказывается, это неожиданная ошибка. Однако вы не будете знать, почему возникла эта ошибка и как ее решить, пока не узнаете некоторые детали реализации целого числа в языке C. Это вызвано дырявой абстракцией. Когда мы пытаемся что-то абстрагировать, мы не можем абстрагировать все об этом, всегда есть что-то упущенное, так что это вызовет некоторые неожиданные ошибки. Действительные числа не ограничены, поэтому мы не можем использовать ограниченные биты для представления их всех, однако мы все же можем представить их подмножество.

Таким образом, при наличии абстракции мы можем разрабатывать программы очень эффективным способом, однако у нас также возникнут некоторые расширенные проблемы, если когда-нибудь интерфейс абстракции будет нарушен. Из-за дырявой абстракции программисты обычно обрабатывают ошибки и всегда пишут тестовые коды.

Вывод

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

абстракции экономят нам время на работе, но не экономят время на обучении.

— Джоэл Спольски, создатель Stack Overflow.

Дальнейшее чтение:

Закон дырявых абстракций