Universidade Federal Rural de Pernambuco
Departamento de Estatística e Informática
Subprogramas
Prof. Gláucya Carreiro Boechat
[email protected]
Paradigmas de Linguagem de Programação
Características Fundamentais dos Subprogramas
„
Subprogramas
‰
Unidade de programação para construção de
programas.
„
„
int somar(int param1, int param2) { return param1 + param2; }
Características Fundamentais do Subprogramas :
‰
‰
‰
Possuem um único ponto de entrada;
O chamador (invocador) tem sua execução suspensa
durante a execução do subprograma chamado;
Quando a execução do subprograma é finalizada o
controle sempre retorna ao “chamador”.
Paradigmas de Programação prof Gláucya Carreiro Boechat
2
Definições Básicas
„
Subprograma
‰
„
Descreve um grupo de instruções arranjadas de
forma lógica, que executem uma ação bem
definida;
Chamada de subprograma
‰
solicitação explicita para executar o subprograma
„
„
O subprograma é ativo quando iniciou sua execução,
mas ainda não a concluiu.
Tipos Fundamentais de Subprogramas
‰
‰
Procedimentos
Funções
Paradigmas de Programação prof Gláucya Carreiro Boechat
3
Definições Básicas
„
Cabeçalho do subprograma (declaração ou
definição)
‰
primeira linha de sua definição, incluindo
„
„
nome, tipo do subprograma e parâmetros formais
Exemplos
‰
FORTRAN
„
‰
ADA
„
‰
SUBROUTINE SOMADORA (parâmetros)
procedure SOMADORA (parâmetros)
C
„
void somadora(parâmetros)
Paradigmas de Programação prof Gláucya Carreiro Boechat
4
Definições Básicas
„
perfil dos parâmetros de um subprograma
‰
é a lista de parâmetros formais, incluindo:
„
„
número, ordem e seus tipos
Protocolo de um subprograma
‰
É seu perfil de parâmetros, e no caso de função, o tipo
de retorno
Paradigmas de Programação prof Gláucya Carreiro Boechat
5
Parâmetros
„
Existem duas maneiras pelas quais um
subprograma pode ganhar acesso aos dados que
deve processar
‰
Acesso direto a variáveis não-locais
„
‰
„
Declarada em outro local, mas visíveis no subprograma
Ou pela passagem de parâmetros
Tipos de parâmetros
‰
‰
‰
‰
Parâmetro formal
Parâmetro real
Parâmetro posicional
Parâmetro de palavra-chave
Paradigmas de Programação prof Gláucya Carreiro Boechat
6
Parâmetros
„
Parâmetro formal
‰
‰
‰
variável fictícia listada no cabeçalho do
subprograma
usada no subprograma (na sua definição ou
corpo do subprograma)
Exemplo
Funcao Media( X, Y : real) : real
Início
retorne (X + Y) / 2;
Fim;
Paradigmas de Programação prof Gláucya Carreiro Boechat
7
Parâmetros
„
Parâmetro real (ou atual)
‰
‰
Representa o valor (ou endereço) das variáveis
ou constantes usadas na chamada do
subprograma
Exemplo
„
Z ← Media(8,7);
Paradigmas de Programação prof Gláucya Carreiro Boechat
8
Nomenclatura dos parâmetros
„
Parâmetros
‰
‰
reais: chamadora;
fomais: subrotina.
Procedure Troca (var A,B: real);
…
Troca ( x,y );
…
Paradigmas de Programação prof Gláucya Carreiro Boechat
9
Parâmetros
„
Parâmetro de Palavra-Chave (ou nomeado)
‰
‰
O nome do parâmetro formal ao qual deseja-se
vincular o parâmetro real é especificado junto
com o parâmetro real
Parâmetros podem aparecer em qualquer ordem
Paradigmas de Programação prof Gláucya Carreiro Boechat
10
Exemplos de Parâmetro de Palavra-chave
„
ADA
„
function CALC_PAGAMENTO(
RENDA : FLOAT; ISENCOES :
INTEGER := 1;
TARIFA_IMPOSTO : FLOAT)
return FLOAT;
…
Chamada
PAGAMENTO :=
CALC_PAGAMENTO(200.0,
TARIFA_IMPOSTO => 0.2);
C
float calculo_pagamento( float renda,
float tarifa_imposto, int isencoes = 1)
…
Chamada
pagamento = calculo_pagamento(
200.0, 0.2) ;
Quando insencoes for ausente, o
valor 1 é usado
Quando insencoes for ausente,
o valor 1 é usado
Paradigmas de Programação prof Gláucya Carreiro Boechat
11
Procedimentos e Funções
„
Categorias de Subprogramas:
‰
Procedimentos
„
„
‰
São coleções de instruções que definem computações
parametrizadas
Podem produzir resultados para chamador se houver houver
variáveis que esteja visivel tanto para o procedimento como
quem fez a chamada
Funções
„
„
lembram estruturalmente os procedimentos,
Mas geralmente são modelas em funções matemática
‰
‰
O valor produzido pela execução da função é retornado ao
Chamador
Substituindo efetivamente a própria chamada
Paradigmas de Programação prof Gláucya Carreiro Boechat
12
Exemplo de Procedimento e Função (Pascal)
program subalgoritmos;
var a,b:integer;
procedure troca(VAR x,y : integer);
var aux: integer;
begin
aux := x ; x := y ; y := aux;
end;
function quadrado(n :integer):integer;
var cont :integer;
begin
cont := n * n;
quadrado := cont; (*retorno da função é definido nesta linha*)
end
begin (*programa principal*)
a:= 4; b := 2;
troca(a,b);
b := quadrado(a);
end.
Paradigmas de Programação prof Gláucya Carreiro Boechat
13
Questões de projeto
„
„
„
„
Quais métodos de passagem de parâmetros
são usados?
As variáveis locais são alocadas
estaticamente ou dinamicamente?
Definições de subprogramas podem
aparecer em outras definições de
subprogramas?
Subprogramas podem ser sobrecarregados?
Paradigmas de Programação prof Gláucya Carreiro Boechat
14
Ambientes de Referências Locais
„
Variáveis locais são variáveis que são definidas
dentro de um subprograma, e geralmente têm o
mesmo escopo do subprograma.
„
Implementação de variáveis locais
‰
Variáveis locais podem ser dinâmicas na pilha
„
Vantagens
‰
„
Permite recursividade, Locais de armazenamento podem ser
compartilhados entre subprogramas
Devantagens
‰
‰
‰
Alocação/desalocação, tempo de inicialização
Endereçamento indireto
Subprogramas não podem ser sensíveis à história
Paradigmas de Programação prof Gláucya Carreiro Boechat
15
Ambientes de Referências Locais
„
Variáveis locais podem ser estáticas
‰
‰
‰
Mais eficiente
Sem overhead em tempo de execução
Não suportam recursão
Paradigmas de Programação prof Gláucya Carreiro Boechat
16
Ambientes de Referências Locais
„
Linguagens que permitem ambiente estático:
‰
‰
‰
„
COBOL, muitas versões de FORTRAN, opção
especial em PL/I 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.
„
É a situação geral de linguagens estruturadas
Paradigmas de Programação prof Gláucya Carreiro Boechat
17
Métodos de Passagem de Parâmetros
„
Maneiras os parâmetros são transmitidos
para subprogramas chamado.
„
Modelos de Passagem de Parâmetros:
‰
‰
‰
‰
Passagem por valor
Passagem por resultado
Passagem por valor-resultado
Passagem por referência
Paradigmas de Programação prof Gláucya Carreiro Boechat
18
Modelos de passagem de parâmetros
Paradigmas de Programação prof Gláucya Carreiro Boechat
19
Passagem por valor (Modo de Entrada)
„
O valor do parâmetro real é usado para inicializar o
parâmetro formal correspondente
‰
‰
Cópia física - o parâmetro atual é avaliado e
inicializa o parâmetro formal
Se transmitido por Referência
„
Será necessario proteger o parâmetro contra escrita pelo
subprograma chamado
‰
‰
seu valor
C++ oferece um metodo efitivo de impor proteção contra a escrita
em parâmetros passados por valor.
Desvantagens
„
Desperdicio de memoria
‰
Ex. Duplicação de array
Paradigmas de Programação prof Gláucya Carreiro Boechat
20
Passagem por resultado (Modo de Saída)
„
„
„
„
Valores do subprograma são transmitidos de volta
para o invocador;
Geralmente é utilizado Passagem por Valor;
O parâmetro formal correspondente age como uma
variável local
Desvantagens
‰
‰
Tempo e espaço de memória (Passagem por Valor);
Colisão de parâmetros Reais:
„
sub(p1, p1)
‰
Qualquer um dos dois que seja atribuído por último ao seu
parâmetro real correspondente irá se tornar o valor de p1
Paradigmas de Programação prof Gláucya Carreiro Boechat
21
Passagem por valor-resultado
(Modo Entrada/Saída)
„
Uma combinação da passagem por valor com
passagem por resultado
‰
Também conhecida por passagem por cópia
„
„
‰
Parâmetro real é copiado para o parâmetro formal na
entrada do subprograma
E depois é copiado de volta na finalização do
subprograma
Desvantagens
„
„
Todas as de passagem por resultado
Todas as de passagem por valor
Paradigmas de Programação prof Gláucya Carreiro Boechat
22
Passagem por Referência
(Modo Entrada/Saída)
„
Transmiti o caminho de acesso (endereço)
‰
Processo de passagem é eficiente
„
„
Sem cópia e sem armazenamento duplicado
Desvantagens
‰
Acesso mais lento aos parâmetros formais
(comparado com passagem por valor)
Colisão
‰
Exemplo Linguagem C
‰
„
void fun(int *primeiro, int *segundo)
Paradigmas de Programação prof Gláucya Carreiro Boechat
23
Passagem por Referência
(Modo Entrada/Saída)
„
Problema de Colisão
„
Qual o resultado final da variável Total ?
Paradigmas de Programação prof Gláucya Carreiro Boechat
24
Métodos de passagem de parâmetros das
principais linguagens
„
Fortran
‰
‰
‰
„
C
‰
‰
„
Utiliza Modo Entrada/Saída
Antes do Fortran 77 - passagem por referência
Fortran 77 e depois - variáveis escalares são freqüentemente
passadas por valor-resultado
Passagem por valor
Passagem por referência quando os parâmetros são ponteiros
Java
‰
‰
Todos os parâmetros são passados por valor
Parâmetros de objeto são passados por referência
Paradigmas de Programação prof Gláucya Carreiro Boechat
25
Métodos de passagem de parâmetros das
principais linguagens
„
Ada
‰
‰
‰
Três modos semânticos: Entrada, Saída, Entrada/Saída;
Modo Entrada é o modo padrão
Parâmetros formais
„
„
„
„
C++
‰
„
declarados out podem ser alterados mas não referenciados
declarados in podem ser referenciados mas não alterados
in out podem ser referenciados e alterados
Passagem por referência
C#
‰
‰
Método padrão: passagem por valor
Passagem por referência é especificado
Paradigmas de Programação prof Gláucya Carreiro Boechat
26
Parâmetros que são nomes de subprogramas
„
Em algumas situações é mais conveniente
manipular nomes de subprogramas puderem ser
enviados como parâmetros a outros subprogramas
‰
Pode ocorrer quando um subprograma precisa avaliar uma
função matemática
„
Exemplo
Procedure fun1 ( a, b : real; fun2(x : real) : real);
var x : integer;
begin
x := 1;
sub2 (x);
end
Paradigmas de Programação prof Gláucya Carreiro Boechat
27
Parâmetros que são nomes de subprogramas
„
C e C++
‰
„
funções não podem ser passadas como
parâmetros, mas ponteiros para funções podem
ser passados
Versões antigas de Pascal e de Ada não
permitem subprogramas como parâmetros
Paradigmas de Programação prof Gláucya Carreiro Boechat
28
Subprogramas Sobrecarregados
„
Subprograma Sobrecarregado
‰
‰
‰
é um subprograma que possui o mesmo nome de outro
subprograma
no mesmo ambiente de referência (escopo),
com significados diferentes
„
C++, Java, C# e Ada possuem subprogramas
sobrecarregados predefinidos
„
Ada, Java, C++ e C# permitem que usuários
escrevam múltiplas versões de subprogramas com
o mesmo nome
Paradigmas de Programação prof Gláucya Carreiro Boechat
29
Subprogramas Sobrecarregados
„
Exemplo C++
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));
}
Paradigmas de Programação prof Gláucya Carreiro Boechat
30
Download

Subprogramas - Centro de Informática da UFPE