Программирование, управляемое данными - Data-driven programming

В компьютерное программирование, программирование на основе данных это парадигма программирования в котором программные операторы описывают данные, которые необходимо сопоставить, и требуемую обработку, а не определяют последовательность шагов, которые необходимо предпринять.[1] Стандартными примерами языков, управляемых данными, являются языки обработки текста. sed и AWK,[1] где данные представляют собой последовательность строк в входной поток - поэтому они также известны как строчно-ориентированные языки - и сопоставление с образцом в основном выполняется с помощью обычные выражения или номера строк.

Связанные парадигмы

Программирование, управляемое данными, похоже на событийно-ориентированное программирование, в том, что оба структурированы как сопоставление с образцом и результирующая обработка и обычно реализуются основной цикл, хотя обычно они применяются к разным доменам. Модель условие / действие также похожа на аспектно-ориентированное программирование, где когда точка соединения (условие) достигается, Pointcut (действие) выполняется. Подобная парадигма используется в некоторых отслеживание фреймворки, такие как DTrace, где перечислены зонды (точки измерения) и связанные с ними действия, которые выполняются при выполнении условия.

Адаптация абстрактный тип данных методы проектирования объектно-ориентированного программирования приводит к дизайну, основанному на данных.[2] Этот тип дизайна иногда используется в объектно-ориентированном программировании для определения классов во время создания части программного обеспечения.

Приложения

Программирование на основе данных обычно применяется к потокам структурированных данных для фильтрации, преобразования, агрегирования (например, статистики вычислений) или вызова других программ. Типичные потоки включают лог-файлы, значения, разделенные разделителями, или сообщения электронной почты, особенно для фильтрация электронной почты. Например, программа AWK может принимать в качестве входных данных поток операторов журнала и, например, отправлять все на консоль, записывать те, которые начинаются с WARNING, в файл «WARNING» и отправлять электронное письмо на адрес сисадмин в случае, если какая-либо строка начинается с «ERROR». Он также может записывать, сколько предупреждений регистрируется в день. В качестве альтернативы можно обрабатывать потоки значений, разделенных разделителями, обрабатывая каждую строку или агрегированные строки, такие как сумма или макс. В электронной почте такой язык, как procmail может указать условия, которые должны совпадать с некоторыми электронными письмами, и какие действия следует предпринять (доставить, отклонить, отклонить, переслать и т. д.).

Некоторые языки, управляемые данными Полный по Тьюрингу, например AWK и даже sed, в то время как другие намеренно сильно ограничены, особенно для фильтрации. Ярким примером последнего является pcap, который состоит только из фильтрации, единственное действие - «захват». Менее крайне, сито есть фильтры и действия, но в базовом стандарте нет переменных или циклов, разрешены только операторы фильтрации без сохранения состояния: каждый элемент ввода обрабатывается независимо. Переменные разрешают состояние, которое разрешает операции, которые зависят от более чем одного входного элемента, такие как агрегация (суммирование входных данных) или удушение (разрешить не более 5 писем в час от каждого отправителя или ограничить повторяющиеся сообщения журнала).

Языки, управляемые данными, часто имеют действие по умолчанию: если ни одно условие не соответствует, строчно-ориентированные языки могут печатать строку (как в sed) или доставлять сообщение (как в сите). В некоторых приложениях, таких как фильтрация, сопоставление может выполняться исключительно (так что только первый оператор соответствия), а в других случаях все применяются соответствующие операторы. В любом случае несоответствие любой шаблон может быть «поведением по умолчанию» или может рассматриваться как ошибка, которую в конце перехватывает универсальный оператор.

Преимущества и проблемы

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

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

В качестве примера можно представить направления движения как серию перекрестков (две пересекающиеся улицы), на которых водитель должен повернуть направо или налево. Если перекресток (в США) представлен в данных почтовый индекс (5-значное число) и два названия улиц (строки текста), ошибки могут появиться, когда в городе, где улицы пересекаться встречается несколько раз. Хотя этот пример может быть чрезмерно упрощен, реструктуризация данных - довольно распространенная проблема в разработке программного обеспечения, для устранения ошибок, повышения эффективности или поддержки новых функций.

Языки

Смотрите также

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

  1. ^ а б c Штутц, Майкл (19 сентября 2006 г.). «Начало работы с GAWK: основы языка AWK». developerWorks. IBM. Архивировано из оригинал 20 мая 2011 г.. Получено 2010-10-23. [AWK] часто называют языком, управляемым данными - операторы программы описывают входные данные для сопоставления и обработки, а не последовательность шагов программы.
  2. ^ Вирфс-Брок, Ребекка; Вилкерсон, Брайан (1989). «Объектно-ориентированный дизайн: ответственный подход». Материалы конференции по системам, языкам и приложениям объектно-ориентированного программирования. Нью-Йорк: ACM: 71–75. Дои:10.1145/74877.74885.
  3. ^ Иерусалимский, Роберто; де Фигейредо, Луис Энрике; Селес, Вальдемар (03.02.2017). "Справочное руководство по Lua 5.3". www.lua.org. Получено 2018-06-05.
  4. ^ "Clojure". www.clojure.org. Получено 2018-06-05.

внешняя ссылка