universidade federal rural de pernambuco departamento de ...gcb/pp/pp_subprogramas.pdf ·...
Post on 08-Feb-2019
213 Views
Preview:
TRANSCRIPT
Subprogramas
Prof. Gláucya Carreiro Boechatglaucyacboechat@gmail.comParadigmas de Linguagem de Programação
Universidade Federal Rural de PernambucoDepartamento de Estatística e Informática
Paradigmas de Programação -prof Gláucya Carreiro Boechat 2
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 3
Definições Básicas
SubprogramaDescreve um grupo de instruções arranjadas de forma lógica, que executem uma ação bem definida;
Chamada de subprogramasolicitação explicita para executar o subprograma
O subprograma é ativo quando iniciou sua execução, mas ainda não a concluiu.
Tipos Fundamentais de SubprogramasProcedimentosFunções
Paradigmas de Programação -prof Gláucya Carreiro Boechat 4
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
ExemplosFORTRAN
SUBROUTINE SOMADORA (parâmetros)ADA
procedure SOMADORA (parâmetros)C
void somadora(parâmetros)
Paradigmas de Programação -prof Gláucya Carreiro Boechat 5
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 6
Parâmetros
Existem duas maneiras pelas quais um subprograma pode ganhar acesso aos dados quedeve processar
Acesso direto a variáveis não-locaisDeclarada em outro local, mas visíveis no subprograma
Ou pela passagem de parâmetrosTipos de parâmetros
Parâmetro formal Parâmetro realParâmetro posicionalParâmetro de palavra-chave
Paradigmas de Programação -prof Gláucya Carreiro Boechat 7
Parâmetros
Parâmetro formalvariável fictícia listada no cabeçalho do subprogramausada no subprograma (na sua definição ou corpo do subprograma)
ExemploFuncao Media( X, Y : real) : realInício
retorne (X + Y) / 2;Fim;
Paradigmas de Programação -prof Gláucya Carreiro Boechat 8
Parâmetros
Parâmetro real (ou atual) Representa o valor (ou endereço) das variáveis ou constantes usadas na chamada do subprograma
ExemploZ ← Media(8,7);
Paradigmas de Programação -prof Gláucya Carreiro Boechat 9
Parâmetrosreais: chamadora;fomais: subrotina.
Procedure Troca (var A,B: real);…
Troca ( x,y );…
Nomenclatura dos parâmetros
Paradigmas de Programação -prof Gláucya Carreiro Boechat 10
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 juntocom o parâmetro realParâmetros podem aparecer em qualquer ordem
Paradigmas de Programação -prof Gláucya Carreiro Boechat 11
Exemplos de Parâmetro de Palavra-chave
ADAfunction CALC_PAGAMENTO( RENDA : FLOAT; ISENCOES : INTEGER := 1; TARIFA_IMPOSTO : FLOAT) return FLOAT;…ChamadaPAGAMENTO := CALC_PAGAMENTO(200.0, TARIFA_IMPOSTO => 0.2);
Quando insencoes for ausente, o valor 1 é usado
Cfloat calculo_pagamento( float renda,
float tarifa_imposto, int isencoes = 1)…Chamadapagamento = calculo_pagamento( 200.0, 0.2) ;
Quando insencoes for ausente, o valor 1 é usado
Paradigmas de Programação -prof Gláucya Carreiro Boechat 12
Procedimentos e FunçõesCategorias de Subprogramas:
ProcedimentosSão coleções de instruções que definem computaçõesparametrizadasPodem produzir resultados para chamador se houver houvervariáveis que esteja visivel tanto para o procedimento comoquem fez a chamada
Funçõeslembram estruturalmente os procedimentos, Mas geralmente são modelas em funções matemática
O valor produzido pela execução da função é retornado aoChamadorSubstituindo efetivamente a própria chamada
Paradigmas de Programação -prof Gláucya Carreiro Boechat 13
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*)
endbegin (*programa principal*)
a:= 4; b := 2;troca(a,b);b := quadrado(a);
end.
Paradigmas de Programação -prof Gláucya Carreiro Boechat 14
Questões de projeto
Quais métodos de passagem de parâmetrossão usados?As variáveis locais são alocadasestaticamente ou dinamicamente?Definições de subprogramas podemaparecer em outras definições de subprogramas?Subprogramas podem ser sobrecarregados?
Paradigmas de Programação -prof Gláucya Carreiro Boechat 15
Ambientes de Referências LocaisVariáveis locais são variáveis que são definidasdentro de um subprograma, e geralmente têm o mesmo escopo do subprograma.
Implementação de variáveis locaisVariáveis locais podem ser dinâmicas na pilha
VantagensPermite recursividade, Locais de armazenamento podem ser compartilhados entre subprogramas
DevantagensAlocação/desalocação, tempo de inicializaçãoEndereçamento indiretoSubprogramas não podem ser sensíveis à história
Paradigmas de Programação -prof Gláucya Carreiro Boechat 16
Ambientes de Referências Locais
Variáveis locais podem ser estáticasMais eficienteSem overhead em tempo de execuçãoNão suportam recursão
Paradigmas de Programação -prof Gláucya Carreiro Boechat 17
Ambientes de Referências LocaisLinguagens 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 18
Métodos de Passagem de Parâmetros
Maneiras os parâmetros são transmitidospara subprogramas chamado.
Modelos de Passagem de Parâmetros:Passagem por valorPassagem por resultadoPassagem por valor-resultadoPassagem por referência
Paradigmas de Programação -prof Gláucya Carreiro Boechat 20
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 seu valor inicializa o parâmetro formalSe transmitido por Referência
Será necessario proteger o parâmetro contra escrita pelosubprograma chamado
C++ oferece um metodo efitivo de impor proteção contra a escritaem parâmetros passados por valor.
DesvantagensDesperdicio de memoria
Ex. Duplicação de array
Paradigmas de Programação -prof Gláucya Carreiro Boechat 21
Passagem por resultado (Modo de Saída)
Valores do subprograma são transmitidos de voltapara o invocador;Geralmente é utilizado Passagem por Valor;O parâmetro formal correspondente age como umavariável local
DesvantagensTempo 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 seuparâmetro real correspondente irá se tornar o valor de p1
Paradigmas de Programação -prof Gláucya Carreiro Boechat 22
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ópiaParâmetro real é copiado para o parâmetro formal naentrada do subprogramaE depois é copiado de volta na finalização do subprograma
DesvantagensTodas as de passagem por resultadoTodas as de passagem por valor
Paradigmas de Programação -prof Gláucya Carreiro Boechat 23
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
DesvantagensAcesso mais lento aos parâmetros formais (comparado com passagem por valor)Colisão
Exemplo Linguagem Cvoid fun(int *primeiro, int *segundo)
Paradigmas de Programação -prof Gláucya Carreiro Boechat 24
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 25
Métodos de passagem de parâmetros dasprincipais linguagens
FortranUtiliza Modo Entrada/Saída Antes do Fortran 77 - passagem por referênciaFortran 77 e depois - variáveis escalares são freqüentemente passadas por valor-resultado
CPassagem por valorPassagem por referência quando os parâmetros são ponteiros
JavaTodos os parâmetros são passados por valorParâmetros de objeto são passados por referência
Paradigmas de Programação -prof Gláucya Carreiro Boechat 26
Métodos de passagem de parâmetros dasprincipais linguagens
AdaTrês modos semânticos: Entrada, Saída, Entrada/Saída; Modo Entrada é o modo padrãoParâmetros formais
declarados out podem ser alterados mas não referenciadosdeclarados in podem ser referenciados mas não alteradosin out podem ser referenciados e alterados
C++Passagem por referência
C#Método padrão: passagem por valorPassagem por referência é especificado
Paradigmas de Programação -prof Gláucya Carreiro Boechat 27
Parâmetros que são nomes de subprogramas
Em algumas situações é mais convenientemanipular nomes de subprogramas puderem ser enviados como parâmetros a outros subprogramas
Pode ocorrer quando um subprograma precisa avaliar umafunção matemática
ExemploProcedure 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 28
Parâmetros que são nomes de subprogramas
C e C++funções não podem ser passadas comoparâmetros, mas ponteiros para funções podemser passados
Versões antigas de Pascal e de Ada nãopermitem subprogramas como parâmetros
Paradigmas de Programação -prof Gláucya Carreiro Boechat 29
Subprogramas Sobrecarregados
Subprograma Sobrecarregado é um subprograma que possui o mesmo nome de outro subprogramano 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
top related