SlideShare uma empresa Scribd logo
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.

Mais conteúdo relacionado

PDF
Patologia 08 degenerações - med resumos - arlindo netto
PPTX
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
PPTX
C++ Funções
PPT
Patogenicidade Bacteriana
PPTX
Doenças Auto Imunes
PPT
Aula n° 1
PPT
Micologia
Patologia 08 degenerações - med resumos - arlindo netto
Algoritmos - Aula 15 - Modularizacao e Escopo de Variaveis
C++ Funções
Patogenicidade Bacteriana
Doenças Auto Imunes
Aula n° 1
Micologia

Mais procurados (20)

DOCX
AIDI_Caderno de mapa para pediatria _FINAL.docx
DOCX
Prova microbiologia b1
PPTX
Sistema de ficheiros mais utilizados
PDF
Sistemas de Informação
PDF
Sistema Imunitário
PDF
Aula de Parasitologia Básica
PPSX
I micologia
PDF
Sistemas Multimídia - Aula 02 - Introdução
PPTX
Sistema imune
PDF
Aula 01 Propriedades gerais das respostas imunes
PPT
GCS - Aula 07 - Sistemas de Controle de Versões
PPTX
Cap 4- Teoria da Firma AA.pptx
PPTX
Lote economico - Fabio Boiani
PPTX
Técnicas histológicas – biologia celular
PPT
Lógica de Programação
PPTX
Custos de Produção
PDF
Aula 01 - Introdução ao Sistema de Informação
PPTX
Aula infecções de pele
PPTX
ICSA17 - Ativação de linfócitos B e Resposta Imune Humoral
PDF
ICSA17 - Hipersensibilidades
AIDI_Caderno de mapa para pediatria _FINAL.docx
Prova microbiologia b1
Sistema de ficheiros mais utilizados
Sistemas de Informação
Sistema Imunitário
Aula de Parasitologia Básica
I micologia
Sistemas Multimídia - Aula 02 - Introdução
Sistema imune
Aula 01 Propriedades gerais das respostas imunes
GCS - Aula 07 - Sistemas de Controle de Versões
Cap 4- Teoria da Firma AA.pptx
Lote economico - Fabio Boiani
Técnicas histológicas – biologia celular
Lógica de Programação
Custos de Produção
Aula 01 - Introdução ao Sistema de Informação
Aula infecções de pele
ICSA17 - Ativação de linfócitos B e Resposta Imune Humoral
ICSA17 - Hipersensibilidades
Anúncio

Destaque (13)

ODP
Aula c++ estruturas de dados
PDF
Apresentação c++ UFC-Quixadá
PDF
Aula 01 - Introdução ao C++
PDF
Aula 02 - Classes em C++ ( Parte 1 )
PDF
599026
PDF
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
PPTX
TRABALHO PARADIGMAS - C++
PDF
Aula 12 - Exercícios vetores unidimensionais
PPTX
Presentation on C++ Programming Language
PPT
Aula1 c++ builder
PDF
Aula 13 - Matrizes
PPTX
C++ Presentation
PPT
C++ programming
Aula c++ estruturas de dados
Apresentação c++ UFC-Quixadá
Aula 01 - Introdução ao C++
Aula 02 - Classes em C++ ( Parte 1 )
599026
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
TRABALHO PARADIGMAS - C++
Aula 12 - Exercícios vetores unidimensionais
Presentation on C++ Programming Language
Aula1 c++ builder
Aula 13 - Matrizes
C++ Presentation
C++ programming
Anúncio

Semelhante a SubProgramas (20)

