Программирование, управляемое данными - Data-driven programming
Эта статья нужны дополнительные цитаты для проверка.Март 2011 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В компьютерное программирование, программирование на основе данных это парадигма программирования в котором программные операторы описывают данные, которые необходимо сопоставить, и требуемую обработку, а не определяют последовательность шагов, которые необходимо предпринять.[1] Стандартными примерами языков, управляемых данными, являются языки обработки текста. sed и AWK,[1] где данные представляют собой последовательность строк в входной поток - поэтому они также известны как строчно-ориентированные языки - и сопоставление с образцом в основном выполняется с помощью обычные выражения или номера строк.
Связанные парадигмы
Программирование, управляемое данными, похоже на событийно-ориентированное программирование, в том, что оба структурированы как сопоставление с образцом и результирующая обработка и обычно реализуются основной цикл, хотя обычно они применяются к разным доменам. Модель условие / действие также похожа на аспектно-ориентированное программирование, где когда точка соединения (условие) достигается, Pointcut (действие) выполняется. Подобная парадигма используется в некоторых отслеживание фреймворки, такие как DTrace, где перечислены зонды (точки измерения) и связанные с ними действия, которые выполняются при выполнении условия.
Адаптация абстрактный тип данных методы проектирования объектно-ориентированного программирования приводит к дизайну, основанному на данных.[2] Этот тип дизайна иногда используется в объектно-ориентированном программировании для определения классов во время создания части программного обеспечения.
Приложения
Программирование на основе данных обычно применяется к потокам структурированных данных для фильтрации, преобразования, агрегирования (например, статистики вычислений) или вызова других программ. Типичные потоки включают лог-файлы, значения, разделенные разделителями, или сообщения электронной почты, особенно для фильтрация электронной почты. Например, программа AWK может принимать в качестве входных данных поток операторов журнала и, например, отправлять все на консоль, записывать те, которые начинаются с WARNING, в файл «WARNING» и отправлять электронное письмо на адрес сисадмин в случае, если какая-либо строка начинается с «ERROR». Он также может записывать, сколько предупреждений регистрируется в день. В качестве альтернативы можно обрабатывать потоки значений, разделенных разделителями, обрабатывая каждую строку или агрегированные строки, такие как сумма или макс. В электронной почте такой язык, как procmail может указать условия, которые должны совпадать с некоторыми электронными письмами, и какие действия следует предпринять (доставить, отклонить, отклонить, переслать и т. д.).
Некоторые языки, управляемые данными Полный по Тьюрингу, например AWK и даже sed, в то время как другие намеренно сильно ограничены, особенно для фильтрации. Ярким примером последнего является pcap, который состоит только из фильтрации, единственное действие - «захват». Менее крайне, сито есть фильтры и действия, но в базовом стандарте нет переменных или циклов, разрешены только операторы фильтрации без сохранения состояния: каждый элемент ввода обрабатывается независимо. Переменные разрешают состояние, которое разрешает операции, которые зависят от более чем одного входного элемента, такие как агрегация (суммирование входных данных) или удушение (разрешить не более 5 писем в час от каждого отправителя или ограничить повторяющиеся сообщения журнала).
Языки, управляемые данными, часто имеют действие по умолчанию: если ни одно условие не соответствует, строчно-ориентированные языки могут печатать строку (как в sed) или доставлять сообщение (как в сите). В некоторых приложениях, таких как фильтрация, сопоставление может выполняться исключительно (так что только первый оператор соответствия), а в других случаях все применяются соответствующие операторы. В любом случае несоответствие любой шаблон может быть «поведением по умолчанию» или может рассматриваться как ошибка, которую в конце перехватывает универсальный оператор.
Преимущества и проблемы
Хотя преимущества и проблемы могут различаться в зависимости от реализации, у этой парадигмы есть несколько больших потенциальных преимуществ и проблем. Функциональность просто требует, чтобы он знал абстрактный тип данных переменных, с которыми он работает. Функции и интерфейсы может использоваться для всех объектов с одинаковыми полями данных, например, для «позиции» объекта. Данные могут быть сгруппированы в объекты или «сущности» в соответствии с предпочтениями практически без последствий.
Хотя дизайн, управляемый данными, действительно предотвращает объединение данных и функциональности, в некоторых случаях утверждается, что программирование, управляемое данными, приводит к плохим результатам. объектно-ориентированный дизайн, особенно при работе с более абстрактными данными. Это связано с тем, что объект или сущность, управляемые исключительно данными, определяются тем, как они представлен. Любая попытка изменить структуру объекта немедленно нарушит функции, которые на него полагаются.
В качестве примера можно представить направления движения как серию перекрестков (две пересекающиеся улицы), на которых водитель должен повернуть направо или налево. Если перекресток (в США) представлен в данных почтовый индекс (5-значное число) и два названия улиц (строки текста), ошибки могут появиться, когда в городе, где улицы пересекаться встречается несколько раз. Хотя этот пример может быть чрезмерно упрощен, реструктуризация данных - довольно распространенная проблема в разработке программного обеспечения, для устранения ошибок, повышения эффективности или поддержки новых функций.
Языки
- AWK[1]
- Унция
- Ржавчина - Было написано несколько игровых движков, таких как Bevy и Amethyst, оба управлялись данными.
- Perl - программирование, управляемое данными, как в AWK и sed, является одной из парадигм, поддерживаемых Perl
- sed
- Lua[3]
- Clojure[4]
- Вкладка (язык)
- fdm
- maildrop
- procmail
- Сито
Смотрите также
Рекомендации
- ^ а б c Штутц, Майкл (19 сентября 2006 г.). «Начало работы с GAWK: основы языка AWK». developerWorks. IBM. Архивировано из оригинал 20 мая 2011 г.. Получено 2010-10-23.
[AWK] часто называют языком, управляемым данными - операторы программы описывают входные данные для сопоставления и обработки, а не последовательность шагов программы.
- ^ Вирфс-Брок, Ребекка; Вилкерсон, Брайан (1989). «Объектно-ориентированный дизайн: ответственный подход». Материалы конференции по системам, языкам и приложениям объектно-ориентированного программирования. Нью-Йорк: ACM: 71–75. Дои:10.1145/74877.74885.
- ^ Иерусалимский, Роберто; де Фигейредо, Луис Энрике; Селес, Вальдемар (03.02.2017). "Справочное руководство по Lua 5.3". www.lua.org. Получено 2018-06-05.
- ^ "Clojure". www.clojure.org. Получено 2018-06-05.