Принцип абстракции (компьютерное программирование) - Abstraction principle (computer programming)
В программная инженерия и теория языков программирования, то принцип абстракции (или принцип абстракции) является основным изречение который направлен на сокращение дублирования информации в программе (обычно с упором на дублирование кода ) по возможности, используя абстракции предоставляется языком программирования или программные библиотеки[нужна цитата ]. Этот принцип иногда формулируется как рекомендация для программиста, но иногда указывается как требование языка программирования, предполагая, что он сам понимает, почему желательно использовать абстракции. Истоки этого принципа неясны; его несколько раз изобретали заново, иногда под другим названием, с небольшими вариациями.
Если рассматривать этот принцип как рекомендацию программисту, его можно обобщить как "не повторяйся "принцип, который рекомендует избегать дублирования информации в целом, а также избегать дублирования человеческих усилий, задействованных в процессе разработки программного обеспечения.
Принцип
В качестве рекомендации программисту в его формулировке Бенджамин С. Пирс в Типы и языки программирования (2002), принцип абстракции гласит (курсив в оригинале):[1]
Каждая значимая часть функциональности в программе должна быть реализована только в одном месте исходного кода. Если аналогичные функции выполняются отдельными частями кода, обычно полезно объединить их в одну абстрагирование различные части.
Как требование языка программирования, в его формулировке Дэвидом А. Шмидтом в Структура типизированных языков программирования (1994) принцип абстракции гласит:[2]
Могут быть названы фразы любого семантически значимого синтаксического класса.
История и вариации
Именно под этим названием принцип абстракции фигурирует в длинном списке книг. Здесь мы приводим обязательно неполный список вместе с формулировкой, если она краткая:
- Альфред Джон Коул, Рональд Моррисон (1982) Введение в программирование с помощью S-algol: «[Абстракция] в применении к языковому дизайну означает определение всех семантически значимых синтаксических категорий в языке и допускает абстракцию над ними».[3]
- Брюс Дж. Макленнан (1983) Принципы языков программирования: проектирование, оценка и реализация: «Не требуйте, чтобы что-то говорилось более одного раза; исключите повторяющийся шаблон».[4]
- Джон Пирс (1998) Программирование и метапрограммирование на схеме: «Структура и функции должны быть независимыми».[5]
Принцип играет центральную роль в шаблоны проектирования в объектно-ориентированного программирования, хотя в большинстве работ по этой теме этот принцип не упоминается. В влиятельная книга Банды четырех, говорится: "В центре внимания инкапсуляция концепция, которая меняется, тема многих шаблонов проектирования ». Это утверждение было перефразировано другими авторами как« Найдите то, что меняется, и инкапсулируйте это ».[6]
В этом веке принцип был заново изобретен в экстремальное программирование под лозунгом «Один раз и только один раз». Определение этого принципа при первом появлении было довольно кратким: «нет повторяющегося кода».[7] Позже он был разработан для применения к другим вопросам в разработке программного обеспечения: «Автоматизируйте каждый процесс, который стоит автоматизировать. Если вы обнаружите, что выполняете задачу много раз, запишите ее».[8]
Подразумеваемое
Принцип абстракции часто формулируется в контексте некоторого механизма, предназначенного для облегчения абстракции. Базовым механизмом абстракции управления является функция или подпрограмма. Абстракции данных включают различные формы полиморфизм типов. Более сложные механизмы, которые могут объединять абстракции данных и элементов управления, включают: абстрактные типы данных, включая классы, политипизм и т. д. Стремление к более богатым абстракциям, которые допускают меньшее дублирование в сложных сценариях, является одной из движущих сил в исследованиях и проектировании языков программирования.
У неопытных программистов может возникнуть соблазн ввести слишком много абстракции в свою программу - абстракцию, которая не будет использоваться более одного раза.[нужна цитата ] Дополнительный принцип, подчеркивающий эту проблему: "Тебе это не понадобится "и, в более общем плане, Принцип KISS.
Поскольку код обычно подвергается изменениям, следование принципу абстракции может повлечь рефакторинг кода. Усилия по переписыванию фрагмента кода в общем случае должны быть амортизированы за счет предполагаемых будущих выгод от абстракции. Эмпирическое правило, регулирующее это, было разработано Мартин Фаулер, и популяризируется как правило трех. В нем говорится, что если фрагмент кода копируется более двух раз, то есть у него будет три или более копий, то его необходимо абстрагировать.
Обобщения
"Не повторяйся ", или" принцип DRY ", является обобщением, разработанным в контексте многоуровневые архитектуры, где связанный код по необходимости дублируется в некоторой степени на разных уровнях, обычно на разных языках. С практической точки зрения рекомендуется полагаться на автоматизированные инструменты, такие как генераторы кода и преобразования данных чтобы избежать повторения.[нужна цитата ]
Интерфейсы аппаратного программирования
Помимо оптимизации кода, иерархическое / рекурсивное значение уровня абстракции в программировании также относится к интерфейсам между уровнями аппаратной связи, также называемыми «уровнями абстракции» и «уровнями абстракции». В этом случае уровень абстракции часто является синонимом интерфейса. Например, при изучении шелл-кода и интерфейса между языками более высокого и низкого уровня уровень абстракции изменяется от команд операционной системы (например, в C) до вызовов и команд уровня регистрации и схемы (например, в ассемблере и двоичном коде). В случае этого примера границей или интерфейсом между уровнями абстракции является стек.[9]
Рекомендации
- ^ Пирс, Бенджамин (2002). Типы и языки программирования. MIT Press. п. 339. ISBN 0-262-16209-1.
- ^ Дэвид А. Шмидт, Структура типизированных языков программирования, MIT Press, 1994, ISBN 0-262-19349-3, п. 32
- ^ Альфред Джон Коул, Рональд Моррисон, Введение в программирование с помощью S-algol, Архив Кубка, 1982, ISBN 0-521-25001-3, п. 150
- ^ Брюс Дж. МакЛеннан, Принципы языков программирования: проектирование, оценка и реализация, Холт, Райнхарт и Уинстон, 1983, стр. 53
- ^ Джон Пирс, Программирование и метапрограммирование в схеме, Birkhäuser, 1998, ISBN 0-387-98320-1, п. 40
- ^ Алан Шеллоуэй, Джеймс Тротт, Объяснение шаблонов проектирования: новый взгляд на объектно-ориентированный дизайн, Аддисон-Уэсли, 2002 г., ISBN 0-201-71594-5, п. 115
- ^ Кент Бек, Объяснение экстремального программирования: примите изменения, 2-е издание, Addison-Wesley, 2000 г., ISBN 0-201-61641-6, п. 61
- ^ Хроматический, Карманное руководство по экстремальному программированию, О'Рейли, 2003, ISBN 0-596-00485-0
- ^ Козиол, Справочник шеллкодеров », Wiley, 2004, стр. 10, ISBN 0-7645-4468-3