• Nenhum resultado encontrado

Paradigmas de LP parte 3

N/A
N/A
Protected

Academic year: 2019

Share "Paradigmas de LP parte 3"

Copied!
57
0
0

Texto

(1)

Disciplina:

Paradigmas de

Linguagens de

Programação

Parte 3

(2)

2

Nomes

• Têm um uso mais amplo do que simplesmente para variáveis.

• Também estão associados a rótulos, subprogramas, constantes e outras construções de programas.

(3)

Nomes

• Principais questões de projeto de LP para nomes:

• Qual é o tamanho máximo de um nome?

• Os LPs fazem distinção de nomes compostos por letras maiúsculas e minúsculas?

• Podem ser usados caracteres especiais como “/”, “\”, “%”, “$”, “#”, “@” na definição de nomes?

(4)

4

Nomes

• Definição do livro-texto:

“Um nome é uma cadeia de caracteres usada para identificar alguma entidade de um programa.”

Alguns exemplos:

• Fortran I até 6 caracteres.

• Fortran IV e C até 31 caracteres.

(5)

Nomes

• As formas de nomes comumente aceitáveis para as LPs

modernas é composta de uma cadeia com limite de tamanho razoavelmente longo.

• Se for o caso, com algum caractere de conexão como o “_”.

• Em algumas LPs, letras maiúsculas e minúsculas em nomes são distintas.

Exemplos: C, C++, Java

(6)

6

Nomes

• A distinção entre maiúsculas e minúsculas viola o princípio de projeto segundo o qual construções de linguagem de

aparência semelhante devem ter o mesmo significado.

Exemplo: Em C++, os nomes rosa, Rosa e ROSA

denotam entidades diferentes.

• No C, este problema pode ser evitado por meio do uso exclusivo de minúsculas, já que todas as construções pré-definidas são em letras minúsculas.

(7)

Nomes

Exemplo 1: No JAVA o método para converter uma cadeia

em um valor inteiro é o parseInt.

• Grafias como parseint e Parseint não são

reconhecidas.

• Este é um problema que afeta mais a capacidade de escrita do que a legibilidade, porque a necessidade de lembrar

grafias estranhas dificulta a escrita correta de programas.

Exemplo 2: Nas primeiras versões do FORTRAN (I a IV), os

(8)

8

Palavras Especiais

• São usados para tornar os programas mais legíveis ao dar nome às ações que devem ser executadas.

• Na maioria das LPs, tais palavras são classificadas como

palavras reservadas ou como palavras-chave.

• Uma palavra-chave de uma LP é especial somente em

certos contextos, ou seja, uma palavra-chave possui uma

(9)

Palavras Especiais

Exemplo 3: As palavras especiais no FORTRAN são

palavras-chave apenas.

REAL APPLE

REAL = 3.4

• Na primeira construção, REAL aparece seguida de um

nome, sendo uma palavra-chave que indica a declaração de da variável APPLE do tipo REAL.

• Na segunda construção, temos uma variável cujo nome é

(10)

10

Palavras Especiais

• Uma palavra reservada é especial e não pode ser usada

como um nome.

Exemplo 4: No FORTRAN é perfeitamente possível ter as

instruções:

INTEGER REAL

REAL INTEGER

Exemplo 5: No PASCAL as palavras begin e end são

(11)

Palavras Especiais

Exemplo 6: A palavra int no C é uma palavra reservada.

• Porém podemos definir uma variável inteira com nome Int.

int Int;

• Em alguns projetos de LP, algumas palavras são

consideradas como reservadas, mas não tem nenhum significado para as LPs.

Exemplo 7: No JAVA, as palavras const e goto são

(12)

12

Variáveis

• É uma abstração que representa uma célula ou conjunto de células de memória do computador.

• Os programadores freqüentemente pensam nas variáveis como nomes para localizações da memória.

Há muito mais coisas nelas do que apenas um nome !

(13)

Variáveis – Nome

(14)

14

Variáveis – Endereço

• O endereço de uma variável é o mesmo da memória à qual ela está associada.

• Essa associação não é tão simples como parece !

• Em muitas LPs, é possível que o mesmo nome esteja

(15)

Variáveis – Endereço

Exemplo 8: Um programa pode ter dois subprogramas

sub1 e sub2, cada um dos quais define uma variável que

usa o mesmo nome soma.

• Uma referência a soma em sub1 não se relaciona com

(16)

16

Variáveis – Endereço – Apelidos

• Estratégia possível para fazer com que múltiplos

identificadores façam referência ao mesmo endereço.

• Quando mais de um nome de variável pode ser usado para acessar uma única localização de memória, temos os

conhecidos apelidos.

(17)

Variáveis – Endereço – Apelidos

