Paradigmas de Linguagens de Programação! Relembre nesta matéria alguns paradigmas, conceitos e como eles são aplicados em algumas linguagens de programação.
Paradigmas de Linguagens de Programação começaram a ser difundidos por volta de 1975. Nesse período, já existia o paradigma de programação imperativo, que era representado por Fortran, Algol, Pascal, entre outras. A partir daí, começaram a surgir novas linguagens e, portanto, novos paradigmas. Mas o que é um paradigma de linguagem de programação? Em tese, pode ser considerado um estilo de programação suportado por linguagens que agrupam determinadas características em comum, ou seja, é um padrão de resolução de problemas que se relaciona com um determinado gênero de programas de linguagens (TUCKER, 2008).
Concentraremos a matéria em dois paradigmas: Imperativo e Funcional. No primeiro, os programas são baseados no conceito de estados (modelados por meio de variáveis) e ações (em forma de comandos) que servem para manipular os estados; exemplos de linguagens imperativas: C e Pascal . Na segunda, os programas são representados por funções que apresentam relação biunívoca entre os elementos de Entrada e os elementos de Saída; exemplos: LISP e Haskell.
main(){
int x;
for(x=1;x<100;x++)
printf("%d\n",x);
}
Trecho de código 1 - C.
(defun fatorial (n)
(if (= n 0)
1
(* n (fatorial (- n 1)))))
Trecho de código 2 - LISP.
No trecho de código 1, linha 2, tem-se a declaração da variável “x”. Na linha 3, o valor de “x” é alterado conforme a iteração do comando “for”. O trecho de código 2 apresenta código LISP, linguaguem baseada em funções e expressões (características do paradigma funcional), diferentemente de C, linguaguem que utiliza variáveis, comandos e procedimentos (características do paradigma imperativo).
Veremos como são os Sistemas de Tipos das linguagens Icon (paradigma imperativo) e ML (paradigma funcional). Para isso, devemos lembrar que uma linguagem pode ser estaticamente tipada, em que as variáveis, parâmetros e expressões possuem um tipo previamente definido pelo programador ou inferido pelo processador da linguagem. No segundo caso, em uma linguagem dinamicamente tipada, apenas os valores possuem tipos fixados. Variáveis, parâmetros e expressões podem assumir valores de diferentes tipos em qualquer parte do programa.
procedure soma_lista(argumento)
soma := 0
every i := 1 to *argumento do {
soma +:= argumento[i]
}
return soma
end
Trecho de código 3 - Icon.
No Trecho de código 3, percebe-se, nas linhas 1 e 2, que o parâmetro “argumento” e a variável “soma”, respectivamente, não possuem definição prévia de tipo. Dessa forma, Icon é uma linguagem dinamicamente tipada. ML é uma linguagem estaticamente tipada e possui seu sistema de inferência de tipos robusto, o que possibilita a declaração de tipos opcional. No Trecho de código 4, linha 1, não é declarado o tipo int dos parâmetros “n” e “f”.
0
then fatorialLoop (n – 1, f * n)
else f
Trecho de código 4 - ML.
Além disso, uma linguagem pode ser fortemente tipada, na qual a conversão de tipos geralmente não é realizada de forma implícita, ou fracamente tipada, cuja conversão é realizada de forma implícita em geral.
procedure main()
v := 4
write(v, “ -> ”, type(v))
v ||:= “: Quatro”
write(v, “ -> ”, type(v))
end
Trecho de código 5 - Icon.
No Trecho de código 5, percebe-se, na linha 2, que o valor “4” (do tipo integer) é atribuído à variável “v”. Na linha 4, o valor “: Quatro” (do tipo string) é atribuído à variável “v”. Dessa maneira, Icon se configura como uma linguagem fracamente tipada.
10 + “16”;
Trecho de código 6 – ML.
No trecho de código 6, não é possível realizar a operação descrita, e o seguinte erro é apresentado: “! Type clash: expression of type string cannot have type int”. Isso ocorre pelo fato de ML ser uma linguagem fortemente tipada.
Apenas para reforçar, uma linguagem pode ser estaticamente e fortemente tipada, estaticamente ou fracamente tipada, dinamicamente e fortemente tipada ou ainda dinamicamente e fracamente tipada.
Fontes de pesquisa:
· Notas de Aula da disciplina de PLP do prof. Franklin Ramalho;
· Apresentação sobre Icon, 2010.1 – Amaury Medeiros, José Laerte, Raquel Rolim e Raíssa Sarmento;
· Allen B. Tucker, Robert E. Noonan. Linguagens de Programação - Princípios e Paradigmas Segunda Edição - MacGraw Hill, 2008;
· Notas de Aula do prof. Artur Miguel Dias sobre ML.