Linguagens de Programação Aula 10



Documentos relacionados
Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Subprogramas. Linguagens de Programação. Marco A L Barbosa

Implementando uma Classe e Criando Objetos a partir dela

Capítulo 9. Subprogramas

Análise e Projeto Orientados por Objetos

UNIDADE 6 - PROGRAMAÇÃO MODULAR

Conceitos de Linguagens de Programação

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

Paradigmas de Linguagens de Programação

1.6. Tratamento de Exceções

Linguagens de Programação

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Linguagens de Programação. Introdução. Carlos Bazilio

Introdução a Computação

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Subprogramas

Organização de Computadores Software

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Desenvolvimento OO com Java Orientação a objetos básica

Linguagens de. Aula 01. Profa Cristiane Koehler

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

INTRODUÇÃO À LINGUAGEM C++

Estrutura de Dados Básica

INTRODUÇÃO À PROGRAMAÇÃO DO ACCESS BASIC

Algoritmos e Programação II. Sobrecarga

Engenharia de Software II

Introdução a Java. Hélder Nunes

Guia de utilização da notação BPMN

Paradigmas de Programação

9 Comandos condicionais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Introdução à Programação Aula 2 Introdução à linguagem Python

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Análises Geração RI (representação intermediária) Código Intermediário

TRABALHO DE PROGRAMAÇÃO FUNCIONAL LINGUAGEM DE PROGRAMAÇÃO I

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Computação II Orientação a Objetos

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Conceituação. Linguagens de Programação Conceitos e Técnicas. Tempos de Amarração. Amarração Estática X Dinâmica. Identificador.

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

BC0505 Processamento da Informação

2 Ferramentas Utilizadas

Java Como Programar, 8/E

1 Introdução. Componentes Usuários. Provedor de Serviços. Figura 1.1 Ambiente de oferecimento de serviços

Introdução à Programação

ARQUITETURA DE COMPUTADORES

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Organização de Computadores 1

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Porque estudar Gestão de Projetos?

Conceitos básicos da linguagem C

Introdução à Engenharia de Computação

Orientação a Objetos. Thiago Messias Evangelista UESC Universidade Estadual de Santa Cruz Version LibreOffice Productivity Suite

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

Programação Orientada a Objetos C++

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Nesta aula... Analisamos na ultima aula a evolução e caraterísticas de computadores e linguagens de programação. Nesta aula iremos ver:

Arquitetura de processadores: RISC e CISC

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Programação Orientada a Objeto

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Linguagem de Programação I. Orientação a Objetos em Java

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

O modelo Entidade-Relacionamento. Agenda: -Modelagem de dados utilizando O Modelo Entidade-Relacionamento

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini prof.andre.luis.belini@gmail.com /

Orientação a Objetos

Linguagem de Programação

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

MODELAGEM E SIMULAÇÃO

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

Curso Técnico em Redes

INF1621 Linguagens de Programação I

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Pragmática das Linguagens de Programação 2004/2005

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Recursividade. Aula 9

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

Algoritmos e Programação

Sistemas Operacionais

Algoritmos DCC 119. Introdução e Conceitos Básicos

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

Sistema de Memórias de Computadores

Introdução Ciclo de vida tradicional de desenvolvimento Prototipagem Pacotes de software Desenvolvimento de 4ª geração Terceirização

Introdução a POO. Introdução a Linguagem C++ e POO

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Computador Digital Circuitos de um computador (Hardware)

TÉCNICAS DE PROGRAMAÇÃO

ILP - Introdução à Linguagem de Programação. Plano de estudo: - Constantes e variáveis. - Atribuindo valores às variáveis.

Sistemas Operacionais. Prof. André Y. Kusumoto

Memória cache. Prof. Francisco Adelton

Transcrição:

Linguagens de Programação Aula 10 Celso Olivete Júnior olivete@fct.unesp.br

Na aula passada As sentenças de controle das LP imperativas ocorrem em diversas categorias: seleção, seleção múltipla, iteração e desvio incondicional 2

Na aula de hoje Estruturas de controle no nível de unidades Subprogramas 3

Roteiro Introdução Fundamentos de subprogramas Questões de projeto para subprogramas Ambientes de referenciamento local Métodos de passagem de parâmetros Parâmetros que são subprogramas Subprogramas sobrecarregados Questões de projeto para funções Corrotinas 4

Introdução Dois mecanismos fundamentais de abstração em LPs Abstração de processos Desde o início da história das linguagens de programação Abstração de dados Desde o início dos anos 1980 5

Fundamentos de subprogramas Um subprograma é um tipo de abstração de processo Instruções para realizar uma tarefa são agrupadas e tratadas como uma unidade lógica O conceito economiza espaço e esforço de desenvolvimento e codificação 6

Fundamentos de subprogramas Cada subprograma tem um único ponto de entrada A unidade de programa chamadora é suspensa durante a execução do subprograma chamado O controle sempre retorna para o chamador quando a execução do subprograma termina chamadora chamado 7

Subprogramas: Definições básicas Uma definição de subprograma consiste na descrição de seu cabeçalho e de seu corpo O cabeçalho de um subprograma inclui tipo do subprograma, nome, parâmetros formais, tipo de retorno O corpo de um subprograma é a descrição das ações da abstração do subprograma Uma chamada a um subprograma é uma requisição explícita que diz que o subprograma deve ser executado 8

Definições básicas Um parâmetro formal é uma variável que aparece no cabeçalho do subprograma e é usada no corpo do subprograma Um parâmetro real representa um valor ou endereço usado na chamada do subprograma 9

Definições básicas O perfil de parâmetros (ou assinatura) de um subprograma contém o número, a ordem e os tipos de seus parâmetros formais O protocolo é o perfil de parâmetros mais, se for uma função, seu tipo de retorno 10

Definições básicas Declarações de funções em C e C++ são chamadas de protótipos Uma declaração de subprograma fornece o protocolo, mas não inclui seu corpo Um parâmetro formal subprograma e usado nele é uma variável listada no cabeçalho do Um parâmetro real representa um valor ou endereço usado na sentença de chamada do subprograma 11

Correspondência entre os parâmetros reais e formais Posicional A vinculação dos parâmetros reais a parâmetros formais é por posição: o primeiro real é vinculado ao primeiro formal e assim por diante Seguro e efetivo Palavra-chave O nome do parâmetro formal a que um parâmetro real deve ser vinculado é especificado com o parâmetro real Ex: comandoprintf Vantagem: Parâmetros podem aparecer em qualquer ordem, evitando erros de correspondência Desvantagem: O usuário deve saber os nomes dos parâmetros formais 12

Valores padrão de parâmetros formais Em certas linguagens (como C++, Python, Ruby, Ada e PHP), parâmetros formais podem ter valores padrão (se nenhum parâmetro real é passado) Em C++, parâmetros padrão devem aparecer por último, já que os parâmetros são posicionalmente associados Ex: protótipoint calcular (int a, int b, int c = 1) Chamada/invocação: x = calcular (10, 20); //c receberá 1 13

Procedimentos e funções Existem duas categorias de subprogramas Procedimento são coleções de instruções parametrizadas que definem uma determinada abstração Funções parecem estruturalmente com os procedimentos, mas são semanticamente modeladas como funções matemáticas Se uma função é um modelo fiel, ela não produz efeitos colaterais Na prática, muitas funções em programas têm efeitos colaterais 14

Questões de projeto para subprogramas 1. As variáveis locais são alocadas estaticamente ou dinamicamente? 2. As definições de subprogramas podem aparecer em outras definições de subprogramas? 3. Que método ou métodos de passagem de parâmetros são usados? 4. Os tipos dos parâmetros reais são verificados? 5. Se os subprogramas puderem ser passados como parâmetros e puderem ser aninhados, qual é o ambiente de referenciamento de um subprograma passado como parâmetro? 6. Os subprogramas podem ser sobrecarregados? 15

Ambientes de referenciamento local Variáveis locais: são variáveis que são definidas dentro de um subprograma, e geralmente têm o mesmo escopo do subprograma Variáveis locais podem ser implementadas como dinâmicas da pilha O ambiente é criado de acordo com a ativação.vantagens: Suporte para recursão Armazenamento para variáveis locais é compartilhado entre alguns subprogramas Desvantagens: Custo para alocação, liberação, tempo de inicialização Endereçamento indireto Subprogramas não podem ser sensíveis ao histórico 16

Ambientes de referenciamento local Variáveis locais: são variáveis que são definidas dentro de um subprograma, e geralmente têm o mesmo escopo do subprograma Variáveis locais podem ser estáticas Desvantagem: não permite recursividade Vantagens: não há endereçamento indireto (mais eficiente); não existe reserva e libertação de memória 17

Ambientes de referenciamento local Linguagens que permitem ambiente estático: COBOL, muitas versões de FORTRAN e Algol. FORTRAN 77 e 90 Quase sempre são alocações estáticas (pode haver alocação dinâmica Pilha). C - Por omissão é dinâmico de pilha mas variáveis podem ter atributo static; Linguagens que permitem ambiente de Pilha dinâmica: C/C++, Pascal, Ada, Lisp, APL, SNOBOL, etc. 18

Modelos semânticos de passagem de parâmetros Formas de transmitir os parâmetros para os subprogramas Modo de entrada: receber dados a partir do parâmetro real correspondente Modo de saída: transmitir dados para o parâmetro real Modo de entrada e saída: fazer ambos 19

