Nomes, Variáveis e Vinculações Paradigmas de Programação Prof. Gláucya Carreiro Boechat [email protected] Nomes Toda linguagem de programação possui “nomes” com significados pré-definido As linguagens usam os nomes assim como os humanos: O nome identifica ações que deve ser executada. Identificar variáveis, rotinas,ou construções de programa Linguagem Imperativa são abstrações da arquitetura do computador de Von Neumann Processador e Memória Paradigmas de Programação prof Gláucya Carreiro Boechat 2 Von Neumann Paradigmas de Programação prof Gláucya Carreiro Boechat 3 Nomes Considerações acerca de um nome: Qual o comprimento máximo de um nome ? As palavras especiais são palavras reservadas ou palavras-chave? Existe distinção entre maiúsculas e minúsculas ? Podem ser utilização de Caracteres de Conexões ? ($ ? # @ ~ ; : / \ | ...) Paradigmas de Programação prof Gláucya Carreiro Boechat 4 Nome - Tamanho As primeiras Linguagens utilizavam nomes com apenas 1 caracter, pois eram basicamente matemáticas. Exemplos de linguagens: FORTRAN I: máximo de 6 FORTRAN 90 e C: máximo de 31 COBOL : máximo de 30 Ada e Java: sem limite C++: sem limite, mas implementadores geralmente impõem limites Paradigmas de Programação prof Gláucya Carreiro Boechat 5 Nome – Caracteres de Conexão Caracteres de conexão Exemplo ( _ ) Pascal, Modula-2 e FORTRAN 77 não permitem Linguagens mais recentes permitem Java, .NET Paradigmas de Programação prof Gláucya Carreiro Boechat 6 Nome - Distinção entre maiúsculas e Minúsculas Desvantagem: Problema de Legibilidade nomes semelhantes são diferentes Nomes em C, C++, Modula-2 e em Java fazem distinção entre maiúscula e minúscula Em Java Converter string em inteiro rest, Rest,ResT, REST, parseInt ParseInt e parseint (não são reconhecidas) FORTAN anteriores ao 90 Somente letras maiúsculas podiam ser usadas em nomes Paradigmas de Programação prof Gláucya Carreiro Boechat 7 Palavras Especiais São utilizadas para tornar programas mais legíveis ao denominar ações. Classificadas como : Reservadas, e em algumas, são somente Palavras-Chave. Paradigmas de Programação prof Gláucya Carreiro Boechat 8 Palavras Especiais Palavra Reservada: é independente do contexto e não pode ser utilizada como um nome. Exemplo: na linguagem Pascal integer char. Paradigmas de Programação prof Gláucya Carreiro Boechat 9 Palavras Especiais Uma Palavra-Chave é uma palavra que é especial em certos contextos, por exemplo em FORTRAN Real a (palavra-chave – seguida de um nome) Real = 3.4 (variável – seguida de operador de instrução) Problemas de legibilidade FORTRAN INTEGER REAL REAL INTEGER Paradigmas de Programação prof Gláucya Carreiro Boechat 10 Variáveis Variáveis são abstrações de uma célula de memória de um computador. Caracterizada pelos atributos: Nome Endereço Valor Tipo Tempo de Vida Escopo Paradigmas de Programação prof Gláucya Carreiro Boechat 11 Variáveis - Nome Nome Identifica uma entidade (Identificadores). Int var1; Nem todas as variáveis têm nome. Exemplo variáveis temporárias show( x+y ) Paradigmas de Programação prof Gláucya Carreiro Boechat 12 Variáveis - Endereço Células Memória Endereço Endereço de memória à qual ela está associada. Uma variável pode ter mais de uma célula de memória O endereço de uma variável é o endereço de sua primeira célula de memória. Uma variável pode ter diferentes endereços em diferentes lugares no programa Programa com dois subprogramas Sub1 Sub2 Definem uma variável com mesmo nome soma, Independentes uma da outra. Paradigmas de Programação prof Gláucya Carreiro Boechat 13 Variáveis - Endereço Células Memória Apelidos (Aliases) Os Apelidos existem quando duas ou mais variáveis apontam para o mesmo endereço de memória. (C, C++) Problema para a legibilidade Permite que uma variável tenha seu valor modifique por uma atribuição a uma variável dirente Paradigmas de Programação prof Gláucya Carreiro Boechat 14 Variáveis - Tipo Tipo Determina a faixa de valores das variáveis e o conjunto de operações definidas para os valores do tipo FORTRAN INTEGER Faixa de Valores -32.768 a 32.767 Operações Adição, subtração, multiplicação, divisão , etc. Paradigmas de Programação prof Gláucya Carreiro Boechat 15 Variáveis - Valor O valor de uma variável Conteúdo da(s) célula(s) de memória associado a uma variável. O valor de uma variável às vezes é conhecido como r-value (valor à direita) porque é o atributo necessário para avaliar a expressão que se encontra do lado direito de uma atribuição. contador := contador + 1; (l-value) (r-value) Para acessar o r-value, é necessário antes determinar o l-value (endereço da variável). Paradigmas de Programação prof Gláucya Carreiro Boechat 16 Variáveis – Tempo de Vida O tempo de vida de uma variável é o intervalo de tempo durante o qual um conjunto de células de memória está vinculado à uma variável. ALOCAÇÃO DESALOCAÇÃO Células Memória Células Memória Variável vinculado à células de memória tempo de vida Conjunto de células alocadas para o armazenamento dos dados de uma variável tempo Células novamente livres, após a Desalocação Paradigmas de Programação prof Gláucya Carreiro Boechat 17 O Conceito de Vinculação Uma vinculação (binding) é uma associação, como: Entre um atributo e uma entidade de execução Entre uma operação e um símbolo O momento em que uma vinculação se desenvolve é chamado de tempo de vinculação Paradigmas de Programação prof Gláucya Carreiro Boechat 18 Possíveis tempos de Vinculação Tempo de projeto da linguagem Vinculação de símbolos de operação à operação, ex. * (multiplicação) Tempo de implementação da linguagem Vinculação de um tipo (float) a um conjunto de valores possíveis Paradigmas de Programação prof Gláucya Carreiro Boechat 19 Possíveis tempos de Vinculação Tempo de Compilação Tempo de Carregamento Vinculação de uma variável a um tipo de dado em particular Vinculação de uma variável à célula de memória Tempo de Execução Vinculação de uma variável local não-estática a uma célula de memória Paradigmas de Programação prof Gláucya Carreiro Boechat 20 Vinculação Estática e Dinâmica Vinculação Estática Ocorrer antes do tempo de execução e Permanecer inalterada ao longo da execução de um programa Vinculação Dinâmica Ocorrer durante a execução ou puder ser modificada no decorrer da execução de um programa Paradigmas de Programação prof Gláucya Carreiro Boechat 21 Declaração de Variáveis - Explícita e Implícita Declaração Explícita Quando uma instrução em um programa que lista nomes de variáveis e especifica que elas são de um tipo particular Paradigmas de Programação prof Gláucya Carreiro Boechat 22 Declaração de Variáveis - Explícita e Implícita Declaração Implícita Quando o meio de associar variáveis a tipos por convenções em vez de instruções Linguagens FORTRAN, PL/I, BASIC e Perl Vantagem: capacidade de escrita Desvantagem: legibilidade Paradigmas de Programação prof Gláucya Carreiro Boechat 23 Vinculação Dinâmica de Tipos Vinculação dinâmica de tipos (JavaScript e PHP) A variável é vinculada ao tipo quando lhe é atribuído algum valor, por exemplo JavaScript Vantagem: list = [2, 4.33, 6, 8]; list = 17.3; Flexibilidade Desvantagens: Alto custo Difícil detecção de erros Paradigmas de Programação prof Gláucya Carreiro Boechat 24 Inferência de Tipos Inferência de tipos (ML, Miranda e Haskell) Ao invés de uma instrução de atribuição, tipos são determinados pelo contexto Em ML, fun circumf(r) = 3.14159 * r * r; fun vezes10(x) = 10*x; ML rejeita a função fun quadrado(x) = x * x; Opções fun quadrado(x:int) = x * x; fun quadrado(x) = (x:int) * x; fun quadrado(x) = x * (x:int); Paradigmas de Programação prof Gláucya Carreiro Boechat 25 Vinculação de Armazenamento Alocação Marcar\tomar uma célula de memória de um conjunto de memória disponível Desalocação Devolver a célula ao conjunto de memória disponível Paradigmas de Programação prof Gláucya Carreiro Boechat 26 Tempo de Vida de uma Variável inicia quando ela é vinculada a uma célula específica encerra quando ela é desvinculada Paradigmas de Programação prof Gláucya Carreiro Boechat 27 Variáveis – Tempo de Vida Classificação de acordo com o tempo de vida Variáveis Estáticas. Variáveis Dinâmicas em Pilha (stack). Variáveis Dinâmicas em Heap Explícitas. Variáveis Dinâmicas em Heap Implícitas. Paradigmas de Programação prof Gláucya Carreiro Boechat 28 Variáveis Estáticas As variáveis estáticas são Vinculadas a células de memória antes que se inicie a execução do programa e permanecem vinculadas até que a execução termine. Exemplo Vantagem FORTRAN I, II e VI, variáveis static do C, C++ e JAVA Eficiência (endereçamento direto). Desvantagem Pouca flexibilidade (não permitem recursão) Paradigmas de Programação prof Gláucya Carreiro Boechat 29 Variáveis Dinâmicas em Pilha (stack) São aquelas cuja a vinculações criam-se a partir da elaboração de suas instruções de declaração, mas seus tipos são vinculados estaticamente. A elaboração ocorre em tempo de execução Exemplo Variáveis locais em subprogramas C e métodos em Java Paradigmas de Programação prof Gláucya Carreiro Boechat 30 Variáveis Dinâmicas em Pilha (stack) Vantagem: permite recursão; compartilhamento de espaço de memória Desvantagens: Sobrecarga de alocação e de desalocação em tempo de execução Paradigmas de Programação prof Gláucya Carreiro Boechat 31 Variáveis Dinâmicas em Pilha Exemplo: Procedimento A chama Procedimento B. A variável Y do procedimento B é vinculada na Pilha. Procedimento B Procedimento A int Y int X Paradigmas de Programação prof Gláucya Carreiro Boechat 32 Variáveis Dinâmicas em Pilha Exemplo: Procedimento B encerra a sua execução liberando a memória destinada ao procedimento B com a variável Y. Procedimento A int X Paradigmas de Programação prof Gláucya Carreiro Boechat 33 Variáveis Dinâmicas no Heap Explícitas Variáveis Dinâmicas em Heap Explícitas células de memória sem nome alocadas (abstratas) e desalocadas por instruções explícitas em tempo de execução, especificadas pelo programador. Essas variáveis alocadas no Heap e desalocadas para o Heap só podem ser referenciadas por meio de variáveis de ponteiro ou de referência heap conjunto de células de armazenamento desorganização, devido ao fato de seu uso ser imprevisível. Paradigmas de Programação prof Gláucya Carreiro Boechat 34 Variáveis Dinâmicas no Heap Explícitas Exemplo: Objetos dinâmicos em C++ (new e delete) Todos os objetos em Java Vantagem: Convenientes para estruturas dinâmicas: listas encadeadas árvores Desvantagens: Dificuldade em usar ponteiros e referência Custo das referências para as alocações e desalocações Paradigmas de Programação prof Gláucya Carreiro Boechat 35 Variáveis Dinâmicas em Heap Explícitas As variáveis dinâmicas em heap implícitas são vinculadas ao armazenamento do heap somente quando lhe são atribuídos valores. Alocação e desalocação causadas por instruções de atribuição Vantagem Todas as variáveis em APL Todas as strings e vetores em Perl e em JavaScript Flexibilidade Desvantagens Ineficiente, pois todos os atributos são dinâmicos Perda de grande parte da capacidade de detectar erros Paradigmas de Programação prof Gláucya Carreiro Boechat 36 Variáveis Dinâmicas em Heap Implícitas Exemplo pode ser encontrado nos array flex da linguagem ALGOL68. arrays dinâmicos permitem que não sejam especificados limites de subscrito em sua declaração. Por exemplo, no array lista definido abaixo, o espaço do heap só será alocado após a atribuição: flex [1:0] int lista ... Lista := (4, 2, 3, 7) Paradigmas de Programação prof Gláucya Carreiro Boechat Neste momento a memória foi alocada 37