Universidade Federal Rural de Pernambuco Departamento de ...gcb/pp/pp_subprogramas.pdf ·...

30
Subprogramas Prof. Gláucya Carreiro Boechat [email protected] Paradigmas de Linguagem de Programação Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Transcript of Universidade Federal Rural de Pernambuco Departamento de ...gcb/pp/pp_subprogramas.pdf ·...

Subprogramas

Prof. Gláucya Carreiro [email protected] 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 19

Modelos de passagem de parâmetros

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

Paradigmas de Programação -prof Gláucya Carreiro Boechat 30

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));}