Executando verificação de segurança...
1

Na realidade quando falo Lógica de Programação é diferente do Paradigma de Programação utilizado, na realidade, quando expressei lógica de programação é o pensamento que irá decidir entre utilizar um Paradigma ou outro em detrimento da resolução de tal problema. Ou seja, é como se a Lógica fosse a mentalidade de decisão das melhores coisas para resolução de um problema e o Paradigma é uma ou outra maneira de resolver determinado problema. Digamos assim:

Existe um problema (Problema e Domínio) -> Análiso o problema pensando nas soluções possíveis (Lógica de Programação) -> Escolho uma maneira de me expressar para resolver tal problema (Paradigma de Programação) -> Penso na maneira mais simples de representar a resolução deste problema (Pseudocódigo) -> Gero um algoritmo que será a minha implementação do pseudocódigo (Algoritmo) -> Se quiser posso pular pra implementação com linguagem formal (Linguagem de Programação).

Talvez, os passos acima estão em ordens diferentes, com algumas pequenas nuânces, mas essa é a ideia que quis expressar quando citei Lógica de Programação como fundamento.

E como disse, não sei como representar isso com outra nomenclatura mais simples, talvez Lógica Computacional, talvez Decisão Analítica, etc...

Carregando publicação patrocinada...
2

Já que o assunto é fundamentos, vamos aos fundamentos. Primeiro seria o que é programação imperativa.

Como nas referências do teu artigo tem um link Lógica de programação, por onde começar? , resolvi dar uma olhada. Ok, 13 minutos dá para deixar rolando. Tem muita coisa no vídeo que está citado no teu artigo. Mas, basicamente é o que eu escrevi: Lógica de programação para linguagens imperativas.

A primeira dica é: Nunca diga qualquer linguagem. A menos é claro, que você realmente conheça todas as linguagens e saiba do que está falando.

O primeiro exemplo de "pseudo linguagem" é um C traduzido. O segundo é um Pascal traduzido (não sei o motivo de terem trocado := por <- ; poderiam deixar apenas =). Depois mostra um código em Java. E depois Swift. Todas são imperativas, confere? É, mas Java e Swift são OO. Ok, nenhum impedimento. A receita de bolo também é um exemplo imperativo. Tem os ingredientes (ovos, farinha, etc.), os procedimentos seguindo uma ordem (misturar, bater, cozer) e servir. Troca os ingredientes por variáveis e constantes, os procedimentos pela transformação das variáveis inicias e o resultado por um relatório que é a mesma coisa. Então, um programa é apenas uma receita de bolo bem detalhada.

Depois são apresentados alguns outros conceitos (constantes, variáveis, for, while, etc.) e diz que precisa dominar estes conceitos para qualquer linguagem de programação.

Lembras do que eu escrevi ali em cima? Nunca diga isso. Existem diversas linguagens/paradigmas que o que foi ensinado não é aplicável. É possível citar APL, Prolog entre outras. Não vou colocar exemplos aqui para não sujar o tópico. Mas podes ver um exemplo neste link.

Espero ter auxiliado em alguma coisa.

1

Olá @guaracy, agora entendi! Realmente a maioria dos exemplos e a forma das explicações que trouxe aqui se referem ao paradigma imperativo e você tem razão em apontar isso, muito obrigado. Você tem sugestões de fundamentos para outros paradigmas de programação? Em Prolog por exemplo utiliza variável também? Em Lisp tem o conceito de classes também?

Acredito que essa colaboração não sujará a publicação, mas será uma das melhores contribuições para este tema, tenho certeza disso. Muito obrigado mais uma vez pelo apontamento tão importante!!!

2

De uma forma geral, as linguagens podem associar nomes a valores. Chamando de variável, associa-se ao conceito de mutabilidade.

tot = 0
for valor in lista
  tot = tot + valor

No caso acima, tot é uma variável. Em Prolog, depois de atribuir um valor para tot ele não poderá mais ser alterado dentro do escopo. Teria um comportamento parecido com o de uma constante. Já em linguagens funcionais, uma expressão do tipo a = a + 1 nem faz muito sentido. É como uma função recursiva.

Lisp é uma linguagem que pode ter quase tudo. Em Lisp tem o CLOS (implementado no SBCL). De qualquer forma, a definição de linguagem orientada a objetos pode ser meio polêmica. Se não me engano, Clojure não implementa OO. Como tem gente que não gosta de OO mesmo