Принцип абстракции (компьютер программирование)

редактировать

В программной инженерии и теории языков программирования используется принцип абстракции( или принцип абстракции) является базовым изречением, которое направлено на уменьшение дублирования информации в программе (обычно с акцентом на дублирование кода ), когда это возможно, путем выполнения использование абстракций, предоставляемых языком программирования, или программных библиотек. Этот принцип иногда формулируется как рекомендация для программиста, но иногда указывается как требование языка программирования, предполагая, что он сам понимает, почему желательно использовать абстракции. Истоки этого принципа неясны; его несколько раз изобретали заново, иногда под другим названием, с небольшими вариациями.

При чтении в качестве рекомендации программисту принцип абстракции можно обобщить как принцип «не повторяйся », который рекомендует избегать дублирования информации в целом, а также избегать дублирование человеческих усилий, вовлеченных в процесс разработки программного обеспечения.

Содержание

  • 1 Принцип
  • 2 История и варианты
  • 3 Значение
  • 4 Обобщения
  • 5 Интерфейсы аппаратного программирования
  • 6 Ссылки

Принцип

В качестве рекомендации программисту в формулировке Бенджамина С. Пирса в Типы и языки программирования (2002) принцип абстракции читается (курсив в оригинале):

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

Как требование языка программирования, в его формулировке Дэвидом А. Шмидтом в структуре для типизированных языков программирования (1994) принцип абстракции гласит:

Фразы любого семантически значимого синтаксического класса могут быть названы.

История и варианты

Под этим самым названием появляется принцип абстракции в длинный список книг. Здесь мы даем обязательно неполный список вместе с формулировкой, если она краткая:

  • Альфред Джон Коул, Рональд Моррисон (1982) Введение в программирование с помощью S-algol: «[Абстракция] применительно к языковому дизайну означает определение все семантически значимые синтаксические категории в языке и допускают абстракцию над ними ».
  • Брюс Дж. МакЛеннан (1983) Принципы языков программирования: проектирование, оценка и реализация:« Избегайте необходимости указывать что-то большее. более одного раза; исключить повторяющийся шаблон ».
  • Джон Пирс (1998) Программирование и метапрограммирование в схеме:« Структура и функция должны быть независимыми ».

Принцип играет центральную роль в шаблоны проектирования в объектно-ориентированном программировании, хотя большинство работ по этой теме не дают названия этому принципу. В влиятельной книге «Банды четырех» говорится: «Основное внимание здесь уделяется инкапсуляции концепции, которая меняется, являющейся темой многих шаблонов проектирования». Это утверждение было перефразировано другими авторами как «Найди то, что меняется, и инкапсулируй это».

В этом веке этот принцип был заново изобретен в экстремальном программировании под лозунгом «Один раз и только один раз». ". Определение этого принципа при первом появлении было довольно кратким: «нет повторяющегося кода». Позже это было разработано применительно к другим вопросам разработки программного обеспечения: «Автоматизируйте каждый процесс, который стоит автоматизировать. Если вы обнаружите, что выполняете задачу много раз, запишите ее».

Последствия

Принцип абстракции часто формулируется в контексте некоторого механизма, предназначенного для облегчения абстракции. Базовым механизмом абстракции управления является функция или подпрограмма. Абстракции данных включают различные формы полиморфизма типа . Более сложные механизмы, которые могут объединять абстракции данных и элементов управления, включают: абстрактные типы данных, включая классы, политипизм и т. Д. Стремление к более богатым абстракциям, которые допускают меньшее дублирование в сложных сценариях, является одной из движущих сил в исследованиях и проектировании языков программирования.

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

Поскольку код обычно подлежит пересмотру, следование принципу абстракции может влекут за собой рефакторинг кода. Усилия по переписыванию фрагмента кода в общем случае должны быть амортизированы за счет предполагаемых будущих выгод от абстракции. Эмпирическое правило, регулирующее это, было разработано Мартином Фаулером и популяризировано как правило трех. В нем говорится, что если фрагмент кода копируется более двух раз, т.е. у него будет три или более копий, то его необходимо абстрагировать.

Обобщения

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

Аппаратные программные интерфейсы

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

Ссылки

Последняя правка сделана 2021-06-08 19:47:15
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте