SUBprogramaS2011
Tópicos que pretendemos abordar !IntroduçãoCaracterísticas geraisDefinições básicasEntradas de subprogramas Procedimentos e funçõesPassagem de ParâmetrosSubprogramas SobreCarregagosSubprogramas Genéricos
INTRODUÇÃO Problemas complexos trajem programas complexos como solução.
 Para facilitar a solução é possível dividir um grande problema em problemas menores.INTRODUÇÃO - CONCEITOColeção de instruções
Um subprograma, é um nome dado a um trecho de um programa mais complexo e que, em geral,    encerra em si próprio um pedaço da solução de um problema maior (o programa a que ele está subordinado).INTRODUÇÃO - VANTAGENSEconomia, tempo...
Reutilização.
Defeitos podem ser evitados, pois a replicação de código pode levar a modificações incompletas.
Aumento da legibilidade de um programa.
Abstração
Facilita o design de algoritmos, pois um problema é dividido em subproblemasINTRODUÇÃO - VANTAGENSdouble a, b, c;            a =  Convert.ToDouble(Console.ReadLine());            b =  Convert.ToDouble(Console.ReadLine());            c = a * b / 2.0;            Console.WriteLine("Valor de A = " + a);            Console.WriteLine ("Valor de B = " + b);            Console.WriteLine("Valor de A*B/2 = " + c);            a = a / 2.0;            b = b / 2.0;            c = a * b / 2;            Console.WriteLine("Valor de A = " + a);            Console.WriteLine ("Valor de B = " + b);            Console.WriteLine("Valor de A*B/2 = " + c);double a, b,c;a =  Convert.ToDouble(Console.ReadLine());b =  Convert.ToDouble(Console.ReadLine());c = a * b / 2.0;imprimir(a, b);a = a / 2.0;b = b / 2.0;c = a * b / 2;imprimir(a, b);
Características  geraisTodo subprograma tem um único ponto de entrada.
 Toda unidade de programa chamadora é suspensa durante a execução do subprograma chamado.
Existe um único subprograma em execução em qualquer momento dado (unidade de programa chamadora)
O controle sempre retorna ao chamador quando a execução do subprograma encerra-se.FLUXOGRAMA  BÁSICO
Existe Excessão?SIMNÃO
DEFINIÇÕES BÁSICASDefinição de subprograma     Descreve as interfaces e as ações da abstração de subprograma.Chamada a subprograma:   	Solicitação explicita para   executar o programaSubprograma ativo: Depois de ter sido chamado, o subprograma iniciou a execução mas ainda não a concluiu.DEFINIÇÕES  BÁSICASCabeçalho: 	A primeira linha da definição
 Oferece um nome para o subprograma.
Especifica a lista de parâmetros.<palavra especial><nome>(parâmetros):(retorno)
DEFINIÇÕES  BÁSICASPerfil dos parâmetros  	É a lista de parâmetros formais, incluindo o número, ordem e seus tipos.                    Muito interessante em subprogramas sobrecarregados.„Protocolo 	É o  seu perfil de parâmetros, e no caso de função, conjuntamente com o tipo de retorno. „Declaração 	Protótipo fornece o protocolo mas não o corpo do subprograma.
ENTRADAS DE SUBPROGRAMASAcesso direto à variáveis não-locais
Computação ocorre em diferentes dados atribuindo novos valores às variáveis não-locais.
Reduz confiabilidade
Passagem de parâmetros
Dados são acessados por nomes locais.
Mais flexível – computação parametrizada
Preocupação com o método de acessoPARÂMETROS FORMAIS O parâmetro no cabeçalho do subprograma.
 Freqüentemente se veicula ao armazenamento somente quando o subprograma é chamado.
Vinculo gerado pela variável do programa.PARÂMETROS  REAIS ou ATUAISUsados na chamada ao subprograma
Representa o valor (ou endereço) das variáveis ou constantes, utilizadas no ponto de invocação do subprograma.Correspondência entre parâmetros reais e formaisParâmetros PosicionaisVinculação efetuada pela ordem dos parâmetros.
  1º parâmetro atual é vinculado ao 1º parâmetro formal e assim por diante.
Vantagem
Ordem dos parâmetros é irrelevante;
Desvantagem
Programador tem de conhecer os nomes dos identificadores dos parâmetros formais.Ex: Visual Basic:ShowMesg(Mesg:="Hello World", MyArg1:=7)
VALORES  POR  OMISSÃO Valor default para o parâmetro formal caso não seja passado um parâmetro real.
Valores por omissão existem em:
Exemplo em C++: // calculo do valor máximo de 1, 2 ou 3 nº positivosProtótipo: intmaximo(int x,int y=0,int z=0);Invocação: cout << maximo(5) << maximo(5, 7);cout << maximo(4, 8, 9); Um valor por omissão é utilizado caso não seja especificado o corresponde parâmetro atual.PROCEDIMENTOS Exemplo em Pascalprocedure nome(argumentos);var {aqui colocamos as variáveis que serão usadas só neste procedimento}begin{aqui vai a parte executável, a lógica do procedimento}end;Coleção de instruções que definem computações parametrizadas
Definem novas instruções, como, por exemplo, Pascal não possui uma instrução de classificação
Podem produzir resultados no chamador por meio de
Variáveis não-locais.
Parâmetros formais que 	permitem a transferência 	de dados ao chamadorFUNÇÕESCREATE [OR REPLACE] FUNCTION nome_da_função    [ ( [(parâmetro, (parâmetro]) ]    RETURN tipodavariável de retornoIS | AS    [sessão de declaração]BEGIN    sessão de execução[EXCEPTION   sessão de excessão]END [nomedafunção];Semanticamente modeladas em funções matemáticasClassificadas como modelo confiável.O valor produzido por uma função é retornado ao código chamador, substituindo efetivamente a própria chamada.Pode definir novos operadores determinados pelos usuários, como, por exemplo, a exponenciação.
Procedimentos e funções existem no java?VV
QUER DIZER QUE VOID NÃO RETORNA NADA?VFPublicvoid  teste() {	System.out.Println(“Só testando”);return;}
Ambientes de Referência localOs subprogramas tem permissão para definir suas próprias variáveis.
Acesso fica restrito apenas ao subprograma que a declarou.
 Variáveis Locais
Elas podem ser estáticas ou dinâmicas.Lembrando Variáveis locais estáticasVantagens
Acesso direto
Não exige alocação e desalocação.
Mais eficiente.
Desvantagens
Não permite recursividade.
 Uma vez criada, o espaço de memória que ela ocupa não pode mais ser  alterado
A alocação de memória para esse tipo de variável é feita antes da execução  do programa.
Área de memória ocupada por ela se mantém constante durante toda a execução
Variáveis que existem o tempo todo.Lembrando Variáveis locais dinâmicasSão alocadas quando o subprograma se inicia e desalocadas quando ele é finalizado.O ambiente local é criado em cada ativação.„ „ Vantagens: Permitem recursividadeA memória utilizada pela pilha pode ser compartilhada entre subprogramas.Desvantagens:Tempo de reservar e libertar memória.Acesso pode ser indireto ao invés do acesso direto da estáticaNão pode reter valores de variáveis locais entre chamadas
Ambientes de Referência localAlgumas linguagens que permitem ambiente estático:„ 	„ „ Algumas Linguagens que permitem ambiente de Pilha dinâmica:„
Exemplo no caso do C ou C++ int somador (intlist [ ], intlistlen) {staticint soma = 0;intcont;	for (cont = 0; cont < listlen; cont ++)		soma += list [cont];return soma;}Só vai ser estática a menos que seja delcarada como static.
Só para lembra no java isso NÃO pode!!!! Métodos de Passagem de ParâmetrosFormas de transmitir os parâmetros para os subprogramas chamados.ModelosModelos semânticos métodos de passagem de parâmetrosModelos conceituais como as transferências de dados desenvolve-se na transmissão de parâmetrosModelos de implementação passagem de parâmetros
Modelo Semântico de Passagem de ParâmetrosOs parâmetros formais (lembram-se?) são caracterizados por um de três modelos significados diferentes.
Modo de entrada (in mode)
eles podem somente receber dados dos parâmetros reais correspondentes
Modo de saída (out mode)
eles podem somente transmitir dados dos parâmetros reais correspondentes
„Modo entrada/saída (inoutmode)
podem fazer ambosPERDIDOS ?Vamos tentar melhorar a explicação nos próximos slides
Modelos Implementação de Passagem de ParâmetrosProjetistas de Linguagens desenvolveram vários modelos para orientar a implementaçãodos  três modelos  básicos de transmissão de parâmetros. Passagem por valor
 Passagem por resultado
 Passagem por valor-resultado
 Passagem por referência
 Passagem por nomePassagem por ValorO valor do parâmetro REAL é usado para inicializar o parâmetro FORMAL, que se torna então uma variável local no subprograma.
Cópia física - o parâmetro REAL é avaliado e o seu valor é copiado para o parâmetro formal.
 Operações de armazenamento e de transferência pode ser custosa se o parâmetro for grande (array longo)Passagem por ResultadoUm parâmetro é passado por resultado
Nenhum valor é transmitido para o subprograma.
Logicamente é um modelo de implementação do modo saída.
O parâmetro FORMAL age como variável local, mas seu valor é passado para o parâmetro real ( variável) da chamada.
Problema
Tempo e espaço de memória.  (Passagem por Valor)
Colisão de parâmetros atuais. Ex.: sub(p1, p1).			No retorno: x é atribuído à p1, y é atribuído à p1			A ordem da atribuição determina o valor de p1
Passagem por Valor-ResultadoModo Entrada/Saida
Valor do parâmetro real é usado para inicializar o parâmetro formal, que age como variável local.
Parâmetros formais devem ter armazenamento local associado ao subprogama.
No fim o valor do parâmetro formal é transmitido de volta para o parâmetro real.

SubProgramas

  • 1.
  • 2.
    Tópicos que pretendemosabordar !IntroduçãoCaracterísticas geraisDefinições básicasEntradas de subprogramas Procedimentos e funçõesPassagem de ParâmetrosSubprogramas SobreCarregagosSubprogramas Genéricos
  • 3.
    INTRODUÇÃO Problemas complexostrajem programas complexos como solução.
  • 4.
    Para facilitara solução é possível dividir um grande problema em problemas menores.INTRODUÇÃO - CONCEITOColeção de instruções
  • 5.
    Um subprograma, éum nome dado a um trecho de um programa mais complexo e que, em geral, encerra em si próprio um pedaço da solução de um problema maior (o programa a que ele está subordinado).INTRODUÇÃO - VANTAGENSEconomia, tempo...
  • 6.
  • 7.
    Defeitos podem serevitados, pois a replicação de código pode levar a modificações incompletas.
  • 8.
  • 9.
  • 10.
    Facilita o designde algoritmos, pois um problema é dividido em subproblemasINTRODUÇÃO - VANTAGENSdouble a, b, c; a = Convert.ToDouble(Console.ReadLine()); b = Convert.ToDouble(Console.ReadLine()); c = a * b / 2.0; Console.WriteLine("Valor de A = " + a); Console.WriteLine ("Valor de B = " + b); Console.WriteLine("Valor de A*B/2 = " + c); a = a / 2.0; b = b / 2.0; c = a * b / 2; Console.WriteLine("Valor de A = " + a); Console.WriteLine ("Valor de B = " + b); Console.WriteLine("Valor de A*B/2 = " + c);double a, b,c;a = Convert.ToDouble(Console.ReadLine());b = Convert.ToDouble(Console.ReadLine());c = a * b / 2.0;imprimir(a, b);a = a / 2.0;b = b / 2.0;c = a * b / 2;imprimir(a, b);
  • 11.
    Características geraisTodosubprograma tem um único ponto de entrada.
  • 12.
    Toda unidadede programa chamadora é suspensa durante a execução do subprograma chamado.
  • 13.
    Existe um únicosubprograma em execução em qualquer momento dado (unidade de programa chamadora)
  • 14.
    O controle sempreretorna ao chamador quando a execução do subprograma encerra-se.FLUXOGRAMA BÁSICO
  • 15.
  • 16.
    DEFINIÇÕES BÁSICASDefinição desubprograma Descreve as interfaces e as ações da abstração de subprograma.Chamada a subprograma: Solicitação explicita para executar o programaSubprograma ativo: Depois de ter sido chamado, o subprograma iniciou a execução mas ainda não a concluiu.DEFINIÇÕES BÁSICASCabeçalho: A primeira linha da definição
  • 17.
    Oferece umnome para o subprograma.
  • 18.
    Especifica a listade parâmetros.<palavra especial><nome>(parâmetros):(retorno)
  • 19.
    DEFINIÇÕES BÁSICASPerfildos parâmetros É a lista de parâmetros formais, incluindo o número, ordem e seus tipos. Muito interessante em subprogramas sobrecarregados.„Protocolo É o seu perfil de parâmetros, e no caso de função, conjuntamente com o tipo de retorno. „Declaração Protótipo fornece o protocolo mas não o corpo do subprograma.
  • 20.
    ENTRADAS DE SUBPROGRAMASAcessodireto à variáveis não-locais
  • 21.
    Computação ocorre emdiferentes dados atribuindo novos valores às variáveis não-locais.
  • 22.
  • 23.
  • 24.
    Dados são acessadospor nomes locais.
  • 25.
    Mais flexível –computação parametrizada
  • 26.
    Preocupação com ométodo de acessoPARÂMETROS FORMAIS O parâmetro no cabeçalho do subprograma.
  • 27.
    Freqüentemente seveicula ao armazenamento somente quando o subprograma é chamado.
  • 28.
    Vinculo gerado pelavariável do programa.PARÂMETROS REAIS ou ATUAISUsados na chamada ao subprograma
  • 29.
    Representa o valor(ou endereço) das variáveis ou constantes, utilizadas no ponto de invocação do subprograma.Correspondência entre parâmetros reais e formaisParâmetros PosicionaisVinculação efetuada pela ordem dos parâmetros.
  • 30.
    parâmetro atual é vinculado ao 1º parâmetro formal e assim por diante.
  • 31.
  • 32.
    Ordem dos parâmetrosé irrelevante;
  • 33.
  • 34.
    Programador tem deconhecer os nomes dos identificadores dos parâmetros formais.Ex: Visual Basic:ShowMesg(Mesg:="Hello World", MyArg1:=7)
  • 35.
    VALORES POR OMISSÃO Valor default para o parâmetro formal caso não seja passado um parâmetro real.
  • 36.
  • 37.
    Exemplo em C++:// calculo do valor máximo de 1, 2 ou 3 nº positivosProtótipo: intmaximo(int x,int y=0,int z=0);Invocação: cout << maximo(5) << maximo(5, 7);cout << maximo(4, 8, 9); Um valor por omissão é utilizado caso não seja especificado o corresponde parâmetro atual.PROCEDIMENTOS Exemplo em Pascalprocedure nome(argumentos);var {aqui colocamos as variáveis que serão usadas só neste procedimento}begin{aqui vai a parte executável, a lógica do procedimento}end;Coleção de instruções que definem computações parametrizadas
  • 38.
    Definem novas instruções,como, por exemplo, Pascal não possui uma instrução de classificação
  • 39.
    Podem produzir resultadosno chamador por meio de
  • 40.
  • 41.
    Parâmetros formais que permitem a transferência de dados ao chamadorFUNÇÕESCREATE [OR REPLACE] FUNCTION nome_da_função    [ ( [(parâmetro, (parâmetro]) ]    RETURN tipodavariável de retornoIS | AS    [sessão de declaração]BEGIN    sessão de execução[EXCEPTION   sessão de excessão]END [nomedafunção];Semanticamente modeladas em funções matemáticasClassificadas como modelo confiável.O valor produzido por uma função é retornado ao código chamador, substituindo efetivamente a própria chamada.Pode definir novos operadores determinados pelos usuários, como, por exemplo, a exponenciação.
  • 42.
    Procedimentos e funçõesexistem no java?VV
  • 43.
    QUER DIZER QUEVOID NÃO RETORNA NADA?VFPublicvoid teste() { System.out.Println(“Só testando”);return;}
  • 44.
    Ambientes de ReferêncialocalOs subprogramas tem permissão para definir suas próprias variáveis.
  • 45.
    Acesso fica restritoapenas ao subprograma que a declarou.
  • 46.
  • 47.
    Elas podem serestáticas ou dinâmicas.Lembrando Variáveis locais estáticasVantagens
  • 48.
  • 49.
    Não exige alocaçãoe desalocação.
  • 50.
  • 51.
  • 52.
  • 53.
    Uma vezcriada, o espaço de memória que ela ocupa não pode mais ser alterado
  • 54.
    A alocação dememória para esse tipo de variável é feita antes da execução do programa.
  • 55.
    Área de memóriaocupada por ela se mantém constante durante toda a execução
  • 56.
    Variáveis que existemo tempo todo.Lembrando Variáveis locais dinâmicasSão alocadas quando o subprograma se inicia e desalocadas quando ele é finalizado.O ambiente local é criado em cada ativação.„ „ Vantagens: Permitem recursividadeA memória utilizada pela pilha pode ser compartilhada entre subprogramas.Desvantagens:Tempo de reservar e libertar memória.Acesso pode ser indireto ao invés do acesso direto da estáticaNão pode reter valores de variáveis locais entre chamadas
  • 57.
    Ambientes de ReferêncialocalAlgumas linguagens que permitem ambiente estático:„ „ „ Algumas Linguagens que permitem ambiente de Pilha dinâmica:„
  • 58.
    Exemplo no casodo C ou C++ int somador (intlist [ ], intlistlen) {staticint soma = 0;intcont; for (cont = 0; cont < listlen; cont ++) soma += list [cont];return soma;}Só vai ser estática a menos que seja delcarada como static.
  • 59.
    Só para lembrano java isso NÃO pode!!!! Métodos de Passagem de ParâmetrosFormas de transmitir os parâmetros para os subprogramas chamados.ModelosModelos semânticos métodos de passagem de parâmetrosModelos conceituais como as transferências de dados desenvolve-se na transmissão de parâmetrosModelos de implementação passagem de parâmetros
  • 60.
    Modelo Semântico dePassagem de ParâmetrosOs parâmetros formais (lembram-se?) são caracterizados por um de três modelos significados diferentes.
  • 61.
    Modo de entrada(in mode)
  • 62.
    eles podem somentereceber dados dos parâmetros reais correspondentes
  • 63.
    Modo de saída(out mode)
  • 64.
    eles podem somentetransmitir dados dos parâmetros reais correspondentes
  • 65.
  • 66.
    podem fazer ambosPERDIDOS?Vamos tentar melhorar a explicação nos próximos slides
  • 67.
    Modelos Implementação dePassagem de ParâmetrosProjetistas de Linguagens desenvolveram vários modelos para orientar a implementaçãodos três modelos básicos de transmissão de parâmetros. Passagem por valor
  • 68.
    Passagem porresultado
  • 69.
    Passagem porvalor-resultado
  • 70.
    Passagem porreferência
  • 71.
    Passagem pornomePassagem por ValorO valor do parâmetro REAL é usado para inicializar o parâmetro FORMAL, que se torna então uma variável local no subprograma.
  • 72.
    Cópia física -o parâmetro REAL é avaliado e o seu valor é copiado para o parâmetro formal.
  • 73.
    Operações dearmazenamento e de transferência pode ser custosa se o parâmetro for grande (array longo)Passagem por ResultadoUm parâmetro é passado por resultado
  • 74.
    Nenhum valor étransmitido para o subprograma.
  • 75.
    Logicamente é ummodelo de implementação do modo saída.
  • 76.
    O parâmetro FORMALage como variável local, mas seu valor é passado para o parâmetro real ( variável) da chamada.
  • 77.
  • 78.
    Tempo e espaçode memória. (Passagem por Valor)
  • 79.
    Colisão de parâmetrosatuais. Ex.: sub(p1, p1). No retorno: x é atribuído à p1, y é atribuído à p1 A ordem da atribuição determina o valor de p1
  • 80.
  • 81.
    Valor do parâmetroreal é usado para inicializar o parâmetro formal, que age como variável local.
  • 82.
    Parâmetros formais devemter armazenamento local associado ao subprogama.
  • 83.
    No fim ovalor do parâmetro formal é transmitido de volta para o parâmetro real.