PPT
Paradigmas de Linguagens de Programacao - Aula #3
PPT
Pesquisa ppi 2
PDF
Funções e procedimentos
PDF
Modulo3_0_Apontamentos_2.pdf
DOCX
Algoritmo e Complexidade - texto Aula1.docx
PDF
Subalgoritmos Profª Letíca Lopes
PPTX
Algoritmos - Procedimentos
PPTX
PPTX
RevisãoCompactaFuncoesPonteiro.pptx
PDF
Modulo3_0_Apontamentos_1.pdf
PPT
Paradigmas de Linguagens de programacao - Aula #2
PDF
PI_Aula09_-_Passagem_de_Para770metros.pdf
PPT
Módulo 1 - Introdução a algoritmos.ppt
PDF
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
PDF
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
PPTX
Aula 8 - Modularização e Funções.pptx
PPT
Apresentação final
PPTX
Programação - linguagem C - uso de funções
PDF
01-Paradigmas.pdf
PDF
Algumas notas sobre pascal
Paradigmas de Linguagens de Programacao - Aula #3
Pesquisa ppi 2
Funções e procedimentos
Modulo3_0_Apontamentos_2.pdf
Algoritmo e Complexidade - texto Aula1.docx
Subalgoritmos Profª Letíca Lopes
Algoritmos - Procedimentos
RevisãoCompactaFuncoesPonteiro.pptx
Modulo3_0_Apontamentos_1.pdf
Paradigmas de Linguagens de programacao - Aula #2
PI_Aula09_-_Passagem_de_Para770metros.pdf
Módulo 1 - Introdução a algoritmos.ppt
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 8 - Modularização e Funções.pptx
Apresentação final
Programação - linguagem C - uso de funções
01-Paradigmas.pdf
Algumas notas sobre pascal

Último (20)

PPTX
Ciências da Natureza e suas áreas de desenvolvimento
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PPTX
Programa Nacional de Saúde do Adulto.pptx
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PDF
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
PDF
A Revolução Francesa de 1789 slides história
PPTX
biossegurança e segurança no trabalho (6).pptx
PPT
sistema reprodutor para turmas do oitavo ano
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
Células Introdução para as aulas de EJA.
PDF
Organizador Curricular da Educação em Tempo Integral.pdf
PPTX
Noções de Saúde e Segurança do Trabalho.pptx
PDF
BINGOS_DAS_PALAVRAS_bingo das palavras.pdf
PDF
Formação politica brasil_2017.pptx.pdf
PPTX
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
PPT
História e Evolução dos Computadores domésticos
PPTX
435434725-A-Mineracao-No-Brasil-Colonial.pptx
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
PDF
saeb_documentos_de_referencia_versao_1.0.pdf
Ciências da Natureza e suas áreas de desenvolvimento
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
HISTÓRIA DO BRASIL - anos de Democracia.pptx
Programa Nacional de Saúde do Adulto.pptx
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
A Revolução Francesa de 1789 slides história
biossegurança e segurança no trabalho (6).pptx
sistema reprodutor para turmas do oitavo ano
Trabalho Cidades sustentáveis ou Utopia.pptx
Células Introdução para as aulas de EJA.
Organizador Curricular da Educação em Tempo Integral.pdf
Noções de Saúde e Segurança do Trabalho.pptx
BINGOS_DAS_PALAVRAS_bingo das palavras.pdf
Formação politica brasil_2017.pptx.pdf
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
História e Evolução dos Computadores domésticos
435434725-A-Mineracao-No-Brasil-Colonial.pptx
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
saeb_documentos_de_referencia_versao_1.0.pdf

