resumodeaulaslp1-120404204313-phpapp02
27 pág.

resumodeaulaslp1-120404204313-phpapp02


DisciplinaProgramação I20.493 materiais239.719 seguidores
Pré-visualização7 páginas
como o seu valor. A variável não é a única que está sujeita à vinculação. 
\uf0fc Deve-se entender a variável como algo que se está vinculado com um nome, um tipo, um armazenamento 
(endereço) e valor. Mas não necessariamente com todos. Tais itens podem variar ao longo do 
tempo/execução. 
 
Problema do endereço \u2013 ao se declarar uma variável, declara-se um endereço. Se o endereço é sempre o mesmo gera 
uma complicação na flexibilidade. 
 
\uf0fc Vinculação estática - sempre a mesma associação em toda a execução do programa. 
\uf0fc Vinculação dinâmica \u2013 Associação da variável com mais coisas na execução do programa. Pode-se mudar 
várias vinculações, o nome, o tipo, o endereço, o valor da variável. 
 
Projeto de linguagem \u2013 coisas que acontecem no projeto. Em Pascal, BEGIN está vinculado ao projeto de linguagem. 
*Implementação de linguagem, construção do compilador ou implementador da linguagem. 
\uf0a7 Tempo de implementação de programa \u2013 
\uf0a7 Tempo de compilação \u2013 momento da tradução do código fonte em código objeto, as instruções escritas de 
uma forma mais próxima do que o hardware entende. 
\uf0a7 Tempo de ligação \u2013 tempo em que o compilador (link editor) faz as vinculações. Mais especificamente, com 
endereços de memória, outro exemplo, os comandos importados de bibliotecas. Algum programa ira pegar 
as instruções de outros lugares e inserir no seu programa. 
\uf0a7 Tempo de carregamento - após criar o executável em linguagem de maquina, há certas coisas que faltam 
serem resolvidas. A Cópia das instruções do HD para algum lugar na memória ou outro local é chamado de 
tempo de carregamento. 
\uf0a7 Tempo de execução \u2013 Tempo entre uma execução e outra. A partir do comando inicial de executar. 
 
 
 
 
 
 
 14 
VINCULAÇÃO DE NOME 
 
\uf0fc Cada instrução possui um nome referente. 
\uf076 Há variáveis que não possuem nomes: 
Print (a+b) 
O a+b serão resolvidos e retornados para alguma outra variável de forma que : 
Print (x) onde x é igual a a+b 
 
\uf0b7 Palavras reservadas \u2013 possuem sempre o mesmo significado. São vinculadas em tempo de projeto da 
linguagem. 
 
\uf0b7 Palavras - chave \u2013 são especiais apenas em algum determinado contexto. 
Ambas são coisas diferentes. 
Palavras pré-definidas \u2013 algumas vezes uma palavra está ligada com uma linguagem por questões de facilidade. 
Como por exemplo o \u201cWriteln\u201d de Pascal, que significa escrever algo na saída padrão. 
 
ALIASES 
 
\uf0fc Mais de um nome para a mesma coisa. 
Ex: passagem de parâmetro por referência. 
 
NAMESPACES 
 
Erros de nomes comuns, acontecem geralmente com bibliotecas. O que acontece é que o compilador não consegue 
distinguir uma coisa de outra. 
\uf0fc Solução: o uso dos Namespaces. 
\uf0fc Auxiliam a distinguir os nomes de cada coisa do programa. 
Algo parecido com \u201cnome\u201d e \u201csobrenome\u201d para uma melhor identificação/controle extra, fazendo com que se haja 
muito menos conflitos na linguagem. 
\uf076 Desvantagem: complicações a mais e uma maior necessidade de atenção. 
 
 
 
 
 15 
Escopo 
 