Modelos de passagem de parâmetros 20

Modelos conceituais de transferência de dados Um valor real é copiado (movimento físico): para o chamador, para o chamado ou para ambos Um caminho de acesso é transmitido (por um ponteiro ou por uma referência) Formas: 1. Passagem por valor (modo de entrada) 2. Passagem por resultado (modo de saída) 3. Passagem por valor/resultado (modo de entrada/saída) 4. Passagem por Referência (modo entrada/saída) 5. Passagem por nome (modo múltiplo) 21

1. Passagem por valor modo de entrada O valor do parâmetro real é usado para inicializar o parâmetro formal correspondente Normalmente implementada por cópia Poderia ser implementada transmitindo um caminho de acesso para o valor do parâmetro real no chamador, mas isso requereria que o valor estivesse em uma célula com proteção contra escrita (uma que pudesse ser apenas lida) Desvantagens (se cópias são usadas): é necessário armazenamento adicional para o parâmetro formal e o movimento pode ser custoso 22

2. Passagem por resultado modo de saída Quando um parâmetro (modo de saída) é passado por resultado, nenhum valor é transmitido para o subprograma. O parâmetro formal correspondente age como uma variável local, mas logo antes de o controle ser transmitido de volta para o chamador, seu valor é transmitido de volta para o parâmetro real deste. Problema em potencial: sub(p1, p1); pode existir uma colisão entre parâmetros reais 23

3. Passagem por valor-resultado modo entrada/saída Transferência de valores em ambas as direções Também conhecido como passagem por cópia Desvantagens: As mesmas da passagem por resultado As mesmas da passagem por valor 24

4. Passagem por referência modo entrada/saída Transmite um caminho de acesso (endereço) Vantagem: processo de passagem é eficiente (não são necessárias cópias nem espaço duplicado) parâmetro real é compartilhado Desvantagens Acessos mais lentos (do que na passagem por valor) Potenciais efeitos colaterais (colisões) Apelidos podem ser criados 25

5. Passagem por nome modo múltiplo Parâmetro formal é substituído textualmente pelo real Quando os parâmetros são passados por nome, o parâmetro real é, na prática, textualmente substituído pelo parâmetro formal correspondente em todas as suas ocorrências no subprograma 26

Implementando métodos de passagem de parâmetros Na maioria das linguagens contemporâneas, a comunicação via parâmetros ocorre por meio da pilha de tempo de execução Passagem por referência é a mais simples de implementar; apenas seu endereço deve ser colocado na pilha Um erro sutil, mas fatal, pode ocorrer com parâmetros com passagem por referência e passagem por valor-resultado: um formal correspondente a uma constante pode ser trocado erroneamente 27

Métodos de passagem de parâmetros das principais linguagens C Passagem por valor A passagem por referência é atingida por meio do uso de ponteiros como parâmetros C++ Inclui o tipo referência para passagem por referência Java Todos os parâmetros têm passagem por valor Parâmetros objetos têm passagem por referência 28

Métodos de passagem de parâmetros das principais linguagens (cont.) Fortran 95 C# Parâmetros podem ser declarados para serem dos modos de entrada, de saída ou de entrada e saída Método padrão: passagem por valor Passagem por referência é especificada precedendo um parâmetro formal e seu real correspondente com ref PHP: similar a C# 29

Métodos de passagem de parâmetros Exemplo I Exemplo em Ling. C: Transmissão ocorre somente por valor. Porém transmitindose o endereço e o efeito é "semanticamente semelhante" à passagem por referência. void swap(int *x, *y) { int temp = *x; *x = *y; *y = temp; } swap(&a,&b); 30

Métodos de passagem de parâmetros Exemplo II Exemplo em Ling. C++: Passagem de valor como em C, contudo, também permite passagem por referência explicita através do operador '&' no parâmetro formal. void swap(int & x, int & y) { int temp = x; x = y; y = temp; } Invocação: swap(a,b); // para o valor de 2 variáveis 31

Verificação de tipos dos parâmetros Considerado importante para confiabilidade FORTRAN 77 e versão original do C: não tinham Pascal, FORTRAN 90, Java e Ada: sempre requerem ANSI C e C++: escolha é feita pelo usuário Linguagens relativamente novas como Perl, JavaScript e PHP não requerem verificação de tipos 32

Matrizes multidimensionais como parâmetros Se uma matriz multidimensional é passada para um subprograma e o subprograma é compilado separadamente, o compilador precisa saber o tamanho declarado dessa matriz para construir a função de mapeamento de armazenamento 33

Matrizes multidimensionais como parâmetros: C e C++ Matriz pode ser passada como um ponteiro, e as dimensões reais da matriz podem ser incluídas como parâmetros A função pode avaliar a função de mapeamento de armazenamento escrita pelo usuário usando aritmética de ponteiros cada vez que um elemento da matriz precisar ser referenciado 34

