Paradigmas de Linguagens de
Programação
Linguagem Imperativa 1
Augusto Sampaio e Paulo Borba
Centro de Informática
Universidade Federal de Pernambuco
Explorando Conceitos
• Variáveis e memória, variáveis compostas,
arrays, alocação dinâmica de memória,
persistência
• Comandos de atribuição, composição
colateral e paralela, comandos condicionais,
comandos iterativos, expressões com efeitos
colaterais
Variáveis e Memória
• Uma memória é uma coleção de células,
onde cada célula tem
– status: alocada ou não
– conteúdo: um valor armazenável ou undefined
• Uma variável
– contém um valor, o qual pode ser inspecionado
e atualizado
– é implementada por uma ou mais células
Variáveis e Memória
• Memória abstrata:
– {x  5 , y  9, z  ‘a’}
(Id  Valor)
• Memória concreta:
– Associações:
{x  13 , y  72, z  00}
(Id  Ref)
– Memória:
{00  ‘a’, ..., 13  5, ...,
(Ref  Valor)
72  9, ..., 99  undefined}
Variáveis e Memória
• A avaliação de variáveis é feita de forma
diferente de acordo com a sua posição no
comando de atribuição:
– L-value
• o endereço da célula de memória que implementa a
variável (referência)
– R-value
• o valor armazenado na célula de memória que
implementa a variável (conteúdo)
Variáveis Compostas
• Agrupamentos de variáveis componentes:
– record de Pascal, struct de C
– arrays
• Atualização
– seletiva
– total
Arrays
• Alternativas para a definição dos limites de
um array:
– estático, determinado em tempo de compilação
– dinâmico, determinado no momento da criação
(inicialização) da variável
– flexível, não é determinado em nenhum
momento
Alocação Dinâmica de Memória
• Variáveis criadas por declarações:
– locais, existem durante às execuções do bloco
– globais e estáticas, existem durante a execução
do programa
• Variáveis da heap, criadas por comandos:
– criadas e destruídas em qualquer parte do
programa, por comandos especiais
– anônimas, acessadas via ponteiros
– referências pendentes
Persistência
• Arquivos são valores compostos como outros
quaisquer
• Qualquer variável deveria poder ser
– transitória
– persistente
• Linguagens normalmente dividem os tipos em
transitório e persistente
• Type completness principle – todos os tipos de
uma linguagem devem ser disponíveis tanto para
variáveis transitórias quanto persistentes
Comandos
• Construção que, quando executada, atualiza
variáveis
• Um ponto de entrada, um ponto de saída
• Múltiplos pontos de entrada, múltiplos
pontos de saída:
– goto (de C), throw (de Java), continue e break
(de C e Java)
Atribuição
• Forma geral
– AcessoVariável := Expressão
• Atribuições múltiplas
– AV := AV’ := AV’’ := Expressão
• Atribuições simultâneas
– AV, AV’ := Expressão, Expressão’
Composição Colateral e Paralela
• Colateral: Comando , Comando’
– os dois comandos são executados, em uma ordem
qualquer
– não determinismo
• Paralela: Comando || Comando’
– os dois comandos são executados, de maneira
concorrente
– concorrência e não determinismo
– Composição seqüencial e colateral são casos especiais
Comandos Condicionais
• Não-determinísticos:
– if Expressão1 then Comando1
| Expressão2 then Comando2 ...
| ExpressãoN then ComandoN
end if
• Baseados em valores não booleanos:
– case (de Pascal), switch (de C)
Comandos Iterativos
• Variam de acordo com o número de
iterações:
– definido, com variável e seqüência de controle,
for (de Pascal e C)
– indefinido, while (de Pascal e C)
• A seqüência de controle não tem que ser
uma progressão aritmética, definida por
constantes
Expressões com Efeitos
Colaterais
• Expressões comandos: retornam valores e
alteram os valores de variáveis
– funções (de Pascal e C)
– o.m() + o.m() diferente de 2 * o.m()
• Linguagens orientadas a expressões:
– nenhuma distinção entre expressões e
comandos (Algol 68, ML, C)
– AV := (AV := Expressão)
Leitura
• Programming Language Concepts and
Paradigms
– Capítulo 3 (exceto a Seção 3.5.3)
Exercícios e Projetos
• Estenda a Linguagem Imperativa 1 com os
seguintes recursos:
– declaração de variável em qualquer ponto de
um bloco, como em Java
– comandos continue e goto de C
– arrays e records de Pascal
– ponteiros de Pascal
– tratamento de exceções como em Java, mas
passando para o throw uma string, não um
objeto
Download

Linguagem Imperativa 1