Lugares das instruções em que o nome é válido 
Declaração da variável. Um recurso é utilizado para que o mesmo nome possa ser utilizado para outras coisas, então 
divide-se o programa em varias partes. Mais internas e mais externas. Está inicialmente ligado às funções, ou 
subprogramas. 
*Variáveis locais 
*Variáveis externas (\u201cglobais\u201d) 
É importante criar \u201cpedaços\u201d de códigos, cada um com seus nomes, variáveis respectivas, criando uma 
independência entre elas e facilitando a programação. 
Efeito colateral: quando o valor de uma variável muda a partir de outro pedaço do programa em outro local. São 
desvantajosos, pelo fato de que diminuiu a independência das partes do programa. 
Para criar mais partes independentes do programa é necessário que se use os recursos da linguagem para se limitar 
a múltipla utilização de nomes. 
Diretriz do escopo mínimo: projetar os nomes das variáveis do programa para que eles sejam utilizados 
especificamente em sua parte especifica. 
Comparando C++ com Pascal, ao se declarar um subprograma em pascal é necessário que se tenha uma seção 
específica de declaração de variáveis, e estritamente naquele local que serão visíveis em todo o trecho do 
subprograma. Já em C++ não se tem uma seção especifica d declaração de variáveis, a declaração acontece em 
qualquer lugar do código, mais um recurso da linguagem para reduzir o escopo. 
ESCOPO ESTÁTICO 
O COMPILADOR SABE QUE qualquer instrução de códigos os nomes que são validos e os que não são. Neste tipo de 
escopo as regras são aplicáveis antes da execução. 
ESCOPO DINÂMICO 
Regras são definidas em função da execução. 
VINCULAÇÃO DE TIPOS 
Associação das variáveis com os tipos, normalmente é realizada antes da operação, só posso somar se souber o tipo 
das variáveis. Ao se restringir as variáveis em tipos pode-se restringir o que o programador irá fazer. 
Pode ser explícita ou implícita. 
Estática ou dinâmica 
Explícita: quando se escreve a vinculação de tipos 
Na dinâmica, o compilador é mais simples de ser feito. Na estática, tem-se mais eficiência, pois não se precisa gerar 
o código para se controlar o sistema de tipos. Sabendo o tipo o compilador pode fazer otimizações, dependendo da 
situação o compilador pode passar mais tempo com o código. Nas linguagens com vinculação dinâmica, é comum 
que se possa mudar o tipo. 
INFERÊNCA DE TIPOS 
\uf076 Estática e implícita / Sujeito à redundância 
 
 16 
Coerção (implícita) X Conversão (explícita) 
Quando se diz que se muda o tipo de uma variável quer se dizer que há uma variável correspondente a um espaço na 
memória, escolhe-se outro lugar na memória para fazer uma nova vinculação. 
B = (float) a 
 
cria=se uma variável temporária copia-se o valor para B. 
 
COMPATIBILIDADE DE TIPOS 
 
Tipos que podem ser utilizados uns nos lugares do outros como se forem a \u201cmesma coisa\u201d 
\uf0b7 Compatibilidade por nome (dois tipos são iguais se eles possuem o mesmo nome). 
\uf0b7 Compatibilidade por estrutura (dois tipos são iguais se possuem as mesmas partes internas). 
\uf0b7 Herança. 
 
Type Graus = real; 
 Radianos = real; 
Function Seno (x:graus) 
Os tipos acima são compatíveis 
 
Var vet: array [1..100] of integer; 
Ordena (var v: array [1..100] of integer); 
Os tipos acima não são compatíveis 
 
Frequentemente tem-se tipos que são espalhados pela memória, normalmente se faz isso com ponteiro. Uma das 
partes do tipo normalmente são ponteiros que apontam para os lugares que possuem as partes do programa. 
 
Obs.: quando se usa compatibilidade para nome, é frequente que se use comparações globais de tipo. 
 
\uf0fc O compilador precisa conhecer todos os nomes para determinar as compatibilidades de tipos, se fazemos 
declarações de tipos que só valem em uma parte do código podem ocorrer erros. 
 
 
 
 
 17 
Vinculação ao Armazenamento 
\uf0b7 Estática - processo simples e gera código eficiente, mas não aproveita muito bem a memória. 
 Inicialmente era estática, só que à medida que os programas aumentaram, necessita dividir o programa em 
programas independentes, uma variável para cada subprograma, não para o programa todo. O ideal seria vincular 
na hora da execução respectiva e desvincular na hora que se acaba a execução. 
\uf0b7 Stack-dinâmica \u2013 simples, é fonte de problemas comuns, é de sistema dinâmico, a vinculação muda ao 
longo da execução, mas segue um controle de pilha, de forma que se empilham endereços ou espaços de 
armazenamento daquelas variáveis, de tal forma que se desempilha economizando memória. É a mais 
comum atualmente. 
\uf0b7 Heap-dinâmica explícita \u2013 Demorado, é um controle um pouco mais \u201cbagunçado\u201d , mais complicado 
(lento), é muito mais demorado se alocar uma heap-dinâmica explícita do que uma Stack Dinâmica, porém 
consegue-se fazer mais coisas que esta, principalmente em linguagens em que podem se abstrair mais 
coisas. 
Em Java utiliza-se o comando \u201cnew\u201d. 
\uf0b7 Heap-dinâmica implícita \u2013 Não se manda fazer o controle. Como exemplo, PHP. Usada em casos em