23
#PDS Prof. Natanael Simões facebook.com/natanaelsimoes Desenvolvimento: Programação Linguagens Imperativas x Declarativas @natanaelsimoes [email protected] steamcommunity.com/id/natanaesimoes

Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas

Embed Size (px)

DESCRIPTION

Esta aula tem como objetivo mostrar como se diferem estruturalmente as linguagens imperativas das linguagens declarativas e como identificar suas características básicas

Citation preview

#PDS

Prof. Natanael Simões

facebook.com/natanaelsimoes

Desenvolvimento: ProgramaçãoLinguagens Imperativas x Declarativas

@natanaelsimoes

[email protected]

steamcommunity.com/id/natanaesimoes

•Compreender linguagens imperativas e declarativas e suas diferenças estruturais

Objetivo

• Imperativas por denotar ORDEM

• Fundamentado na máquina de Turing e Von Neuman (arquitetura dos computadores)

•Possui as seguintes características básicas:• Descrição de estados

// variáveis• Reconhecedores de estados

// expressões• Comandos de atribuição e controle

// manipulam o estado

Linguagens Imperativas

Exemplo de programação imperativa em linguagem natural

SE [condição] FAÇA // if-then-else

ISSO AQUI

SENÃO FAÇA

ISSO AQUI

PARA [VALOR INICIAL] ATÉ [VALOR FINAL] FAÇA // for

ISSO AQUI

PARA CADA [ITEM NO VETOR] FAÇA // foreach

ISSO AQUI

ENQUANTO [condição] FAÇA // while

ISSO AQUI

Linguagens Imperativas

Exemplo de programação imperativa em BASIC (FRANGO, 2009)

10 REM RESOLVE EQUACAO DO SEGUNDO GRAU

20 READ A,B,C

25 IF A=0 THEN GOTO 410

30 LET D = B * B - 4 * A * C

40 IF D < 0 THEN GOTO 430

50 PRINT "SOLUCAO"

60 IF D = 0 THEN GOTO 100

70 PRINT "PRIMEIRA SOLUCAO", (-B + SQR(D))/(2*A)

80 PRINT "SEGUNDA SOLUCAO", (-B - SQR(D))/(2*A)

90 GOTO 20

100 PRINT "SOLUCAO UNICA"

200 GOTO 20

410 PRINT "A DEVE SER DIFERENTE DE ZERO"

420 GOTO 20

430 PRINT "NAO HA SOLUCOES REAIS"

440 GOTO 20

490 DATA 10,20,1241,123,22,-1

500 END

Linguagens Imperativas

Linguagens Imperativas

Entrada Processo Saída

Estado

• Elementos obrigatórios:• Expressões e atribuições• Estruturas de controle de fluxo• Definição de sub-rotinas

Linguagens Imperativas

•Vantagens• Eficiente• Modelo é uma abstração do mundo

•Desvantagens• Difícil de ler• Difícil de interpretar• Foca COMO se deve fazer e não O QUE

Linguagens Imperativas

•Como se guarda o estado de uma variável?

Int32 numero = 2;

Linguagens Imperativas

l-value r-value

Exemplo de l-value: 0x9FFF

•O que acontece quando declaramos uma variável?•Reserva do espaço em memória l-value• *Restringe o tipo de valor que l-value pode receber• *Restringe o tipo de operação em que l-value pode se

envolver

*apenas em linguagens fortemente tipadas

Linguagens Imperativas

•O que acontece quando atribuímos valor a uma variável?• A (target) = B (expression)

Sobrescreve a localização identificada por A com o valor da expressão B

• X = X + 1“Pegue o r-value de X, adicione 1, armazene o resultado no l-value de X”

(FRANGO, 2009)

Linguagens Imperativas

•Ponteiros: referências de endereço de memória• Seu r-value é o l-value da variável• X retorna o r-value da memória (ex.: 2)• &X retorna o l-value da memória (ex.: 0x9FFF)• Vamos testar isso?

Linguagens Imperativas

• Sub-rotinas (funções e procedimentos)• Possuem l-value que é o retorno da função• Possuem r-value que são blocos de código• Contêm variáveis LOCAIS e instruções• Pode ser referenciado e sobrecarregado• Argumentos podem ser passados ao escopo

Linguagens Imperativas

•Ao invés de especificar COMO fazer, diz ao computador O QUE precisa ser feito

•O computador decide a melhor forma

•Não são consideradas linguagens de programação:• XML• SQL• ...

Linguagens Declarativas

•No paradigma lógico:• Descreve as propriedades da solução desejada• Programador escreve definições que permitam a dedução da

solução através de proposições• Proposições lógicas formam uma base de fatos conhecidos• Regras que definem como deduzir novas proposições a partir da base

• Consultas são realizadas na base

Linguagens Declarativas

•No paradigma lógico (exemplo):• Proposição (fato): Pidgey é uma ave.• Regra de inferência: Toda ave é um pokémon• Consulta: Pidgey é um pokémon?• Resposta: Sim

Linguagens Declarativas

•No paradigma lógico (exemplo):• Proposições (fatos):

Anderson é pai de Alexandre.Anderson é pai de Gisele.

• Consulta: Anderson é pai de quem?• Resposta:

AlexandreGisele

Linguagens Declarativas

•No paradigma lógico (exemplo):• Proposições (fatos): O fatorial de 0 é 1.• Regra de inferência:

O fatorial de um número N (N > 0) é igual a N*fatorial(N-1).• Consulta: O fatorial de 2 é 200?• Resposta: Não• Consulta: Quanto é o fatorial de 3?• Resposta: 6

Linguagens Declarativas

•No paradigma funcional:• Descreve funções matemáticas apenas• É um processo que determina a correspondência de

elementos da imagem da função com o domínio

Linguagens Declarativas

3

4

7

8

f(x) = x + 4

f(3) = 7

f(3) = 8

•No paradigma funcional (exemplo/Haskell):quadrado x = x * x // Sem inferência de tipo> quadrado 2> 4> quadrado 3.0> 9.0

Linguagens Declarativas

•No paradigma funcional (exemplo/Haskell):hipotenusa :: Double -> Double -> Doublehipotenusa c1 c2 = sqrt(c1^2 + c2^2)> hipotenusa 3 4> 5

Linguagens Declarativas

•Vantagens:• Facilidade de acesso a banco de dados• Fica mais claro compreender O QUE deve ser feito• Cumpre perfeitamente segundo o propósito da linguagem

•Desvantagens:• Aplicações muito específicas• Precisa ser especialista no propósito do software para

conseguir desenvolver

Linguagens Declarativas

1) Qual diferença existe entra as características de linguagens imperativas das linguagens declarativas?

2) Quais vantagens e desvantagens há nas linguagens imperativas?

3) Quais vantagens e desvantagens há nas linguagens declarativas?

4) Ao utilizar uma variável, que diferença há entre seu l-value e ponteiro?

Exercícios