Nomes, Variáveis e Vinculações Paradigmas de Programação Prof. Gláucya Carreiro Boechat...
Transcript of Nomes, Variáveis e Vinculações Paradigmas de Programação Prof. Gláucya Carreiro Boechat...
Nomes, Variáveis e Vinculações
Paradigmas de Programação
Prof. Gláucya Carreiro Boechat
Paradigmas de Programação - prof Gláucya Carreiro Boechat
2
Nomes Toda linguagem de programação possui
“nomes” com significados pré-definido O nome identifica ações que deve ser executada.
As linguagens usam os nomes assim como os humanos: 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
3
Von Neumann
Paradigmas de Programação - prof Gláucya Carreiro Boechat
4
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
5
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
6
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
7
Nome - Distinção entre maiúsculas e Minúsculas Desvantagem:
Problema de Legibilidade nomes semelhantes são diferentes
rest, Rest,ResT, REST,
Nomes em C, C++, Modula-2 e em Java fazem distinção entre maiúscula e minúscula
Em Java Converter string em inteiro
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
8
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
9
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
10
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
11
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
12
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
13
Variáveis - Endereço
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.
Células Memória
Paradigmas de Programação - prof Gláucya Carreiro Boechat
14
Variáveis - Endereço
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
Células Memória
Paradigmas de Programação - prof Gláucya Carreiro Boechat
15
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
16
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.
Para acessar o r-value, é necessário antes determinar o l-value (endereço da variável).
contador := contador + 1; (l-value) (r-value)
Paradigmas de Programação - prof Gláucya Carreiro Boechat
17
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
tempo de vida
Variável vinculado àcélulas de memória
tempo
Células Memória
Conjunto de células alocadas para o armazenamento dos
dados de uma variável
Células novamente livres, após a Desalocação
Células Memória
Paradigmas de Programação - prof Gláucya Carreiro Boechat
18
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
19
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
20
Possíveis tempos de Vinculação Tempo de Compilação
Vinculação de uma variável a um tipo de dado em particular
Tempo de Carregamento 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
21
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
22
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
23
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
24
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
list = [2, 4.33, 6, 8]; list = 17.3;
Vantagem: Flexibilidade
Desvantagens: Alto custo Difícil detecção de erros
Paradigmas de Programação - prof Gláucya Carreiro Boechat
25
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
26
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
27
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
28
Variáveis – Tempo de Vida Classificação de acordo com o tempo de vida
Variáveis Dinâmicas em Heap Implícitas.
Variáveis Dinâmicas em Heap Explícitas.
Variáveis Dinâmicas em Pilha (stack).
Variáveis Estáticas.
Paradigmas de Programação - prof Gláucya Carreiro Boechat
29
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
FORTRAN I, II e VI, variáveis static do C, C++ e JAVA
Vantagem Eficiência (endereçamento direto).
Desvantagem Pouca flexibilidade (não permitem recursão)
Paradigmas de Programação - prof Gláucya Carreiro Boechat
30
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
31
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
32
Variáveis Dinâmicas em Pilha Exemplo:
Procedimento A chama Procedimento B. A variável Y do procedimento B é vinculada na Pilha.
ProcedimentoA
ProcedimentoB
int X
int Y
Paradigmas de Programação - prof Gláucya Carreiro Boechat
33
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.
ProcedimentoA
int X
Paradigmas de Programação - prof Gláucya Carreiro Boechat
34
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
35
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
36
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 Todas as variáveis em APL Todas as strings e vetores em Perl e em JavaScript
Vantagem 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
37
Variáveis Dinâmicas em Heap Implícitas
flex [1:0] int lista
...Lista := (4, 2, 3, 7)
Neste momento amemória foi alocada
Exemplo pode ser encontrado nos array flex da linguagem ALGOL-
68. 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: