Revise alguns conceitos de Paradigmas de Linguagens de Programação
Por Natã Melo
(nata.venancio.melo@gmail.com)
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.

Jornal PETNews - Edição: Caio Paes - Revisão: Janderson Jason e Joseana Fechine
Grupo PET Computação UFCG, 2011. All rights reserved.