SubProgramas

  • 2. Tópicos que pretendemos abordar !IntroduçãoCaracterísticas geraisDefinições básicasEntradas de subprogramas Procedimentos e funçõesPassagem de ParâmetrosSubprogramas SobreCarregagosSubprogramas Genéricos
  • 3. INTRODUÇÃO Problemas complexos trajem programas complexos como solução.
  • 4. Para facilitar a 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...
  • 7. Defeitos podem ser evitados, pois a replicação de código pode levar a modificações incompletas.
  • 8. Aumento da legibilidade de um programa.
  • 10. 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);
  • 11. Características geraisTodo subprograma tem um único ponto de entrada.
  • 12. Toda unidade de programa chamadora é suspensa durante a execução do subprograma chamado.
  • 13. Existe um único subprograma em execução em qualquer momento dado (unidade de programa chamadora)
  • 14. O controle sempre retorna ao chamador quando a execução do subprograma encerra-se.FLUXOGRAMA BÁSICO
  • 16. 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
  • 17. Oferece um nome para o subprograma.
  • 18. Especifica a lista de parâmetros.<palavra especial><nome>(parâmetros):(retorno)
  • 19. 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.
  • 20. ENTRADAS DE SUBPROGRAMASAcesso direto à variáveis não-locais
  • 21. Computação ocorre em diferentes dados atribuindo novos valores às variáveis não-locais.
  • 24. Dados são acessados por nomes locais.
  • 25. Mais flexível – computação parametrizada
  • 26. Preocupação com o método de acessoPARÂMETROS FORMAIS O parâmetro no cabeçalho do subprograma.
  • 27. Freqüentemente se veicula ao armazenamento somente quando o subprograma é chamado.
  • 28. Vinculo gerado pela variá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.
  • 32. Ordem dos parâmetros é irrelevante;
  • 34. Programador tem de conhecer 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. Valores por omissão existem em:
  • 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 resultados no chamador por meio de
  • 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ções existem no java?VV
  • 43. QUER DIZER QUE VOID NÃO RETORNA NADA?VFPublicvoid teste() { System.out.Println(“Só testando”);return;}
  • 44. Ambientes de Referência localOs subprogramas tem permissão para definir suas próprias variáveis.
  • 45. Acesso fica restrito apenas ao subprograma que a declarou.
  • 47. Elas podem ser estáticas ou dinâmicas.Lembrando Variáveis locais estáticasVantagens
  • 49. Não exige alocação e desalocação.
  • 53. Uma vez criada, o espaço de memória que ela ocupa não pode mais ser alterado
  • 54. A alocação de memória para esse tipo de variável é feita antes da execução do programa.
  • 55. Área de memória ocupada por ela se mantém constante durante toda a execução
  • 56. 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
  • 57. Ambientes de Referência localAlgumas linguagens que permitem ambiente estático:„ „ „ Algumas Linguagens que permitem ambiente de Pilha dinâmica:„
  • 58. 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.
  • 59. 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
  • 60. Modelo Semântico de Passagem 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 somente receber dados dos parâmetros reais correspondentes
  • 63. Modo de saída (out mode)
  • 64. eles podem somente transmitir dados dos parâmetros reais correspondentes
  • 66. podem fazer ambosPERDIDOS ?Vamos tentar melhorar a explicação nos próximos slides
  • 67. 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
  • 68. Passagem por resultado
  • 69. Passagem por valor-resultado
  • 70. Passagem por referência
  • 71. 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.
  • 72. Cópia física - o parâmetro REAL é avaliado e o seu valor é copiado para o parâmetro formal.
  • 73. 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
  • 74. Nenhum valor é transmitido para o subprograma.
  • 75. Logicamente é um modelo de implementação do modo saída.
  • 76. O parâmetro FORMAL age como variável local, mas seu valor é passado para o parâmetro real ( variável) da chamada.
  • 78. Tempo e espaço de memória. (Passagem por Valor)
  • 79. 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
  • 81. Valor do parâmetro real é usado para inicializar o parâmetro formal, que age como variável local.
  • 82. Parâmetros formais devem ter armazenamento local associado ao subprogama.
  • 83. No fim o valor do parâmetro formal é transmitido de volta para o parâmetro real.
  • 84. Partilha com a passagem por valor e a passagem por resultado as mesmas desvantagens. Passagem por ReferênciaOutro modelo no estilo entrada / saída
  • 85. Transmite um caminho, uma referência ao invés dos valores.
  • 86. O caminho de acesso é um endereço para a célula que armazena o parâmetro real.
  • 87. Ele acessa o parâmetro REAL na unidade do programa, ou seja o parâmetro real é partilhado com o subprograma chamado.Passagem por ReferênciaVantagensTransmissão de parâmetros eficiente tanto em termos de tempo como de espaço.
  • 88. Não é necessário espaço duplicado, nem qualquer atividade de cópia.DesvantagensProvavelmente será mais lento porque mais um nível de endereçamento indireto será necessário.
  • 89. Se for comunicação unidirecional com o subprograma, mudanças podem ser feitas no parâmetro real.
  • 90. Apelidos podem ser criados. Pois se torna disponível caminhos de acesso aos subprogramas. Ampliando o acesso as variáveis não locais.Passagem Por NomeModo entrada/saída que não corresponde a um só modelo de implementação.
  • 91. Parâmetro formal é substituindo textualmente pelo parâmetro real.
  • 92. Parâmetros Formais são vinculados a um método de acesso no momento de chamada.
  • 93. Vinculação real a um valor ou endereço é retardada até que uma referência ou atribuição ao parâmetro formal seja realizada. (Vinculação tardia)
  • 94. Aqui a forma do parâmetro real determina o modelo de implementação de parâmetrosRelembrando Vinculação tardiaTambém conhecida como late binding.
  • 95. O método a ser chamado só pode ser determinado em tempo de execução.
  • 96. Chamadas aos métodos sobrescritos, resolvidas em tempo de execução com base no tipo de objeto referenciado.
  • 97. Impede a  a verificação do tipo estático.
  • 98. o compilador tem que assumir que o método existe.
  • 99.  um erro de ortografia simples pode causar um erro de execução para ser acionada.Passagem Por Nome REPITO: Aqui a forma do parâmetro real determina o modelo de implementação de parâmetrosPor exemplo: Se parâmetro real é uma variável escalarentão passagem equivalente à passagem por referênciaSe parâmetro real é uma expressão constanteentão passagem equivalente à passagem por valorSe parâmetro real é um elemento de arrayou parâmetro real é uma expressão que contém uma variávelentão passagem diferente de quaisquer métodos apresentados
  • 100. Exemplo passagem por nome emprocedurefirst;integer array LIST[1:2];integer GLOBAL;procedure sub(PARAM); integer PARAM;begin PARAM := 3; // LIST[GLOBAL] := 3;end;begin LIST[1] = 40; GLOBAL := 2; sub(LIST[GLOBAL]);end;
  • 101. Exemplos de Métodos de Passagem de Parâmetros Passagem por valor se utilizarmos ponteiros como parâmetros, obtemos a semântica da passagem por referência.
  • 102. Modos semânticos: Saída e Entrada/Saída
  • 103. Os anteriores ao 77, a maioria utiliza passagem por referência.
  • 104. Os posteriores, passagem por valor-resultado.
  • 106. Introduziu passagem por nome (de difícil implementação).
  • 107. Também permite passagem por valor.Exemplos de Métodos de Passagem de Parâmetros ALGOL WIntroduziu passagem por valor-resultado
  • 109. Modos semânticos Entrada, Saída, Entrada/Saídaprocedure somador(A: in out INTEGER; B: in INTEGER;C: out FLOAT)Passagem por valor
  • 110. Passagem por referência (reservada var)
  • 111. Modos semânticos: Entrada e Entrada/SaídaPassagem de parâmetro no java é por valor ou por referência? ValorREF
  • 112. JAVA POSSUI DOIS TIPOS DE VARIÁVEISTipo referênciaEnglobam o tipo classes, interfaces e
  • 114. Uma variável do tipo referência recebe como valor uma referência para o tipo objeto.
  • 115. Na área de memória da variável é armazenado um ponteiro para a área de memória que está o objeto.Tipo primitivoEnglobam os tipos numéricos booleanos.
  • 116. Variável de tipo primitivo recebe um valor que é armazenado diretamente no espaço de memória alocado.RESPOSTA Java é SEMPRE POR VALOR. Ao passar uma variável como parâmetro de um método sempre será efetuada a cópia dos bits desta variávelPor exemplo:publicstaticvoidmain(String[] args) { Carro carro = newCarro(); carro.preco = 10; System.out.println("Preço antes : " + carro.preco); // Saída "Preço antes : 10"somaPreco(carro); System.out.println("Preço depois: " + carro.preco); // Saída "Preço depois: 10" }privatestaticvoidsomaPreco(Carro parametro) {parametro = null; }
  • 117. Implementando Métodos de Passagem de ParâmetrosPilha em tempo de execuçãoPilha inicializada e mantida ativa por um programa de sistema que gerencia a execução de programas.
  • 118. Usada para a ligação do controle de subprogramas.
  • 123. Por referência:Segmentos de código (thunks)Passagem por NomeImplementando Métodos de Passagem de ParâmetrosParâmetros de passagem por valor:
  • 124. Os valores dos parâmetros são copiados para localizações da pilha.
  • 125. Estas localizações servem como armazenamento para os parâmetros formais.
  • 126. Parâmetros de passagem por resultado:
  • 127. Os valores atribuídos aos parâmetros reais são colocados na pilha, de onde podem ser chamados após o encerramento do subprograma chamado.
  • 128. Parâmetros de passagem por valor-resultado
  • 129. Implementados a partir de sua semântica como combinação dos dois tipos de passagem.
  • 130. Localização da pilha é inicializada pela chamada e depois usada como variável local no subprograma.Implementando Métodos de Passagem de ParâmetrosParâmetros de passagem por referência
  • 131. O endereço do parâmetro é colocado na pilha
  • 132. O acesso aos parâmetros formais no subprograma chamado é feito pelo endereçamento indireto da localização do endereço na pilha.Implementando Métodos de Passagem de ParâmetroswxyzPrograma principal Pilha procedimento subino iníciovalor de aref. a ano finalvalor de batribua a bno inícioref. a cno finalvalor de catribua a cender. (no inicio)Endereço (d)Ref. a dCódigo
  • 133. Implementando Métodos de Passagem de ParâmetrosOBSERVAÇÃOUm erro fatal pode ocorrer com o parâmetro passado por referência e por valor resultadoPor exemplo:Um programa com 2 referências a constante 10.
  • 134. 1° Com parâmetro real em um subprograma.
  • 135. Suponha que subprograma modifique o parâmetro formal para 5.
  • 136. Como só tem uma localização para 10 durante a compilação todas as ocorrências a 10 serão referências ao valor 5.Isso de fato aconteceu com implementações no FORTRAN IV
  • 137. Implementando Métodos de Passagem de ParâmetrosParâmetros passados por nome
  • 139. Com segmentos de códigos chamados de Thunks.
  • 140. Thunks
  • 141. É chamado para toda referência a um parâmetro passado por um nome no subprograma.
  • 142. Alavia a referência no ambiente do subprograma que passou o parâmetro real.
  • 143. Veincula-se ao seu ambiente de referência na chamada que passo o parâmetro por nome.
  • 144. Retorna o endereço do parâmetro real.
  • 145. Processo lento e custoso em comparação ao endereçamento indireto simples passado, por referência.Arrays Multidimensionais como ParâmetrosQuando um array multidimensional é passado como parâmetro, e o subprograma é compilado separadamente, o compilador necessita conhecer o tamanho do array para construir a função de mapeamento.Exemplo do C/C++:
  • 146. Programador necessita declarar os tamanhos das dimensões, exceto da primeira. Este fato geral menor flexibilidade na programação.
  • 147. O compilador deve ser capaz de criar a função de associação para um array.Arrays são armazenados em ordem de linha maior 3 4 7 6 2 5 -> 3, 4, 7, 6,2,5, 1,3,8 1 3 8 colunas 0,1,2, 0,1,2, 0,1,2A função de associação relativa à ordem de linha maior para duas dimensões precisa do número de colunas, e não do número de linhas
  • 148. Arrays Multidimensionais como ParâmetrosQuando uma matriz é passada como um parâmetro, o parâmetro formal deve incluir o número de colunas no segundo par de colchetes
  • 149. Exemplo em C (Primeira dimensão não incluída):void soma(int matriz[][3]){int i, j, sum = 0; for (i = 0 ; i < 3; i++)... }voidmain() {int m[3][3]; ... Soma (a); // Função de mapeamento: } // Seja S = sizeof(int), L = linha, C = coluna m[L, C] <=> *(&m[0][0] + (3 * S * L) + S * C)
  • 150. Arrays Multidimensionais como ParâmetrosProblema:
  • 151. Não aceita matrizes com números diferentes de colunas
  • 152. Uma nova função deve ser escrita para cada matriz com um número diferente de colunas
  • 153. Impede a escrita de funções flexíveis
  • 154. Como contornar o problema?
  • 156. A matriz pode ser passada como um ponteiro, e as dimensões reais da matriz podem ser incluídas como parâmetros
  • 157. A função pode avaliar a função de associação de armazenamento usando a aritmética de ponteiros cada vez que um elemento da matriz precisar ser referenciadoArrays Multidimensionais como ParâmetrosExemplo em C (Solução para o problema da dimensão fixa de colunas):„ Passar um apontador para o array e o tamanho das dimensões como parâmetros.voidfun(float *mat, int linhas, intcols);„ Incluir a função de mapeamento em termos do tamanho dos parâmetros. Função de mapeamento (mat[i][j]): s = sizeof(float)mat[i][j] = *(mat+(s*i*cols)+s*j);
  • 158. Arrays Multidimensionais como ParâmetrosExemplo:type TIPO_MATRIZ is array (INTEGER range <>, INTEGER range <>) offloat; MATRIZ_1 : TIPO_MATRIZ (1..100, 1..20) //subscritos da matriz que estará como parâmetro realFunção que retorna a soma dos elementos de arrays do tipo TIPO_MATRIZfunction SOMADOR(MAT : in TIPO_MATRIZ) SOMA : FLOAT = 0.0;begin for LINHA in MAT’range(1) loop for COL in MAT’range(2) loop SOMA := SOMA + MAT(LINHA,COL);end loop; - for COL...end loop; - for LINHA...return SOMA;end SOMADOR;O atributo RANGER retorna a faixa de subscritos nomeado da matriz passada.
  • 159. Outras linguagens podem lidar de forma diferente com o problema de passar matrizes multidimendionais.
  • 160. ADA determina o tamanho definido das dimensões de todas as matrizes usadas como parâmetros na hora da compilação.
  • 161. Uma matriz não-restringida pode ser parâmetro formal e o código obtem a informação sobre a faixe de indices do parâmetro real associado.Arrays Multidimensionais como Parâmetrosfloat somador (floatmat[][]){float soma = 0.0f;for (int linha = 0; linha < mat.length; linha++) { for (int coluna = 0; coluna < mat[linha].length; coluna++) { soma += mat[linha][coluna]; } // for para linha } // for para colunareturn soma; }Uma vez que cada vetor tem seu próprio valor de tamanho, matriz também tem.Como funciona no Java?Semelhante a ADA. Em JAVA arrays são objectos, onde cada array herda uma constante (lenght) com o tamanho do array quando o objecto é criado.
  • 162. O parâmetro formal é a variável com colchetes vazios.
  • 163. Cada dimensão pode ser obtida no subprograma usando-se o atributo length.CONSIDERAÇÕPES DE PROJETOEscolha de métodos de passagem de parâmetroEficiência
  • 164. Passagem por referência é o modo mais eficiente para se transmitir estruturas de grande dimensão
  • 165. Necessidade de transferência unidirecional ou bidirecional de dados
  • 167. acesso limitado à variáveis externas, o que significa unidirecional quando possível.
  • 168. Há uma consideração prática em conflito com esse princípio.
  • 169. Por exemplo passar array de grande porte para um subprograma que não modifique tem como preferência um método unidirecional.CONSIDERAÇÕPES DE PROJETOOs tipos de parâmetros reais são verificados em relação aos tipos de parâmetros formais?
  • 170. Confiabilidade exige que os tipos dos parâmetros reais sejam verificados quanto a coerência com os tipos dos parâmetros formais correspondentes
  • 171. Sem essa verificação de tipos, pequenos erros tipográficos podem levar a erros de programa difíceis de diagnosticar porque não são detectados pelo compilar ou pelo sistema em tempo de execução
  • 172. No C original e no Fortran 77 não existe verificação de tipos.Parâmetros que são Nomes de SubprogramaExiste verificação de tipo dos parâmetros do subprograma utilizado como parâmetro real?
  • 173. „ Pascal inicial e FORTRAN 77: Não;
  • 174. „ Novas versões de Pascal, Modula-2, e FORTRAN 90: Sim;
  • 175. „ Ada não permite subprograma como parâmetros;
  • 176. „ C/C++: funções não podem ser passadas como parâmetros, mas pode-se transmitir apontador para funções (este contém o protocolo da função);
  • 177. Parâmetros são verificados quanto a tipos.60Ambiente de referenciamento dos subprogramas que são enviados como parâmetros
  • 179. Vinculação rasa – o ambiente de instrução de chamada que ordena o subprograma passado.
  • 180. Vinculação profunda – o ambiente da definição do subprograma passado.
  • 181. Vinculação Ad hoc – o ambiente da instrução de chamada que passou o subprograma como um parâmetro real.Parâmetros que são Nomes de Subprograma (3)
  • 182. Subprogramas61procedure SUB1; var x : integer;procedure SUB2;beginwrite (‘x=‘, x)end; {de sub2}procedure SUB3; var x : integer;begin x := 3;SUB4(SUB2)end; {de sub3}procedure SUB4(SUBX); var x : integer;begin x := 4; SUBXend; {de sub4}begin {de sub1} x := 1; SUB3end; {de sub1}Parâmetros que são Nomes de Subprograma Se vinculação profunda, x = 1Se vinculação ad hoc, x = 3Se vinculação rasa, x = 4
  • 183. 62Ex. de linguagens:Vinculação profunda – é utilizado em linguagens de escopo estático (C e C++), porque o ambiente de definição é o mais natural.Vinculação rasa – é utilizado em linguagens de escopo dinâmico (Pascal e SNOBOL), onde o ambiente do subprograma invocado é mais natural.Parâmetros que são Nomes de Subprograma (5)
  • 184. Subprogramas63Subprogramas Sobrecarregados Subprogramas podem ser sobrecarregados?É um subprograma que possui o mesmo nome de outro subprograma num mesmo ambiente de referência (escopo), contudo têm de ter protocolos diferentes.
  • 185. C++ e Ada possuem sobrecarga de subprogramas predefinidos e programadores podem implementar novos subprogramas sobrecarregados.
  • 186. Exemplo em C++:intmaximo(int x, int y) { return x>y ? x : y; }doublemaximo(double x, double y) { return x>y ? x : y; }intmaximo(int x, int y, int w, int z) { returnmaximo(maximo(x,y),maximo(y,z));}
  • 187. Subprogramas64Ex. em C++:intmaximo(int x, int y) { return x>y ? x : y; }doublemaximo(double x, double y) { return x>y ? x : y; }intmaximo(int x, int y, int w, int z) { returnmaximo(maximo(x,y),maximo(y,z));}Subprogramas Sobrecarregados
  • 188. Subprogramas Genéricos Pense no seguinte problema.
  • 189. Escrever um algoritmo de ordenação para vetores independente de seu tamanho.
  • 190. Como fica a passagem de parâmetros?Subprogramas GenéricosComo solução se cria um subprograma genérico, ou seja, que leva parâmetros de diferentes tipos.
  • 191. Um subprograma genérico ou polimórfico é aquele que recebe parâmetros de tipos diferentes em diferentes ativações
  • 194. Não precisa implementar o mesmo algoritmo em diferentes subprogramas. Subprogramas GenéricosPolimorfismo AD-HOC
  • 196. Permite ter funções de mesmo nome em classes sem relação.Duas funções/métodos com o mesmo nome mas assinaturas diferentes.Termo pode ser traduzido como  "para fim específico“.
  • 199. Funções de mesmo nome e parâmetros diferentes.
  • 200. Torna possível a escolha automática do método a adotar por razão do tipo do parâmetro passado.Subprogramas GenéricosPolimorfismo Paramétrico Exemplo:Int adição ( int A, int B ) - Soma de totalidades.Float adição (float A, float B ) – Soma de pontos flutuantes.Char adição (char A, char B ) - Concatenação de 2 caracteres.Observação: A assinatura do método define quem será chamado.Perceberam que por ter o mesmo nome parece que existe apenas um único subprograma.
  • 201. Como essas unidades são genéricas recebem o título de unidades genéricasSubprogramas70generictype ELEMENT is private;typeVECTOR is array (INTEGER range <>) of ELEMENT;procedureGENERIC_SORT(LIST: in out VECTOR);procedureGENERIC_SORT(LIST: in out VECTOR) is TEMP : ELEMENT;begin for IND_1 in LIST'FIRST .. IND_1'PRED(LIST'LAST) loop for IND_2 in INDEX'SUCC(IND_1) .. LIST'LASTloopifLIST(IND_1) > LIST(IND_2) then TEMP := LIST(IND_1); LIST(IND_1) := LIST(IND_2); LIST(IND_2) := TEMP;endif;end loop; - end for IND_1end loop; - end for IND_2 endGENERIC_SORT;Subprogramas Genéricos Exemplo de ordenação genérica em AdaTIPO GENÉRICONÚMERO QUALQUER DE ELEMENTOS
  • 202. COMPILAR POR PARTESCompilar um programa por partes é fundamental para grandes softwares.Somente módulos precisam ser compilados (Unidades Chamadoras)LinkEditor é o programa que parte do sistema operacional que coleta as unidades compiladas.Em poucas palavras compilar só o que foi modificado
  • 203. COMPILAÇÃO SEPARADAExemplo em Podemos compilar cada arquivo .c separadamente, produzindo um arquivo .o  para arquivo .c Ex.:  prompt$  gcc ­c arquivo.cPara gerar o executável, devemos então passar os arquivos .o Ex.:  prompt$  gcc principal.c arquivo.oUnidades de compilação compiladas em tempos diferentes.
  • 204. Sem independência se usarem entidades de outra.
  • 205. Usada se for necessária fazer verificação de interface.
  • 206. O compilador precisa de muitas informações sobre as entidades de programa ( Variáveis, tipos, protocolos, ordem, retorno).COMPILAÇÃO SEPARADAÉ necessário inserir o protótipo da função soma em principal.c.
  • 207. COMPILAÇÃO INDEPENDENTE Não há necessidade de uma ordem de compilação e a quantidade e os tipos dos parâmetros não são checados entre chamada e definição.
  • 208. Quando um programa chama outro subprograma que é compilado pelo mesmo arquivo os 2 de fato compilados independentemente.
  • 209. Por exemplo a interface de parâmetros entre unidades de programa FORTRAN 77 nunca é verificada quanto a compatibilidade dos tipos. Teste Básico.Tudo bem que a explicação não foi das melhores mais vamos ver se vocês entenderam algo.
  • 212. COMPILAÇÃO SEPARADA E INDEP.Separada
  • 214. Sem relação mestre-escravo entre chamador e chamado.
  • 215. Surgiu 1° na área de análise sintática . Usado no SIMULA-67 que tinha como propósito simular sistemas com processos independentes.
  • 217. Frequentemente não começar pelo inicio que não é o inicio.
  • 218. Criada na aplicacação por uma unidade-mestra e não por outra co-rotina.
  • 219. Quando todo o conjunto de co-rotinas são criadas o programa mestre RETOMA uma co-rotina que rotorma outra entre si até o fim do trabalho.EXEMPLOJogo de CartasCom 4 jogadores que usam a mesma estragégia.Simularemos o jogo fazendocom que uma unidade de programa-mestre crie uma família de co-rotinas.Cada uma com suas mão.(Coleção ou cartas) O programa mestre retona –corotinas jogadores, que podem retoma outra co-rotina até o fim jogo.
  • 221. Co-RotinasObs: Tipicamente, co-rotinas repetidamente retomam a execução entre si, possivelmente em laço infinito.
  • 222. DúvidasPerguntem antes que o professor pergunte!!!!