Respostas:
Existem vários subparadigmas do paradigma de programação imperativa, como os paradigmas de programação procedural ou orientada a objetos.
No paradigma de programação imperativo, você descreve o algoritmo passo a passo, em vários graus de abstração.
Exemplos de linguagens de programação que suportam o paradigma procedural:
Normalmente se refere a linguagens que exibem uma hierarquia de tipos que herdam os métodos e o estado dos tipos de base para os tipos derivados, mas também inclui o incomum JavaScript baseado em protótipo.
Exemplos de linguagens de programação que suportam o paradigma OO:
Existem vários subparadigmas do paradigma de programação declarativa, como os paradigmas de programação funcional ou lógico.
No paradigma de programação declarativa, você descreve um resultado ou objetivo e o obtém por meio de uma " caixa preta ". O oposto de imperativo.
Exemplos de linguagens de programação que suportam o paradigma de programação declarativa:
A programação funcional enfatiza a aplicação de funções sem efeitos colaterais e sem estado mutável. Os sistemas declarativos acima exibem certos aspectos da programação funcional.
Exemplos de linguagens de programação que suportam o paradigma funcional declarativo:
Programação declarativa é onde você diz o que quer sem ter que dizer como fazer. Com a programação procedural, você deve especificar as etapas exatas para obter o resultado.
Por exemplo, SQL é mais declarativo do que procedural, porque as consultas não especificam etapas para produzir o resultado.
Deixe-me dar um exemplo do mundo real: eu preciso de uma xícara de chá.
Processual:
Declarativo:
Em uma linguagem procedural, você define todo o processo e fornece as etapas de como fazê-lo. Você apenas fornece pedidos e define como o processo será atendido.
Em uma linguagem declarativa, basta definir o comando ou pedido e deixar que fique no sistema como concluir esse pedido. Você só precisa do resultado, sem se aprofundar em como deve ser feito.
Programação processual:
Na programação procedural, quando o programa é iniciado, ele segue um conjunto de instruções. As instruções podem mudar com base em algum arquivo ou conteúdo da memória, mas, no geral, não variam muito. a entrada para o programa normalmente não vem da entrada do usuário em tempo real, mas sim de um conjunto de dados pré-reunido.
Programação Declarativa:
Em eventos declarativos, a programação orientada centraliza-se em torno de um corpo de dados com ações opcionais que o programa pode realizar. Por exemplo, cada "evento" em um processador de texto é qualquer alteração no mouse ou teclado (ou arquivo) que afeta os dados, o (s) documento (s). Eles não precisam ser executados em qualquer ordem. A programação orientada a eventos assume a forma de pequenos programas (manipuladores de eventos) que trabalham todos em um conjunto comum de dados, de modo que cada pequeno programa pode usar os mesmos dados, o documento neste exemplo.
A principal diferença entre duas linguagens de programação são: na programação procedural, dizemos ao computador como resolver o problema e na programação declarativa, informamos ao computador qual problema queremos resolver.
Para abordar o comentário ansible e talvez fornecer um exemplo entre as diferenças dos dois. Ansible é procedural onde algo como fantoche ou terraforma são declarativos. Por exemplo, você cria um arquivo yaml ansible para implantar 10 instâncias ec2 como este:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro
Se você executasse esse arquivo duas vezes, acabaria com 20 instâncias t2.micro ec2. Se você escrever o equivalente em uma linguagem declarativa como o terraform e executá-lo duas vezes, você terá apenas 10 instâncias t2.micro em execução, não importa quantas vezes você execute. As linguagens declarativas especificam o estado final. As linguagens procedurais apenas fazem o que você diz, sem levar em conta o estado atual ou passado.
Então YAML é uma linguagem de programação declarativa? Porque definimos o que queremos em vez de escrever a lógica real.
Estou perguntando isso porque se alguém conhece o Ansible, que é uma ferramenta de gerenciamento de configuração, ele usa YAML, mas ainda se enquadra na categoria de linguagem procedural.
Na abordagem procedural, você codifica sua instrução para obter o resultado. Na abordagem declarativa, você define o que precisa ser resolvido como o conhecimento de como resolver o problema. Dê uma olhada no exemplo de abordagem processual ou declarativa que implementei em ambas as abordagens.
Como você veria no exemplo, na abordagem declarativa, você não precisa instruir COMO resolver o problema.