Este documento resume os principais conceitos de subprogramas, incluindo suas vantagens, tipos (procedimentos e funções), métodos de passagem de parâmetros e ambientes de referência local. Aborda definições básicas de subprogramas e explica os modelos de implementação da passagem de parâmetros, como passagem por valor, referência e nome.
18. Especifica a lista de parâmetros.<palavra especial><nome>(parâmetros):(retorno)
19. DEFINIÇÕES BÁSICAS Perfil 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.
21. Computação ocorre em diferentes dados atribuindo novos valores às variáveis não-locais.
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.
57. Ambientes de Referência local Algumas linguagens que permitem ambiente estático: Algumas Linguagens que permitem ambiente de Pilha dinâmica:
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
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,2 A 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.
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)
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
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. Subprogramas 61 procedure SUB1; var x : integer; procedure SUB2; begin write (‘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; SUBX end; {de sub4} begin {de sub1} x := 1; SUB3 end; {de sub1} Parâmetros que são Nomes de Subprograma Se vinculação profunda, x = 1 Se vinculação ad hoc, x = 3 Se vinculação rasa, x = 4
183. 62 Ex. 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.
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));}
202. COMPILAR POR PARTES Compilar 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