stringtranslate.com

Программирование на основе данных

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

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

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

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

Приложения

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

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

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

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

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

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

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

Языки

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

Ссылки

  1. ^ abc Stutz, Michael (19 сентября 2006 г.). "Начнем с GAWK: основы языка AWK". developerWorks . IBM . Архивировано из оригинала 20 мая 2011 г. . Получено 2010-10-23 . [AWK] часто называют языком, управляемым данными — операторы программы описывают входные данные для сопоставления и обработки, а не последовательность шагов программы.
  2. ^ Wirfs-Brock, Rebecca ; Wilkerson, Brian (1989). "Объектно-ориентированное проектирование: подход, основанный на ответственности". Труды конференции по объектно-ориентированным системам программирования, языкам и приложениям - OOPSLA '89 . Нью-Йорк: ACM . стр. 71–75. doi :10.1145/74877.74885. ISBN 0897913337. S2CID  7372657.
  3. ^ "Clojure". www.clojure.org . Получено 2018-06-05 .
  4. ^ Иерусалимский, Роберто; де Фигейредо, Луис Энрике; Селес, Вальдемар (3 февраля 2017 г.). «Справочное руководство по Lua 5.3». www.lua.org . Проверено 5 июня 2018 г.

Внешние ссылки