Considerações de projeto para passagens de parâmetros Duas considerações importantes Eficiência Transferências de dados de uma via ou de duas vias Mas as considerações acima estão em conflito Boa programação sugere acesso limitado a variáveis, o que significa uma via, sempre que possível Mas passagem por referência é mais eficiente para passar estruturas de tamanho significativo 35

Parâmetros que são subprogramas Às vezes, é conveniente enviar os nomes de subprogramas como parâmetros Questões: 1. Tipos de parâmetros são verificados? Pascal (inicial) e FORTRAN 77 não C e C++ sim 2. Qual é o ambiente de referenciamento correto para um subprograma enviado como parâmetro? 36

Parâmetros que são subprogramas: verificação de tipos dos parâmetros C e C++: as funções não podem ser passadas como parâmetros, mas ponteiros para funções podem FORTRAN 95 possui um mecanismo para fornecer tipos de parâmetros para subprogramas que são passados como parâmetros 37

Parâmetros que são subprogramas: ambiente de referenciamento Vinculação rasa (shallow binding): O ambiente do subprograma onde o subprograma atua como parâmetro atual Vinculação profunda (Deep binding): O ambiente da definição do subprograma passado Vinculação ad hoc (Ad hoc binding): O ambiente da sentença de chamada que passou o subprograma como um parâmetro real 38

Parâmetros que são subprogramas: ambiente de referenciamento Vinculação rasa (shallow binding): é utilizado em linguagens de escopo dinâmico (Pascal e SNOBOL), onde o ambiente do subprograma invocado é mais natural. Vinculação profunda (Deep binding): é utilizado em linguagens de escopo estático (C e C++), porque o ambiente de definição é o mais natural. 39

Parâmetros que são subprogramas: ambiente de referenciamento Exemplo Qual é o ambiente de referência de sub2 quando for chamado em sub4? (sub2 é parâmetro de sub4). 40

Parâmetros que são subprogramas: ambiente de referenciamento Exemplo Vinc. profunda Vinc. Ad hoc Vinc. rasa Qual é o ambiente de referência de sub2 quando for chamado em sub4? (sub2 é parâmetro de sub4). 41

Subprogramas sobrecarregados Um subprograma sobrecarregado é um subprograma que possui o mesmo nome de outro subprograma no mesmo ambiente de referenciamento C++, Java, C# e Ada incluem subprogramas sobrecarregados pré-definidos Ada, Java, C++ e C# permitem aos usuários escrever múltiplas versões de subprogramas com o mesmo nome 42

Subprogramas sobrecarregados Exemplo em C++ Um subprograma sobrecarregado é um subprograma que possui o mesmo nome de outro subprograma no mesmo ambiente de referenciamento int maximo(int x, int y) { return x>y? x : y; } double maximo(double x, double y) { return x>y? x : y; } int maximo(int x, int y, int w, int z) { return maximo(maximo(x,y),maximo(y,z));} 43

Questões de projeto para funções Os efeitos colaterais são permitidos? Os parâmetros para funções devem ser sempre parâmetros no modo de entrada Que tipos de valores podem ser retornados? A maioria das linguagens de programação imperativas restringe os tipos que podem ser retornados C permite que quaisquer tipos, exceto matrizes e funções C++ também permite tipos definidos pelo usuário Métodos em Java e C# podem retornar qualquer tipo 44

Corrotinas Uma corrotina é um subprograma especial que possui múltiplas entradas; as corrotinas chamadora e chamada estão em um relacionamento mais igualitário A invocação de uma corrotina é a chamada de uma continuação (resume) em vez de uma chamada O mecanismo de controle das corrotinas é frequentemente chamado de modelo de controle de unidades simétrico 45

Sequênciasde controle de execução possíveis Tipicamente, corrotinas repetidamente retomam a execução entre si, possivelmente em laço infinito. 46

Sequênciasde controle de execução possíveis 47

Sequênciade execução de corrotinas com laços Co-rotinas fornecem um mecanismo de execução de unidade de programas quase concorrentes Dentre as LPs contemporâneas, apenas Lua suporta corrotinas 48

Resumo Uma definição de subprograma descreve as ações representadas pelo subprograma Subprogramas podem ser funções ou procedimentos Variáveis locais em subprogramas podem ser dinâmicas da pilha ou estáticas Três modelos fundamentais de passagem de parâmetros: modo de entrada, modo de saída e modo de entrada e saída Algumas linguagens permitem sobrecarga de operatores Uma corrotina é um subprograma especial que tem múltiplas entradas 49

Exercícios Questões de revisão 1, 2, 3, 5, 8, 11, 16 Conjunto de problemas 5, 7 Exemplo de corrotina 50