resumodeaulaslp1-120404204313-phpapp02
27 pág.

resumodeaulaslp1-120404204313-phpapp02

Disciplina:Linguagens de Programação I252 materiais732 seguidores
Pré-visualização7 páginas
como o seu valor. A variável não é a única que está sujeita à vinculação.

 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 – ao se declarar uma variável, declara-se um endereço. Se o endereço é sempre o mesmo gera

uma complicação na flexibilidade.

 Vinculação estática - sempre a mesma associação em toda a execução do programa.

 Vinculação dinâmica – 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 – 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.

 Tempo de implementação de programa –

 Tempo de compilação – 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.

 Tempo de ligação – 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.

 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.

 Tempo de execução – Tempo entre uma execução e outra. A partir do comando inicial de executar.

 14

VINCULAÇÃO DE NOME

 Cada instrução possui um nome referente.

 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

 Palavras reservadas – possuem sempre o mesmo significado. São vinculadas em tempo de projeto da

linguagem.

 Palavras - chave – são especiais apenas em algum determinado contexto.

Ambas são coisas diferentes.

Palavras pré-definidas – algumas vezes uma palavra está ligada com uma linguagem por questões de facilidade.

Como por exemplo o “Writeln” de Pascal, que significa escrever algo na saída padrão.

ALIASES

 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.

 Solução: o uso dos Namespaces.

 Auxiliam a distinguir os nomes de cada coisa do programa.

Algo parecido com “nome” e “sobrenome” para uma melhor identificação/controle extra, fazendo com que se haja

muito menos conflitos na linguagem.

 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 (“globais”)

É importante criar “pedaços” 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

 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 “mesma coisa”

 Compatibilidade por nome (dois tipos são iguais se eles possuem o mesmo nome).

 Compatibilidade por estrutura (dois tipos são iguais se possuem as mesmas partes internas).

 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.

 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
 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.

 Stack-dinâmica – 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.

 Heap-dinâmica explícita – Demorado, é um controle um pouco mais “bagunçado” , 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 “new”.

 Heap-dinâmica implícita – Não se manda fazer o controle. Como exemplo, PHP. Usada em casos em