paradigmas de linguagens de programação linguagem imperativa 2 augusto sampaio e paulo borba...

25
Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

Upload: internet

Post on 19-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

Paradigmas de Linguagens de Programação

Linguagem Imperativa 2

Augusto Sampaio e Paulo Borba

Departamento de Informática

Universidade Federal de Pernambuco

Page 2: 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

Page 3: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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?

Page 4: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 5: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 6: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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)

Page 7: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 8: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 9: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 10: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 11: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 12: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 13: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 14: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 15: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 16: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 17: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 18: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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);

Page 19: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 20: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 21: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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)

Page 22: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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

Page 23: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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)

Page 24: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

Leitura

• Programming Language Concepts and Paradigms– Capítulo 5

Page 25: Paradigmas de Linguagens de Programação Linguagem Imperativa 2 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal de Pernambuco

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