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

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

Apr 19, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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