Уровень абстракции [рассмотрения] -- что это в программировании/проектировании программных систем, приложений

Уровень абстракции [рассмотрения/проектирования] -- степень подробности рассмотрения системы.

Уточняющие определения:

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

Пример в программировании

Так например, программная система на самом верхнем уровне может состоять (можно рассматривать её как совокупность) -- например ):

  • Высокий: из нескольких модулей (общий уровень абстракции -- в нашем случае он самый абстрактный).
  • Средний: Каждый модуль из классов -- но тогда и система набор классов (здесь уже следующий уровень абстракции -- менее "абстрактный" и более приближенный к реализации).
  • Низкий: Каждый класс же состоит из методов (функций), что по сути уже технический уровень и имеет непосредственное отношение к реализации (программированию).

ПРИМЕЧАНИЕ: возможен и другой контекст, а значит, "высоким уровнем" может являться что-то другое. Как и "низким".

Для разных проблем имеют значение разные уровни абстракции. Так, младшие разработчики (да и все программисты в узком смысле слова) больше сосредотачиваются в своей повседневной практике на более конкретных задачах, а системные архитекторы решают более абстрактные задачи.

Надо понимать следующее:

  • Неграмотно написанный, медленно работающий и небезопасный код не спасёт никакая самая продуманная архитектура (нижний уровень важен для больших и малых систем)
  • Ошибка в архитектуре может быть такой, что никакой хороший код не спасёт проект при критических изменениях (скажем, при резком возрастании нагрузки) -- систему потребуется перепроектировать (что часто очень затратно) -- проблемы верхнего уровня абстракции важны особенно для больших систем.