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
Variações:– Constante– Definição (renomeação) de
variável– Procedimento ou função
Declaração Parâmetros
dec Id = Corpo; proc p(dec Id) = ...Id...; ...
p(Corpo);
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, valor-
resultado, 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
Top Related