Programação orientada a dados
Na programação de computadores , a programação orientada a dados é um paradigma de programação em que as instruções do programa descrevem os dados a serem combinados e o processamento necessário, em vez de definir uma sequência de etapas a serem seguidas. [1] Exemplos padrão de linguagens orientadas a dados são as linguagens de processamento de texto sed e AWK , [1] onde os dados são uma sequência de linhas em um fluxo de entrada - também conhecidas como linguagens orientadas a linhas - e correspondência de padrões é feito 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 geralmente são implementadas por um loop principal , embora normalmente sejam aplicadas a diferentes domínios. O modelo de condição/ação também é semelhante à programação orientada a aspectos , onde quando um ponto de junção (condição) é alcançado, um corte de ponto (ação) é executado. Um paradigma semelhante é usado em algumas estruturas de rastreamento , como o DTrace , onde são listadas sondas (pontos de instrumentação) e ações associadas, que são executadas quando a condição é satisfeita.
Adaptar métodos abstratos de design de tipo de dados para programação orientada a objetos resulta em um design orientado a dados. [2] Este tipo de projeto é algumas vezes usado em programação orientada a objetos para definir classes durante a concepção de um software.
Aplicativos
A programação orientada a dados é normalmente aplicada a fluxos de dados estruturados, para filtrar, transformar, agregar (como estatísticas de computação) ou chamar outros programas. Os fluxos típicos incluem arquivos de log , valores separados por delimitadores ou mensagens de e-mail, principalmente 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 WARNING em um arquivo "WARNING" e enviar um email para um administrador de sistemacaso alguma linha comece com "ERROR". 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 soma ou max. No e-mail, uma linguagem como o procmail pode especificar condições para corresponder em alguns e-mails e quais ações devem ser tomadas (entregar, devolver, descartar, encaminhar etc.).
Algumas linguagens orientadas a dados são Turing-complete , como AWK e até sed, enquanto outras são intencionalmente muito limitadas, principalmente para filtragem. Um exemplo extremo deste último é o pcap , que consiste apenas em filtrar, sendo a única ação “capturar”. Menos extremamente, sieve possui filtros e ações, mas no padrão base não possui variáveis ou loops, permitindo apenas instruções de filtragem sem estado: cada elemento de entrada é processado independentemente. As 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 (permitir no máximo 5 emails por hora de cada remetente ou limitar mensagens de log repetidas).
As linguagens orientadas a dados geralmente têm uma ação padrão: se nenhuma condição corresponder, as linguagens orientadas a linha 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 (portanto, apenas a primeira instrução de correspondência), enquanto em outros casos todas as instruções de correspondência são aplicadas. Em ambos os casos, a falha em corresponder a qualquer padrão pode ser um "comportamento padrão" ou pode ser visto como um erro, a ser detectado por uma instrução catch-all no final.
Benefícios e problemas
Embora os benefícios e os problemas possam variar entre a implementação, existem alguns grandes benefícios potenciais e problemas com esse paradigma. A funcionalidade simplesmente requer que ela conheça o tipo de dados 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. Os 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 leva 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 interromperia imediatamente as funções que dependem dele.
Como exemplo, pode-se representar as direções de direção como uma série de interseções (duas ruas que se cruzam) onde o motorista deve virar à direita ou à esquerda. Se uma interseção (nos Estados Unidos) for representada nos 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 oferecer suporte a novos recursos.
Idiomas
- AWK [1]
- Oz
- Perl – programação orientada a dados como em AWK e sed é um paradigma suportado por Perl
- sed
- Lua [3]
- Clojure [4]
- Guia (idioma)
- fdm
- correio
- procmail
- Peneira
- BÁSICO
Veja também
Referências
- ^ a b c Stutz, Michael (19 de setembro de 2006). "Introdução ao GAWK: fundamentos da linguagem AWK" . developerWorks . IBM . Arquivado a partir do original em 20 de maio de 2011 . Recuperado em 23-10-2010 .
[AWK é] frequentemente chamado de linguagem orientada a dados - as instruções do programa descrevem os dados de entrada para combinar 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 a responsabilidade". Anais da Conferência sobre Sistemas de Programação Orientada a Objetos, Linguagens e Aplicações . Nova York: ACM : 71-75. doi : 10.1145/74877.74885 . ISBN 0897913337. S2CID 7372657 .
- ^ Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (2017-02-03). "Manual de Referência Lua 5.3" . www.lua.org . Recuperado 2018-06-05 .
- ^ "Fechar" . www.clojure.org . Recuperado 2018-06-05 .