Programação orientada a dados
Na programação de computadores , a programação orientada a dados é um paradigma de programação no qual as instruções do programa descrevem os dados a serem correspondidos e o processamento necessário, em vez de definir uma sequência de etapas a serem executadas. [1] Exemplos padrão de linguagens orientadas a dados são as linguagens de processamento de texto sed e AWK , [1] e a linguagem de transformação de documentos XSLT , onde os dados são uma sequência de linhas em um fluxo de entrada – essas também são conhecidas como linguagens orientadas a linhas – e a correspondência de padrões é feita principalmente por meio de expressões regulares ou números de linha.
Paradigmas relacionados
A programação orientada a dados é semelhante à programação orientada a eventos , pois ambas são estruturadas como correspondência de padrões e processamento resultante, e são geralmente implementadas por um loop principal , embora sejam tipicamente aplicadas a domínios diferentes. O modelo de condição/ação também é semelhante à programação orientada a aspectos , onde quando um ponto de junção (condição) é atingido, um pointcut (ação) é executado. Um paradigma semelhante é usado em algumas estruturas de rastreamento , como DTrace , onde se listam sondas (pontos de instrumentação) e ações associadas, que são executadas quando a condição é satisfeita.
A adaptação de métodos de design de tipos de dados abstratos à programação orientada a objetos resulta em um design baseado em dados. [2] Este tipo de design é algumas vezes usado na programação orientada a objetos para definir classes durante a concepção de um software.
Aplicações
A programação orientada a dados é normalmente aplicada a fluxos de dados estruturados, para filtragem, transformação, agregação (como estatísticas de computação) ou chamada de outros programas. Fluxos típicos incluem arquivos de log , valores separados por delimitadores ou mensagens de e-mail, notavelmente para filtragem de e-mail . Por exemplo, um programa AWK pode receber como entrada um fluxo de instruções de log e, por exemplo, enviar todas para o console, escrever aquelas que começam com AVISO em um arquivo "AVISO" e enviar um e-mail para um administrador de sistema caso qualquer linha comece com "ERRO". Ele também pode registrar quantos avisos são registrados por dia. Alternativamente, pode-se processar fluxos de valores separados por delimitadores, processando cada linha ou linhas agregadas, como a soma ou o máximo. Em e-mail, uma linguagem como procmail pode especificar condições para corresponder em alguns e-mails e quais ações tomar (entregar, rejeitar, descartar, encaminhar, etc.).
Algumas linguagens orientadas a dados são Turing-complete , como AWK e até mesmo sed, enquanto outras são intencionalmente muito limitadas, notavelmente para filtragem. Um exemplo extremo do último é pcap , que consiste apenas em filtragem, com a única ação sendo "captura". Menos extremamente, sieve tem filtros e ações, mas no padrão base não tem variáveis ou loops, permitindo apenas instruções de filtragem sem estado: cada elemento de entrada é processado independentemente. Variáveis permitem estado, que permitem operações que dependem de mais de um elemento de entrada, como agregação (soma de entradas) ou limitação (permite no máximo 5 e-mails por hora de cada remetente ou limita mensagens de log repetidas).
Linguagens orientadas a dados frequentemente têm uma ação padrão: se nenhuma condição corresponder, linguagens orientadas a linhas podem imprimir a linha (como em sed), ou entregar uma mensagem (como em sieve). Em algumas aplicações, como filtragem, a correspondência pode ser feita exclusivamente (então apenas a primeira declaração correspondente), enquanto em outros casos todas as declarações correspondentes são aplicadas. Em ambos os casos, a falha em corresponder a qualquer padrão pode ser "comportamento padrão" ou pode ser vista como um erro, a ser capturado por uma declaração catch-all no final.
Benefícios e problemas
Embora os benefícios e problemas possam variar entre implementações, há alguns grandes benefícios e problemas potenciais com esse paradigma. A funcionalidade simplesmente requer que ela saiba o tipo de dado abstrato das variáveis com as quais está trabalhando. Funções e interfaces podem ser usadas em todos os objetos com os mesmos campos de dados, por exemplo, a "posição" do objeto. Dados podem ser agrupados em objetos ou "entidades" de acordo com a preferência com pouca ou nenhuma consequência.
Embora o design orientado a dados impeça o acoplamento de dados e funcionalidade, em alguns casos, a programação orientada a dados tem sido argumentada como levando a um design orientado a objetos ruim , especialmente ao lidar com dados mais abstratos. Isso ocorre porque um objeto ou entidade puramente orientado a dados é definido pela maneira como é representado . Qualquer tentativa de alterar a estrutura do objeto quebraria imediatamente as funções que dependem dele.
Como exemplo, pode-se representar as direções de direção como uma série de cruzamentos (duas ruas que se cruzam) onde o motorista deve virar à direita ou à esquerda. Se um cruzamento (nos Estados Unidos) for representado em dados pelo código postal (número de 5 dígitos) e dois nomes de ruas (sequências de texto), bugs podem aparecer quando uma cidade onde as ruas se cruzam várias vezes for encontrada. Embora este exemplo possa ser simplificado demais, a reestruturação de dados é um problema bastante comum na engenharia de software, seja para eliminar bugs, aumentar a eficiência ou dar suporte a novos recursos.
Idiomas
- AWK [1]
- BÁSICO
- Clojure [3]
- fdm
- Lua [4]
- caixa postal
- Onça
- Perl – programação orientada a dados como em AWK e sed é um paradigma suportado por Perl
- correio eletrônico
- Raku - O Raku possui gramáticas (e regexes) integradas e, portanto, oferece suporte à programação orientada a dados
- REBOL, uma linguagem Redbol
- Vermelho, uma linguagem Redbol
- Ren-C, uma linguagem Redbol
- sentado
- Peneira
- Guia (idioma)
- XSLT
Veja também
Referências
- ^ abc Stutz, Michael (19 de setembro de 2006). "Comece com GAWK: fundamentos da linguagem AWK". developerWorks . IBM . Arquivado do original em 20 de maio de 2011 . Recuperado em 23/10/2010 .
[AWK é] frequentemente chamada de linguagem orientada a dados -- as instruções do programa descrevem os dados de entrada para corresponder e processar em vez de uma sequência de etapas do programa
- ^ Wirfs-Brock, Rebecca ; Wilkerson, Brian (1989). "Design orientado a objetos: Uma abordagem orientada à responsabilidade". Anais de conferência sobre sistemas de programação orientados a objetos, linguagens e aplicações - OOPSLA '89 . Nova York: ACM . pp. 71–75. doi :10.1145/74877.74885. ISBN 0897913337. S2CID 7372657.
- ^ "Clojure". www.clojure.org . Recuperado em 2018-06-05 .
- ^ Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (03/02/2017). "Manual de Referência Lua 5.3" . www.lua.org . Recuperado em 05/06/2018 .
Links externos
- "A parte importante é mover a lógica do programa das estruturas de controle fixas para os dados."