stringtranslate.com

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

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

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

Принцип

В качестве рекомендации программисту, сформулированный Бенджамином К. Пирсом в книге «Типы и языки программирования» (2002), принцип абстракции гласит (выделено в оригинале): [2]

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

В качестве требования к языку программирования, сформулированного Дэвидом А. Шмидтом в книге « Структура типизированных языков программирования» (1994), принцип абстракции гласит: [3]

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

История и вариации

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

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

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

Подразумеваемое

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

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

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

Обобщения

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

Интерфейсы аппаратного программирования

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

Рекомендации

  1. ^ Мишра, Джибитеш (2011). Программная инженерия. Пирсон Образовательная Индия. ISBN 978-81-317-5869-4.
  2. ^ Пирс, Бенджамин (2002). Типы и языки программирования . МТИ Пресс. п. 339. ИСБН 0-262-16209-1.
  3. ^ Дэвид А. Шмидт, Структура типизированных языков программирования , MIT Press, 1994, ISBN 0-262-19349-3 , стр. 32 
  4. ^ Альфред Джон Коул, Рональд Моррисон, Введение в программирование с помощью S-algol , Архив CUP, 1982, ISBN 0-521-25001-3 , стр. 150 
  5. ^ Брюс Дж. МакЛеннан, Принципы языков программирования: проектирование, оценка и реализация , Холт, Райнхарт и Уинстон, 1983, с. 53
  6. ^ Джон Пирс, Программирование и метапрограммирование в схеме , Биркхойзер, 1998, ISBN 0-387-98320-1 , стр. 40 
  7. ^ Алан Шеллоуэй, Джеймс Тротт, Объяснение шаблонов проектирования: новый взгляд на объектно-ориентированное проектирование , Аддисон-Уэсли, 2002, ISBN 0-201-71594-5 , стр. 115 
  8. ^ Кент Бек, Объяснение экстремального программирования: примите перемены , 2-е издание, Аддисон-Уэсли, 2000, ISBN 0-201-61641-6 , стр. 61 
  9. ^ Хроматический, Карманный справочник по экстремальному программированию , О'Рейли, 2003, ISBN 0-596-00485-0 
  10. ^ Козиол, Справочник шеллкодеров» , Wiley, 2004, стр. 10, ISBN 0-7645-4468-3