Exemplo 9: Uso da instrução EQUIVALENCE em

FORTRAN.

DIMENSION A(5), B(10,20), C(15,15)

EQUIVALENCE (A,B), (C)

• Isso permite que durante uma fase de um programa o vetor A e a matriz B sejam utilizados, e, quando A e B não forem

mais necessários, seu espaço pode ser utilizado pela matriz C.

(18)

18

Variáveis – Endereço – Apelidos

(19)

Variáveis – Tipos

• Determina a faixa de valores que uma variável pode ter e um conjunto de operações definidas para os valores do tipo.

Exemplo 10: Tipos de Dados mais comuns na linguagem

C/C++

-128 a 127 char

- 2.147.483.648 a 2.147.483.647 long

- 32.768 a 32.767 int

1.7 x 10-308 a 3.4 x 10308

double

3.4 x 10-38 a 3.4 x 1038

float

(20)

20

Variáveis – Tipos

Exemplo 11: Tipos de Dados mais comuns na linguagem

PASCAL

true ou false boolean

0 a 65.535 word

- 32.768 a 32.767 int

- 2.147.483.648 a 2.147.483.647 longint

-128 a 127 shortint

1 caractere qualquer char

0 a 255 byte

- 32.768 a 32.767 short

5 x 10-324 a 1.7 x 10308

double

2.9 x 10-39 a 2.9 x 1039

real

(21)

Variáveis – Tipos

Exemplo 12: Tipos de Dados mais comuns na linguagem

JAVA

-128 a 127 byte

0 a 65.536 char

- 2.147.483.648 a 2.147.483.647 int

- 32.768 a 32.767 short

1.7 x 10-308 a 3.4 x 10308

double

3.4 x 10-38 a 3.4 x 1038

float

(22)

22

Variáveis – Valor

• O valor de uma variável é o conteúdo da célula ou das células de memória associadas à variável.

(23)

Variáveis – Tempo de Vida

• O tempo de vida de uma variável é o tempo durante o qual esta é vinculada a uma localização de memória específica.

(24)

24

Variáveis – Vinculação de Tipo

• Antes que uma variável possa ser referenciada, ela deve ser vinculada a um tipo de dados.

• Os aspectos importantes da vinculação são a maneira como o tipo é especificado e quando a vinculação ocorre.

• A vinculação pode ser:

• Estática

(25)

Variáveis – Vinculação Estática de Tipo

• Uma vinculação de tipo é estática se ocorrer antes do tempo

de execução e permanecer inalterada ao longo da execução do programa.

• Tipos podem ser especificados estaticamente por alguma forma de declaração explícita ou implícita.

• A declaração explícita é uma instrução em um programa

que lista nomes de variáveis e especifica que elas são de um tipo particular.

• A declaração implícita é um meio de associar variáveis a

(26)

26

Variáveis – Vinculação Estática de Tipo

Exemplo 13: Declaração Explícita no Ada

A, B : INTEGER;

Exemplo 14: Declaração Implícita no FORTRAN I, conforme

vimos, as variáveis iniciadas por I, J, K, L, M ou N são

(27)

Variáveis – Vinculação Estática de Tipo

Exemplo 15: Declaração de variáveis implicitamente em

BASIC

• A declaração de variáveis é feita com sufixos:

(28)

28

Variáveis – Vinculação Estática de Tipo

Exemplo 15, continuação...

• vBoolean = True

• vInteger% = 333

• vLong& = 98007

• vSingle! = 3.141592

• vDouble# = 3.1492574567

• vCurrency@ = 426.78

(29)

Variáveis – Vinculação Dinâmica de Tipo

• Uma vinculação de tipo é dinâmica se ocorrer durante o

tempo de execução e puder ser alterada ao longo da execução do programa.

• Principal vantagem da vinculação dinâmica é a flexibilidade de programação.

• Exemplificando, um programa para processar uma lista de dados em uma linguagem com vinculação dinâmica de tipos pode ser escrito como um programa genérico capaz de lidar com dados de qualquer tipo.

(30)

30

Variáveis – Vinculação Dinâmica de Tipo

• Desvantagens da vinculação dinâmica:

Desvantagem 1: A capacidade de detecção de erros do

compilador é diminuída em relação ao compilador de uma linguagem com vinculação estática.

Exemplo 16: Sejam i e x duas variáveis inteiras e y

uma matriz de números reais em uma LP com vinculação dinâmica de tipos.

• Se o programa precisa-se atribuir em i o valor de x.

(31)

Variáveis – Vinculação Dinâmica de Tipo

• Se devido a um erro de digitação, a instrução de atribuição.

i = y

• Em uma linguagem com vinculação dinâmica de tipos, nenhum erro será detectado pelo compilador.

