데이터 기반 프로그래밍

Data-driven programming

컴퓨터 프로그래밍에서 데이터 구동 프로그래밍은 프로그램 문장이 일련의 [1]단계를 정의하기보다는 일치시킬 데이터와 필요한 처리를 설명하는 프로그래밍 패러다임입니다.데이터 중심 언어의 표준 예로는 텍스트 처리 언어 sed와 AWK[1]있습니다.여기서 데이터는 입력 스트림 내의 일련의 행(이러한 행 지향 언어라고도 함)이며 패턴 매칭은 주로 정규 표현이나 행 번호로 이루어집니다.

관련 패러다임

데이터 구동 프로그래밍은 패턴 매칭 및 결과 처리로 구조화되어 있다는 점에서 이벤트 구동 프로그래밍과 유사하며 일반적으로 다른 도메인에 적용되지만 메인 루프에 의해 구현됩니다.조건/액션 모델은 결합점(조건)에 도달하면 포인트 컷(액션)이 실행되는 애스펙트 지향 프로그래밍과도 유사합니다.유사한 패러다임이 DTrace와 같은 일부 트레이스 프레임워크에서 사용되며, 이 프레임워크에서는 조건이 충족될 때 실행되는 프로브(계장 포인트) 및 관련 액션을 나열합니다.

추상 데이터 유형 설계 방법을 객체 지향 프로그래밍에 적용하면 데이터 중심 [2]설계가 됩니다.이러한 유형의 설계는 소프트웨어 개념 중에 클래스를 정의하기 위해 객체 지향 프로그래밍에서 가끔 사용됩니다.

적용들

데이터 기반 프로그래밍은 일반적으로 필터링, 변환, 집계(컴퓨팅 통계 등) 또는 다른 프로그램을 호출하기 위해 구조화된 데이터의 스트림에 적용됩니다.일반적인 스트림에는 로그 파일, 구분 기호로 구분된 값 또는 전자 메일 메시지(특히 전자 메일 필터링용)가 포함됩니다.예를 들어, AWK 프로그램은 로그 문의 스트림을 입력으로 받아들이고, 예를 들어 모두 콘솔에 전송하고, 경고로 시작하는 것을 "WARNING" 파일에 쓰고, "ERROR"로 시작하는 행이 있는 경우 시스템 관리자에게 이메일을 보낼 수 있습니다.또한 하루에 몇 개의 경고가 기록되는지 기록할 수 있습니다.또는 딜리미터로 구분된 값의 스트림을 처리하여 각 행 또는 집약된 행(sum 또는 max 등)을 처리할 수 있습니다.전자 메일에서는 procmail과 같은 언어를 사용하여 일부 전자 메일에서 일치 조건과 수행할 작업(배달, 바운스, 폐기, 전달 등)을 지정할 수 있습니다.

AWK나 sed와 같이 튜링 완전 언어도 있고 필터링을 위해 의도적으로 매우 제한적인 언어도 있습니다.후자의 극단적인 예로는 pcap이 있습니다.이것은 필터링으로만 구성되며 유일한 액션은 "capture"입니다.체에는 필터와 액션이 있지만 기본 표준에서는 변수나 루프가 없으며 상태 비저장 필터링 문만 허용됩니다.각 입력 요소는 독립적으로 처리됩니다.변수를 사용하면 상태를 설정할 수 있습니다.이를 통해 집약(입력 요약) 또는 슬롯링(각 송신자로부터 시간당 최대 5개의 메일을 허용하거나 반복 로그 메시지를 제한함) 등 여러 입력 요소에 의존하는 작업을 수행할 수 있습니다.

데이터 구동 언어에는 기본 액션이 있는 경우가 많습니다.조건이 일치하지 않는 경우 회선 지향 언어는 행을 인쇄하거나(sed와 같이), 메시지를 전달할 수 있습니다(체와 같이).필터링등의 애플리케이션에서는, 매칭이 배타적으로 행해지는 경우가 있습니다만(따라서 최초의 매칭 스테이트먼트만), 모든 매칭 스테이트먼트가 적용되는 경우도 있습니다.어느 경우든 패턴의 매칭에 실패하면 "기본 동작"이 되거나 오류로 간주되어 마지막에 catch-all 문에 의해 포착될 수 있습니다.

장점과 문제점

구현에 따라 이점과 문제가 다를 수 있지만, 이 패러다임에는 몇 가지 큰 이점과 문제가 있습니다.기능성에서는 단순히 사용하는 변수의 추상적인 데이터 유형을 알아야 합니다.함수 및 인터페이스는 동일한 데이터 필드를 가진 모든 개체(예: 개체의 "위치")에서 사용할 수 있습니다.데이터는 선호도에 따라 개체 또는 "엔티티"로 그룹화할 수 있지만, 거의 또는 전혀 중요하지 않습니다.

데이터 중심 설계는 데이터와 기능의 결합을 방해하지만, 일부 경우에는 데이터 중심 프로그래밍이 특히 더 추상적인 데이터를 다룰 때 잘못된 객체 지향 설계를 초래한다는 주장이 제기되어 왔습니다.이는 순수하게 데이터 기반 객체 또는 엔티티가 표현 방식에 의해 정의되기 때문입니다.오브젝트의 구조를 변경하려고 하면 오브젝트에 의존하는 기능이 즉시 중단됩니다.

예를 들어, 운전 방향을 운전자가 우회전 또는 좌회전해야 하는 교차로(두 개의 교차로)로 나타낼 수 있습니다.(미국의) 교차로를 우편 번호(5자리 숫자)와 두 개의 거리 이름(텍스트 문자열)으로 데이터에 표시하면 도로가 여러 번 교차하는 도시가 발견될 때 버그가 나타날 수 있습니다.이 예는 지나치게 단순하지만 데이터 재구성은 소프트웨어 엔지니어링에서 버그를 제거하거나 효율성을 높이거나 새로운 기능을 지원하기 위해 매우 일반적인 문제입니다.

언어들

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c Stutz, Michael (September 19, 2006). "Get started with GAWK: AWK language fundamentals". developerWorks. IBM. Archived from the original on 20 May 2011. Retrieved 2010-10-23. [AWK is] often called a data-driven language -- the program statements describe the input data to match and process rather than a sequence of program steps
  2. ^ Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). "Object-oriented design: a responsibility-driven approach". Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications. New York: ACM: 71–75. doi:10.1145/74877.74885. ISBN 0897913337. S2CID 7372657.
  3. ^ Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (2017-02-03). "Lua 5.3 Reference Manual". www.lua.org. Retrieved 2018-06-05.
  4. ^ "Clojure". www.clojure.org. Retrieved 2018-06-05.

외부 링크