paradigmas de linguagens de programação linguagem imperativa 2 augusto sampaio e paulo borba...
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051515/552fc142497959413d8df5c9/html5/thumbnails/25.jpg)
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