• Uma vez que foi usado y em vez da variável x correta,

os resultados serão errôneos.

• Em uma LP com vinculação estática de tipos, o

(32)

32

Variáveis – Vinculação Dinâmica de Tipo

• Desvantagens da vinculação dinâmica:

Desvantagem 2: Alto custo de implementação, já que a

(33)

Verificação de Tipos

• A verificação de tipos é a atividade de assegurar que os

operandos de um operador sejam compatíveis.

• Um tipo compatível é aquele válido para o operador ou com

permissão, nas regras da linguagem, para ser convertido pelo código gerado pelo compilador para um tipo válido.

• Essa conversão automática é a chama coerção.

(34)

34

Verificação de Tipos

• Se todas as vinculações de variáveis a tipos forem estáticas em uma linguagem, a verificação de tipos poderá ser feita estaticamente.

• A vinculação dinâmica de tipos requer a verificação de tipo em tempo de execução.

• É muito melhor detectar erros durante a compilação do que na execução.

(35)

Compatibilidade de Tipos

• Há dois métodos diferentes de compatibilidade de tipos:

Compatibilidade de nome: significa que duas variáveis têm

tipos compatíveis somente se estiverem na mesma

declaração ou em declarações que usam o mesmo nome de tipo.

Compatibilidade de estrutura: significa que duas variáveis

(36)

36

Compatibilidade de Tipos

Exemplo 17: Declaração de variáveis em Pascal.

A: INTEGER;

B: INTEGER;

C: INTEGER;

ou

A, B, C: INTEGER;

(37)

Compatibilidade de Tipos

Exemplo 18: Declaração de variáveis em Pascal.

A, B: REAL;

C: INTEGER;

• As variáveis A e B possuem compatibilidade de estrutura

com a variável C.

• A variável C não possui compatibilidade de estrutura com

(38)

38

Escopo

• O escopo de uma variável de programa é a faixa de

instruções na qual a variável é visível.

• Uma variável é visível em uma instrução se puder ser

(39)

Escopo Estático

• O conceito de bloco é fundamental para o entendimento do escopo estático.

• Um bloco delimita o escopo de qualquer variável que ele

possa conter.

• Normalmente, um bloco é um subprograma ou um trecho de código delimitado através de marcadores, tais como, as

chaves ({ e }) de C, C++ e JAVA ou os vocábulos begin e end introduzidos por ALGOL-60 e adotados por PASCAL e

(40)

40

Escopo Estático

(41)

Escopo Estático – Bloco Monolítico

• Na estrutura monolítica todo o programa é composto por um único bloco.

• Todas as variáveis têm como escopo de visibilidade o programa inteiro.

• Essa estrutura de blocos não é apropriada para programas grandes.

• Essa estrutura dificulta o trabalho simultâneo de vários programadores em um mesmo programa visto que as variáveis criadas por um deles

devem ser necessariamente distintas dos identificadores criados pelos outros.

(42)

42

Escopo Estático – Blocos Não Aninhados

• A estrutura de blocos não aninhada é

considerada um avanço em relação à estrutura de blocos monolítica, uma vez que o programa é dividido em vários blocos.

• Nessa estrutura, o escopo de visibilidade das variáveis é o bloco onde foram criadas.

• Essas variáveis são chamadas variáveis locais e as variáveis criadas fora do bloco são

(43)

Escopo Estático – Blocos Não Aninhados

• Uma desvantagem associada à estrutura de blocos não aninhada é que qualquer variável que não pode ser local é forçada a ser global e ter todo o programa como escopo, mesmo que seja acessada por poucos blocos.

• Outra desvantagem é a exigência de que todas as variáveis globais tenham identificadores

distintos.

• FORTRAN adota esse tipo de estrutura.

(44)

44

Escopo Estático – Blocos Aninhados

• A estrutura aninhada é considerada um avanço ainda maior.

• LPs como PASCAL e ADA adotam essa

estrutura. São, por isso, chamadas LPs ALGOL-like uma vez que foi o ALGOL a primeira

linguagem a utilizá-la.

(45)

Blocos Aninhados – Entidades Ocultas

• Entidades podem se tornar inacessíveis quando se usa o mesmo identificador para denotar diferentes entidades em blocos aninhados.

(46)

46

Blocos Aninhados – Entidades Ocultas

• No Exemplo 19, a variável x inteira criada no bloco mais externo

não é visível dentro do bloco mais interno porque neste bloco foi criada uma outra variável de tipo ponto flutuante com o mesmo nome x.

(47)

Escopo Dinâmico

• O escopo dinâmico baseia-se na seqüência de chamada de subprogramas fazendo com que o escopo seja definido em tempo de execução.

