Paradigmas de Linguagens de Programao Linguagem Imperativa 2

























- Slides: 25
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 LF 1, 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, LF 1, LF 2, e ML) • Abstração sem identificador (anônima) – Construída por um valor função (como em LF 2, 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]) – 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, LI 2, 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 (LF 2, LI 2, 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 de Variável (Referência) – Declaração: var Id = Acesso. Variá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

























