Paradigmas de Linguagens de
Programação
Linguagem Imperativa 2
Augusto Sampaio e Paulo Borba
Departamento de Informática
Universidade Federal de Pernambuco
Explorando Conceitos
• Abstração
– Função
– Procedimento
• Parametrização
– Cópia
– Definição
– Nome
Abstração em Programação
• Processo pelo qual ignora-se detalhes
irrelevantes, concentrando-se em idéias
gerais ao invés de caracterizações delas
• Definição de novas operações (conceitos)
em um programa
• Operação versus Implementação da mesma
– O que? versus Como?
Abstração em Linguagens
• Uma abstração contém um objeto
computável
– Uma função contém uma expressão
– Um procedimento contém um comando
• Uma abstração pode ser invocada,
resultando na execução do seu objeto
computável
Abstração de Função
• Contém
– uma expressão (como em LF1, ML, e Haskell)
– expressão comando, ou um comando que
retorna uma valor (como em Pascal e C)
• Quando invocada avalia (executa) a sua
expressão (comando) e dá como resultado o
valor associado
Abstração de Função
• Abstração com identificador
– Construída por uma declaração de função
(como em Pascal, C, LF1, LF2, e ML)
• Abstração sem identificador (anônima)
– Construída por um valor função (como em LF2,
ML, e Haskell)
Abstração de Procedimento
• Contém um comando
• Quando invocada executa o seu comando,
lendo e atualizando variáveis
• Normalmente tem um identificador
associado:
– construída por uma declaração de procedimento
Outras Abstrações
Princípio da abstração. É possível construir
abstrações contendo outros tipos de objetos:
– Acesso a variável (Id, Id.Id, Id[Id])
– Declarações
Parametrização
• Operações genéricas ou parametrizadas,
cujos comportamentos variam de acordo
com os parâmetros fornecidos
• Abstrações podem ser parametrizadas em
relação aos valores ou variáveis que ela
manipula
Parâmetros e Argumentos
• Argumento
– Valor fornecido para a execução do objeto da
abstração
• Parâmetro formal
– Identificador utilizado na construção da
abstração para denotar um argumento
• Parâmetro real
– Expressão cuja avaliação resulta em um
argumento; fornecida na invocação da abstração
Parâmetros e Argumentos
• Argumentos são valores da linguagem, mas
– em certas linguagens nem todos valores podem
ser argumentos (arquivos em Pascal)
– funções e procedimentos nem sempre são
valores (Pascal, LI2, e C)
• Há vários mecanismos para associar
argumentos a parâmetros formais antes da
execução do objeto da abstração
Mecanismos de Cópia
• O parâmetro real é avaliado resultando no
argumento
• O parâmetro formal denota uma variável
local à abstração
• Variações:
– Valor
– Resultado
– Valor-resultado
Mecanismos de Cópia
Valor (LF2, LI2, Java, Pascal, C, ML)
– O argumento é copiado para a variável local
antes da execução do objeto da abstração
– A variável local pode ser não só inspecionada,
mas também atualizada
Mecanismos de Cópia
Resultado
– O argumento tem que ser uma referência para
uma variável
– O valor inicial da variável local não é
determinado
– No final da execução do objeto da abstração, o
valor da variável local é copiado para a variável
cuja referência foi recebida como argumento
Mecanismos de Cópia
Valor-resultado
– O argumento tem que ser uma referência para
uma variável
– O valor da variável associada ao argumento é
copiado para a variável local antes da execução
do objeto da abstração
– No final da execução do objeto da abstração, o
valor da variável local é copiado para a variável
cuja referência foi recebida como argumento
Mecanismos de Cópia
• Desvantagens:
– Ineficiente do ponto de vista computacional
– Válido apenas para tipos cujos valores possam
ser atribuídos a variáveis
• Vantagem:
– Facilidade para entendimento do código
Mecanismos de Definição
• O parâmetro real é avaliado resultando no
argumento
• O parâmetro formal denota o identificador
de uma declaração local à abstração
• O argumento denota o corpo da declaração,
que é associado (bound) ao identificador
Mecanismos de Definição
Declaração
Parâmetros
dec Id = Corpo;
proc p(dec Id) = ...Id...;
...
p(Corpo);
Variações:
– Constante
– Definição (renomeação) de
variável
– Procedimento ou função
Mecanismos de Definição
Constante
– Declaração: const Id = Expressão;
– O argumento é um valor
– Id denota este valor no escopo do objeto da
abstração
– Id não é uma variável, como em parâmetro por
valor, consequentemente tem o mesmo valor
durante a execução do objeto da abstração
Mecanismos de Definição
Definição de Variável (Referência)
– Declaração: var Id = AcessoVariável;
– O argumento é uma referência para uma
variável
– Id denota esta variável no escopo do objeto da
abstração
– Qualquer leitura ou atualização feita com Id é
uma leitura ou atualização da variável
Mecanismos de Declaração
• Desvantagens:
– Aliasing; dois identificadores associados a uma
mesma variável
– n := 1; n := n + m  n := 1 + m
– Dificulta entendimento do código
• Vantagens:
– Semântica uniforme e simples; válido para todos
os tipos de valores
– Eficiente (exceto para sistemas distribuídos)
Mecanismo de Ordem Normal
Nome
– O parâmetro real não é avaliado antes do início
da execução do objeto da abstração
– Não há argumento!
– O parâmetro formal é substituído pelo
parâmetro real no objeto da abstração
• trocando os nomes de variáveis locais para evitar
conflitos de nomes
– O objeto resultante é executado
Mecanismo de Ordem Normal
• Desvantagens:
– O parâmetro real pode ser avaliado várias vezes
(exceto com Lazy evaluation, válido para
linguagens sem efeitos colaterais)
– Ineficiente, em geral
– Dificulta entendimento do código
• Vantagens:
– O parâmetro real é avaliado sob demanda
– Operações não estritas (Church-Rosser)
Leitura
• Programming Language Concepts and
Paradigms
– Capítulo 5
Exercícios e Projetos
• Estenda a Linguagem Imperativa 2 com os
seguintes recursos:
– Passagem de parâmetros por resultado, valorresultado, constante, referência, e nome
– Funções como em Pascal ou C
– Comando como expressões, como em C
– Procedimentos de alta ordem
– Blocos como em C ou Pascal
Download

Linguagem Imperativa 1 - CIn - Centro de Informática da UFPE