Exemplo 20: Considere o

(48)

48

Escopo Dinâmico

• Quando sub chama sub2 e

este chama sub1, o valor

escrito de x por sub1 é 3,

isto é, x é uma referência à

variável criada em sub2.

• Quando sub chama sub1

diretamente, o valor escrito de

x por sub1 é 1, isto é, x é

(49)

Escopo Dinâmico – Conclusão

• LPs que adotam o escopo dinâmico apresentam os seguintes problemas:

1. perda de eficiência pois a checagem de tipos tem de ser feita durante a execução;

2. legibilidade do programa é reduzida pois a sequência de chamadas de subprogramas deve ser conhecida

para determinar o significado das referências a variáveis não locais;

• Como conseqüência desses problemas, a maioria das LPs

(50)

50

Inicialização de Variáveis

• A vinculação de uma variável a um valor no momento em que ela é vinculada ao armazenamento é chamada de

inicialização.

Exemplo 21: FORTRAN

REAL PI

INTEGER SOMA

DATA SOMA /0/, PI /3.14159/

• Neste exemplo a variável SOMA é inicializada com o valor 0

(51)

Inicialização de Variáveis

Exemplo 22: Exemplo 21 em C

float pi = 3.14159;

int soma = 0;

(52)

52

Inicialização de Variáveis

Exemplo 23: Exemplo 21 em PASCAL

var

pi:real;

soma:integer;

<outras instruções>

pi := 3.14159;

(53)

Declarações de Constantes

• Uma declaração de constante amarra um identificador a um valor pré-existente que não pode ser alterado ao longo da execução do programa.

• Isso pode ser feito em C++ tal como na seguinte linha de código:

const float pi = 3.14159;

(54)

54

Declarações de Constantes

const float pi = 3.14159;

• Essa mesma declaração é válida em C. Contudo, a definição de C só requer que os compiladores avisem ao programador de tentativas de alterações de constantes, permitindo assim que eles ignorem a definição e aceitem alterações de valores das constantes!!!

• Por essa razão, muitos programadores C continuam

utilizando o mecanismo tradicional (#define) quando

querem criar constantes em C:

(55)

Declarações de Constantes

• Com esse mecanismo todas as referências a pi no código

serão substituídas por 3.14159, antes do início da

compilação, tendo efeito equivalente a definição de pi como

constante.

• No entanto, pode ser vantajoso usar const ao invés de #define em C porque esse último mecanismo não

reconhece regras de escopo (a constante será reconhecida do ponto de declaração até o final do programa).

• Em caso de uso de const, a constante só será

(56)

56

Declarações de Constantes

• Algumas linguagens, como PASCAL, requerem que

constantes tenham seus valores definidos estaticamente (em tempo de compilação).

• Já ADA, C++ e JAVA permitem que sejam usados valores calculados dinamicamente (em tempo de execução do

programa). Essa é uma outra vantagem do uso de const

em relação a #define.

• O mecanismo de macros somente permite a declaração de constantes estáticas.

• JAVA utiliza a palavra final para declarar constantes, tal

(57)

Declarações de Constantes

Exemplo 24:

• A primeira linha ilustra a criação de uma constante estática, a última ilustra a criação de uma constante dinâmica.

• Math.random é uma função calculada em tempo de

Referências

Documentos relacionados

Para ser professor não é o suficiente que se tenha o conhecimento, mas é preciso saber ensinar e este saber ensinar, em nossa compreensão, só se atinge com um

O diretor da Agência Nacional de Energia Elétrica (Aneel), Edvaldo Santana, disse ontem que o atual cenário de turbulências no setor elétrico “está caminhando para

Mais uma vez, o aluno usará a atenção para realizar esta atividade e por fim, poderão colorir de modo que trabalhe diretamente com a coordenação motora fina... Nesta atividade

Se nesse período crítico, ela encontra alguém que, ignorante e inescrupulosamente, lhe fornece exercícios respiratórios, e se ela segue as instruções fidedignamente na esperança

- Se somente o município figura como devedor no título executivo judicial, não pode o ex-prefeito, que não participou do processo de conhecimento, ser parte na execução, não

Em vez de testar separadamente as duas hip´ oteses, no entanto, Sunshine e Tyler elaboraram um modelo de equa¸c˜ oes estruturais com uma an´ alise de caminhos para

Eu sei que as coisas têm mudado muito no meu tempo de vida, mas, ainda assim, sinto que não precisava de ser assim?. Os criadores deveriam poder criar, os agricultores deveriam poder

“A Igreja Metodista é uma assembléia de pessoas que creem em Je- sus como o Filho de Deus, enviado ao mundo para salvar os pecado- res (I Tm.. Sua missão é participar da ação de