SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
Amarração e escopo
Prof: Sergio Souza Costa
Adaptado de © 2004, Programming Language Design Concepts
D.A. Watt, University of Glasgow
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Conteúdo
● Amarrações e ambientes.
● Escopo, estrutura de bloco e visibilidade.
● Declarações.
● Blocos.
Amarrações
Expressões e comandos em linguagens de programação possuem
identificadores.
Amarração é associação entre um identificador e uma entidade, tais como
valores, variáveis e funções.
Cada declaração produz uma ou mais amarrações.
Um ambiente de referenciamento ou namespace é um conjunto de
amarrações.
Cada expressão e ou comando é interpretado em um particular ambiente.
Amarrações: Identificador
Identificadores são utilizados em um contexto mais amplo do que
simplesmente em variáveis
● métodos, sub-programas, pacotes, módulos, classes, parâmetros
Um identificador é uma string usada para identificar alguma entidade em um
programa.
Para ver onde cada linguagem utiliza identificadores, veja na gramática da
linguagem:
● https://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=110
Amarrações: Identificador - Formato
● Exemplos:
○ Fortran95: 31 caracteres
○ C89: sem limitação de tamanho (apenas os 31 primeiros são significativos)
○ C99: 61 primeiros significativos
○ Java, C#, Ada, C++: sem limite
■ Os implementadores podem colocar um limite
● Normalmente o limite é dado para reduzir o tamanho da tabela de
símbolos
● Na maioria das linguagens o formato é:
○ letra_ (letra_ | digito)*
Amarrações: Identificador - Formato
● Algumas linguagens permitem espaços nos nomes das variáveis
○ Ex.: Soma dos Salarios, Variavel de teste (anteriores ao FORTRAN 90)
● Linguagens baseadas em C diferenciam minúsculas de maiúsculas
○ ROSE != Rose != rose
○ Pode levar a problemas de legibilidade e facilidade de escrita
■ parseInt != parseint = ParseInt
○ Uso de convenções de estilo
procedure p is
z: constant Integer := 0;
c: Character;
procedure q (x: in Float) is
c: constant Float := 3.0e6;
b: Boolean;
begin
…
end q;
begin
…
end p;
{ b -> variavel booleana,
c -> o numero real 3.0*106
,
p -> um procedimento sem parametros,
q -> procedimento com um parametro real,
x -> uma variavel real,
z -> o inteiro 0 }
{ c -> uma variavel caracter,
p -> um procedimento sem parametros,
q -> procedimento com um parametro real,
z -> o inteiro 0 }
Ambiente de referenciamento
Ambiente:  Atividade
Qual o ambiente de cada ponto enumerado no programa C abaixo:
int n;
(1) void zero(){
(2) n=0;
}
(3) void inc(int d){
(4) n+=d;
}
(5) void main(int argc, char**argv){
(6) ...
}
Escopo
O escopo de uma declaração (ou de uma amarração) é a porção do
programa no qual ela tem efeito.
Em algumas linguagens antigas (tais como o Cobol), o escopo de cada
declaração era todo o programa.
Nas linguagens modernas existe o conceito de bloco, e o escopo de cada
declaração é controlada por esta estrutura.
Bloco
Um bloco é o elemento que delimita o escopo das declarações.
Ele possui diferentes formas dependendo da linguagem
● C: bloco ({}), corpo de funções, unidades de compilação.
● Java: bloco ({}), corpo de métodos, declarações de classes, pacotes.
● Ada: bloco (declare … begin … end;), corpo de procedures, pacotes, tasks,
etc.
Uma estrutura bloco é a forma em que os blocos são arranjandos no
programa.
Blocos monolíticos
Algumas linguagens (como Cobol) possuem uma estrutura de
blocos monolítica, o programa completo é um único bloco. O
escopo de cada declaração é o programa todo.
declaration of
x
declaration of
z
declaration of
y
declaration of x
declaration of z
declaration of y
escopo de
x, y, z
Estruturas de blocos simples
Algumas linguagens (ex. Fortran) não permitem blocos dentro de outros
blocos:
declaration of x
declaration of z
declaration of y
escopo de x
escopo de y
escopo de z
Estruturas de blocos aninhadas
Linguagens modernas os blocos podem ser aninhadas dentro de outros
blocos.
declaration of x
declaration of z
declaration of y
Escopo de x
Escopo de y
Escopo de z
Escopo e visibilidade
Uma ocorrência da amarração acontece quando existe uma ocorrência de
um identificador I, onde I está amarrado a alguma entidade X;
Uma aplicação da ocorrência do identificador I é uma ocorrência de I,
quando é feita dentro da entidade X na qual I está amarrada.
A essa aplicação, nós dizemos que I denota X.
Se a linguagem tem escopo estático, dizemos que toda aplicação da
ocorrência de I deve corresponder a exatamente uma ocorrência da
amarração de I.
procedure p is
z : constant Integer := 0;
c : Character;
procedure q (x : in Float) is
c : constant Float := 3.0e6;
b : Boolean;
begin
… b … c … x … z …
end q;
begin
… c … z …
end p;
Escopo e visibilidade: Exemplo
Ocultação
Se um identificado I é declarado em dois diferente blocos, I denota uma
diferente entidade em cada bloco.
Se identificador I é declado em dois blocos aninhados, I denota uma entidade
no bloco mais externo e uma diferente entidade no bloco mais interno. O bloco
mais interno oculta o mais externo.
declaração de x
declaração de x declaração de x
declaração de x
X mais externo
está oculto
Declarações
● Uma declaração é uma construção de programas
que  será elaborada para produzir amarrações.
● Uma declaração pode ter efeitos colaterais (tais como a criação de uma
variável).
● Uma definição é uma declaração onde o único é produzir amarrações.
Declarações
Formas de declarações:
● tipo
● constant
● variable
● definições de procedimentos
● colaterais
● sequenciais
● recursivas
Declaração de tipo
● Uma  declaração de tipo amarra um identificador a um tipo.
● Uma definição de tipo amarra um identificador a um tipo existente.
● Alternativamente, uma declaração de tipo  pode introduzir um novo tipo
distinto de todos já existentes
Exemplo C: Declaração de tipos
●“typedef …” amarra um identificador a um tipo existente:
typedef char* Alpha;
Alpha s; char* t;
s = t;
●Enquanto “enum …”, “struct …”, ou“union …” amarra um
identificador a um novo tipo:
struct Book {Alpha title, int edition};
struct Author {Alpha name, int age};
Book b; Author a;
a = b;
Exemplo Ada: Declaração de tipos
Em Ada, sempre é definido um novo tipo :
type Alpha is array (1 .. 32) of Character;
type Book is record
title: Alpha;
edition: Integer;
end record;
type Author is record
name: Alpha;
age: Integer;
end record;
b: Book; a: Author;
a := b;
Ilegal
Exemplo Haskell: Declaração de tipos
Amarra a um tipo existente (type):
type Nome = String
type Idade = Int
type Aluno = (Nome,Idade)
type Professor = (Nome,Idade)
getName :: Aluno -> Nome
getName (n,_) = n
A função getName espera
um aluno, porém ela
aceitou X que é um
professor.
Declaração de Constantes
●Uma declaração de constante amarra um identificador a
um valor (constante).
●Em Ada, ela tem a forma:
I : constant T := E;
Onde amarra o identificador I ao valor da expressão E, que
deve ser do tipo T.
●Algumas linguagens restringem a expressão E a um literal,
ou a uma expressão que pode ser avaliada em tempo de
compilação.
Declaração de variáveis
●Uma declaração de variável amarra um identificador a uma
variável.
●Em Ada, tem a seguinte forma:
I : T := E;
Essa declaração cria uma variável de tipo T, amarra I para esta
variável, e inicializa o seu valor pela expressão E.
●Em Ada, é possível renomear declaração de variáveis:
I : T renames V;
Isso amarra I a uma existente variável V.
Declaração de variáveis
Ada:
type Country is (UK, FR, …);
pop : array (Country) of Natural;
declare
c : Country := …;
p : Integer renames pop(c);
begin
…
p := p + 1;
…
end;
Definição de procedimentos
Uma definição de procedimento amarra um identificado a um procedimento.
Na maioria das linguagens, podemos definir tanto procedimento quando
funções.
def hello():
print "Hello
World!"
return
def multiply(a,b)
product = a * b
end
multiply a b = a * b
PYTHON RUBY
HASKELL
Exemplo em Ada
Definição de função:
function even (n: Integer) return Boolean is
begin
return (n mod 2 = 0);
end;
Definição de procedimento:
procedure double (n: in out Integer) is
begin
n := n * 2;
end;
Composição de declarações
Como compor um conjunto de declarações:
●  Colaterais
●  Sequenciais
●   Recursivas
Declaração colateral
Uma declaração colateral tem o formato D1 and D2, onde as sub-declarações
são independentes uma da outra.
Incomum em linguagens imperativas, mais presente em linguagens
funcionais.
Exemplo ML
val e = 2.7183
and pi = 3.1416
Declaração sequencial
Uma declaração seqüencial tem o formato D1; D2,  onde D2 é considerada
após D1 e amarrações produzidas por D1 podem ser usados em D2.
type Nome = Array[0..30] of Char;
Pessoa = record
nome : Nome;
idade : Integer;
end;
Declarações recursivas
Permite usar amarrações que ela mesmo produz:
type Int_Node;
type Int_List isaccess Int_Node;
type Int_Node is record
elem:Integer;
succ:Int_List;
end record;
Blocos
Grupo de construções de um programa que delimita o escopo das
declarações contidas nele. 
    Detalhando mais um pouco ....
Tipos
    Comandos
    Expressões
Comando-bloco
É uma forma de comando que contém uma declaração local (ou grupo de
declarações) D e um subcomando C.
As amarrações produzidas por D são usada somentes para execuções em C
e essas amarrações sobrepõe qualquer amarração ao mesmo identificador no
ambiente fora do bloco.
São comuns em linguagens imperativas:
C e Java: { D C }
Ada: declare D begin C end;
Expressão-bloco
É uma forma de expressão que contêm uma declaração local (ou grupo de
declarações) D e um subexpressão E.
As amarrações produzidas por D são usada somentes para avaliação em E e
essas amarrações sobrepõe qualquer amarração ao mesmo identificador no
ambiente fora do bloco.
Expressão-bloco - Haskell
area r = let
pi = 3.1415
r2 = r ^ 2
in pi * r2
Tempo da amarração
O momento no tempo onde a amarração ocorre é chamado de tempo de
amarração (binding time)
● Podem ocorrer em tempo de design da LP, de implementação, de
compilação, de carga, de ligação, de execução
Tempo da amarração
● Por exemplo, o * é normalmente amarrado a operação de multiplicação
em tempo de projeto da LP
● Um tipo de dado, tal como int em C, é amarrado a uma lista de valores
em tempo de implementação da linguagem
● Variáveis em Java são amarradas a um tipo de dados em tempo de
compilação.
● Uma variável é amarrado a uma célula de memória em tempo de carga.
● Variáveis declaradas em métodos em Java são amarradas a memória
em tempo de execução.
● Uma chamada a outro pacote é amarrada a esse pacote em tempo de
ligação.
Tempo da amarração
● Considere a seguinte sentença em C:
count = count + 5
● Exemplos de amarração:
○ O tipo de count é amarrado em tempo de compilação
○ A lista de valores possíveis para count é definida em tempo de projeto do compilador C
○ O significado do sinal + é determinado em tempo de compilação, quando o tipo dos
operandos for determinado
○ A representação interna do literal 5 é amarrada em tempo de projeto do compilador.
○ O valor de count é amarrado em tempo de execução com esta sentença

Mais conteúdo relacionado

Mais procurados

Paradigmas de Linguagens de Programação: Conceitos de PHP
Paradigmas de Linguagens de Programação: Conceitos de PHPParadigmas de Linguagens de Programação: Conceitos de PHP
Paradigmas de Linguagens de Programação: Conceitos de PHPFabio Leal
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Thayse
 
Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch caseAlessandra Sra JM
 
Tema 2 tipos de datos y expresiones en java por gio
Tema 2   tipos de datos y expresiones en java por gioTema 2   tipos de datos y expresiones en java por gio
Tema 2 tipos de datos y expresiones en java por gioRobert Wolf
 
Sql com sql server básico - Bóson treinamentos
Sql com sql server básico - Bóson treinamentosSql com sql server básico - Bóson treinamentos
Sql com sql server básico - Bóson treinamentosFábio dos Reis
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - ProcedimentoWesley R. Bezerra
 
Lógica de Programação com Javascript - Aula #04
Lógica de Programação com Javascript - Aula #04Lógica de Programação com Javascript - Aula #04
Lógica de Programação com Javascript - Aula #04Ramon Kayo
 
[Curso Java Basico] Exercicios Aula 19
[Curso Java Basico] Exercicios Aula 19[Curso Java Basico] Exercicios Aula 19
[Curso Java Basico] Exercicios Aula 19Loiane Groner
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構katanyan
 
Criando testes unitários com Junit 5
Criando testes unitários com Junit 5Criando testes unitários com Junit 5
Criando testes unitários com Junit 5Deivid Hahn Fração
 
Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2Eder Samaniego
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
 
Pronunciamentos técnicos cpc’s 38, 39 e 40
Pronunciamentos técnicos   cpc’s 38, 39 e 40Pronunciamentos técnicos   cpc’s 38, 39 e 40
Pronunciamentos técnicos cpc’s 38, 39 e 40Karla Carioca
 
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasAdriano Teixeira de Souza
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 

Mais procurados (20)

Paradigmas de Linguagens de Programação: Conceitos de PHP
Paradigmas de Linguagens de Programação: Conceitos de PHPParadigmas de Linguagens de Programação: Conceitos de PHP
Paradigmas de Linguagens de Programação: Conceitos de PHP
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0
 
Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch case
 
Composer
ComposerComposer
Composer
 
Tema 2 tipos de datos y expresiones en java por gio
Tema 2   tipos de datos y expresiones en java por gioTema 2   tipos de datos y expresiones en java por gio
Tema 2 tipos de datos y expresiones en java por gio
 
Sql com sql server básico - Bóson treinamentos
Sql com sql server básico - Bóson treinamentosSql com sql server básico - Bóson treinamentos
Sql com sql server básico - Bóson treinamentos
 
Lógica de Programação - Procedimento
Lógica de Programação - ProcedimentoLógica de Programação - Procedimento
Lógica de Programação - Procedimento
 
Lógica de Programação com Javascript - Aula #04
Lógica de Programação com Javascript - Aula #04Lógica de Programação com Javascript - Aula #04
Lógica de Programação com Javascript - Aula #04
 
[Curso Java Basico] Exercicios Aula 19
[Curso Java Basico] Exercicios Aula 19[Curso Java Basico] Exercicios Aula 19
[Curso Java Basico] Exercicios Aula 19
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
Criando testes unitários com Junit 5
Criando testes unitários com Junit 5Criando testes unitários com Junit 5
Criando testes unitários com Junit 5
 
Algoritmos - Vetores
Algoritmos - VetoresAlgoritmos - Vetores
Algoritmos - Vetores
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 
Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
Pronunciamentos técnicos cpc’s 38, 39 e 40
Pronunciamentos técnicos   cpc’s 38, 39 e 40Pronunciamentos técnicos   cpc’s 38, 39 e 40
Pronunciamentos técnicos cpc’s 38, 39 e 40
 
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 

Destaque

Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoSidney Roberto
 
Acesso por-corda-nr-35
Acesso por-corda-nr-35Acesso por-corda-nr-35
Acesso por-corda-nr-35Fatima Silva
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Ismar Silveira
 
Relatório ensaios mecânicos final
Relatório ensaios mecânicos finalRelatório ensaios mecânicos final
Relatório ensaios mecânicos finalPyetroC
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?Sérgio Souza Costa
 
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...Nelson Glauber Leal
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Interfaces Inteligentes para Android
Interfaces Inteligentes para AndroidInterfaces Inteligentes para Android
Interfaces Inteligentes para AndroidNelson Glauber Leal
 

Destaque (20)

Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Heap
HeapHeap
Heap
 
Web Standards
Web StandardsWeb Standards
Web Standards
 
It ib-001-n1rev0
It ib-001-n1rev0It ib-001-n1rev0
It ib-001-n1rev0
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Acesso por-corda-nr-35
Acesso por-corda-nr-35Acesso por-corda-nr-35
Acesso por-corda-nr-35
 
Palestra nr35 rev1
Palestra nr35 rev1Palestra nr35 rev1
Palestra nr35 rev1
 
Pmbok5 escopo
Pmbok5   escopoPmbok5   escopo
Pmbok5 escopo
 
Trabalho em altura1
Trabalho em altura1Trabalho em altura1
Trabalho em altura1
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
 
Ensaio dureza brinell
Ensaio dureza brinellEnsaio dureza brinell
Ensaio dureza brinell
 
Relatório ensaios mecânicos final
Relatório ensaios mecânicos finalRelatório ensaios mecânicos final
Relatório ensaios mecânicos final
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
NR 35
NR 35NR 35
NR 35
 
O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?
 
Ancoragem predial - Lift Ancoragem e Alpinismo Industrial
Ancoragem predial -  Lift Ancoragem e Alpinismo IndustrialAncoragem predial -  Lift Ancoragem e Alpinismo Industrial
Ancoragem predial - Lift Ancoragem e Alpinismo Industrial
 
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
 
Palestra android
Palestra androidPalestra android
Palestra android
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Interfaces Inteligentes para Android
Interfaces Inteligentes para AndroidInterfaces Inteligentes para Android
Interfaces Inteligentes para Android
 

Semelhante a Amarração e escopo

Semelhante a Amarração e escopo (20)

5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem c
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Ud3
Ud3Ud3
Ud3
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Unidade04
Unidade04Unidade04
Unidade04
 
Java2
Java2Java2
Java2
 
Introdução a linguagem de programação C
Introdução a linguagem de programação CIntrodução a linguagem de programação C
Introdução a linguagem de programação C
 
Aula01 introducao operacoes
Aula01   introducao operacoesAula01   introducao operacoes
Aula01 introducao operacoes
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdf
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
C++200
C++200C++200
C++200
 
Java sintaxe
Java sintaxeJava sintaxe
Java sintaxe
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Linguagem c parte 2
Linguagem c parte 2Linguagem c parte 2
Linguagem c parte 2
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Amarração e escopo

  • 1. Amarração e escopo Prof: Sergio Souza Costa Adaptado de © 2004, Programming Language Design Concepts D.A. Watt, University of Glasgow
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Conteúdo ● Amarrações e ambientes. ● Escopo, estrutura de bloco e visibilidade. ● Declarações. ● Blocos.
  • 4. Amarrações Expressões e comandos em linguagens de programação possuem identificadores. Amarração é associação entre um identificador e uma entidade, tais como valores, variáveis e funções. Cada declaração produz uma ou mais amarrações. Um ambiente de referenciamento ou namespace é um conjunto de amarrações. Cada expressão e ou comando é interpretado em um particular ambiente.
  • 5. Amarrações: Identificador Identificadores são utilizados em um contexto mais amplo do que simplesmente em variáveis ● métodos, sub-programas, pacotes, módulos, classes, parâmetros Um identificador é uma string usada para identificar alguma entidade em um programa. Para ver onde cada linguagem utiliza identificadores, veja na gramática da linguagem: ● https://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=110
  • 6. Amarrações: Identificador - Formato ● Exemplos: ○ Fortran95: 31 caracteres ○ C89: sem limitação de tamanho (apenas os 31 primeiros são significativos) ○ C99: 61 primeiros significativos ○ Java, C#, Ada, C++: sem limite ■ Os implementadores podem colocar um limite ● Normalmente o limite é dado para reduzir o tamanho da tabela de símbolos ● Na maioria das linguagens o formato é: ○ letra_ (letra_ | digito)*
  • 7. Amarrações: Identificador - Formato ● Algumas linguagens permitem espaços nos nomes das variáveis ○ Ex.: Soma dos Salarios, Variavel de teste (anteriores ao FORTRAN 90) ● Linguagens baseadas em C diferenciam minúsculas de maiúsculas ○ ROSE != Rose != rose ○ Pode levar a problemas de legibilidade e facilidade de escrita ■ parseInt != parseint = ParseInt ○ Uso de convenções de estilo
  • 8. procedure p is z: constant Integer := 0; c: Character; procedure q (x: in Float) is c: constant Float := 3.0e6; b: Boolean; begin … end q; begin … end p; { b -> variavel booleana, c -> o numero real 3.0*106 , p -> um procedimento sem parametros, q -> procedimento com um parametro real, x -> uma variavel real, z -> o inteiro 0 } { c -> uma variavel caracter, p -> um procedimento sem parametros, q -> procedimento com um parametro real, z -> o inteiro 0 } Ambiente de referenciamento
  • 9. Ambiente:  Atividade Qual o ambiente de cada ponto enumerado no programa C abaixo: int n; (1) void zero(){ (2) n=0; } (3) void inc(int d){ (4) n+=d; } (5) void main(int argc, char**argv){ (6) ... }
  • 10. Escopo O escopo de uma declaração (ou de uma amarração) é a porção do programa no qual ela tem efeito. Em algumas linguagens antigas (tais como o Cobol), o escopo de cada declaração era todo o programa. Nas linguagens modernas existe o conceito de bloco, e o escopo de cada declaração é controlada por esta estrutura.
  • 11. Bloco Um bloco é o elemento que delimita o escopo das declarações. Ele possui diferentes formas dependendo da linguagem ● C: bloco ({}), corpo de funções, unidades de compilação. ● Java: bloco ({}), corpo de métodos, declarações de classes, pacotes. ● Ada: bloco (declare … begin … end;), corpo de procedures, pacotes, tasks, etc. Uma estrutura bloco é a forma em que os blocos são arranjandos no programa.
  • 12. Blocos monolíticos Algumas linguagens (como Cobol) possuem uma estrutura de blocos monolítica, o programa completo é um único bloco. O escopo de cada declaração é o programa todo. declaration of x declaration of z declaration of y declaration of x declaration of z declaration of y escopo de x, y, z
  • 13. Estruturas de blocos simples Algumas linguagens (ex. Fortran) não permitem blocos dentro de outros blocos: declaration of x declaration of z declaration of y escopo de x escopo de y escopo de z
  • 14. Estruturas de blocos aninhadas Linguagens modernas os blocos podem ser aninhadas dentro de outros blocos. declaration of x declaration of z declaration of y Escopo de x Escopo de y Escopo de z
  • 15. Escopo e visibilidade Uma ocorrência da amarração acontece quando existe uma ocorrência de um identificador I, onde I está amarrado a alguma entidade X; Uma aplicação da ocorrência do identificador I é uma ocorrência de I, quando é feita dentro da entidade X na qual I está amarrada. A essa aplicação, nós dizemos que I denota X. Se a linguagem tem escopo estático, dizemos que toda aplicação da ocorrência de I deve corresponder a exatamente uma ocorrência da amarração de I.
  • 16. procedure p is z : constant Integer := 0; c : Character; procedure q (x : in Float) is c : constant Float := 3.0e6; b : Boolean; begin … b … c … x … z … end q; begin … c … z … end p; Escopo e visibilidade: Exemplo
  • 17. Ocultação Se um identificado I é declarado em dois diferente blocos, I denota uma diferente entidade em cada bloco. Se identificador I é declado em dois blocos aninhados, I denota uma entidade no bloco mais externo e uma diferente entidade no bloco mais interno. O bloco mais interno oculta o mais externo. declaração de x declaração de x declaração de x declaração de x X mais externo está oculto
  • 18. Declarações ● Uma declaração é uma construção de programas que  será elaborada para produzir amarrações. ● Uma declaração pode ter efeitos colaterais (tais como a criação de uma variável). ● Uma definição é uma declaração onde o único é produzir amarrações.
  • 19. Declarações Formas de declarações: ● tipo ● constant ● variable ● definições de procedimentos ● colaterais ● sequenciais ● recursivas
  • 20. Declaração de tipo ● Uma  declaração de tipo amarra um identificador a um tipo. ● Uma definição de tipo amarra um identificador a um tipo existente. ● Alternativamente, uma declaração de tipo  pode introduzir um novo tipo distinto de todos já existentes
  • 21. Exemplo C: Declaração de tipos ●“typedef …” amarra um identificador a um tipo existente: typedef char* Alpha; Alpha s; char* t; s = t; ●Enquanto “enum …”, “struct …”, ou“union …” amarra um identificador a um novo tipo: struct Book {Alpha title, int edition}; struct Author {Alpha name, int age}; Book b; Author a; a = b;
  • 22. Exemplo Ada: Declaração de tipos Em Ada, sempre é definido um novo tipo : type Alpha is array (1 .. 32) of Character; type Book is record title: Alpha; edition: Integer; end record; type Author is record name: Alpha; age: Integer; end record; b: Book; a: Author; a := b; Ilegal
  • 23. Exemplo Haskell: Declaração de tipos Amarra a um tipo existente (type): type Nome = String type Idade = Int type Aluno = (Nome,Idade) type Professor = (Nome,Idade) getName :: Aluno -> Nome getName (n,_) = n A função getName espera um aluno, porém ela aceitou X que é um professor.
  • 24. Declaração de Constantes ●Uma declaração de constante amarra um identificador a um valor (constante). ●Em Ada, ela tem a forma: I : constant T := E; Onde amarra o identificador I ao valor da expressão E, que deve ser do tipo T. ●Algumas linguagens restringem a expressão E a um literal, ou a uma expressão que pode ser avaliada em tempo de compilação.
  • 25. Declaração de variáveis ●Uma declaração de variável amarra um identificador a uma variável. ●Em Ada, tem a seguinte forma: I : T := E; Essa declaração cria uma variável de tipo T, amarra I para esta variável, e inicializa o seu valor pela expressão E. ●Em Ada, é possível renomear declaração de variáveis: I : T renames V; Isso amarra I a uma existente variável V.
  • 26. Declaração de variáveis Ada: type Country is (UK, FR, …); pop : array (Country) of Natural; declare c : Country := …; p : Integer renames pop(c); begin … p := p + 1; … end;
  • 27. Definição de procedimentos Uma definição de procedimento amarra um identificado a um procedimento. Na maioria das linguagens, podemos definir tanto procedimento quando funções. def hello(): print "Hello World!" return def multiply(a,b) product = a * b end multiply a b = a * b PYTHON RUBY HASKELL
  • 28. Exemplo em Ada Definição de função: function even (n: Integer) return Boolean is begin return (n mod 2 = 0); end; Definição de procedimento: procedure double (n: in out Integer) is begin n := n * 2; end;
  • 29. Composição de declarações Como compor um conjunto de declarações: ●  Colaterais ●  Sequenciais ●   Recursivas
  • 30. Declaração colateral Uma declaração colateral tem o formato D1 and D2, onde as sub-declarações são independentes uma da outra. Incomum em linguagens imperativas, mais presente em linguagens funcionais. Exemplo ML val e = 2.7183 and pi = 3.1416
  • 31. Declaração sequencial Uma declaração seqüencial tem o formato D1; D2,  onde D2 é considerada após D1 e amarrações produzidas por D1 podem ser usados em D2. type Nome = Array[0..30] of Char; Pessoa = record nome : Nome; idade : Integer; end;
  • 32. Declarações recursivas Permite usar amarrações que ela mesmo produz: type Int_Node; type Int_List isaccess Int_Node; type Int_Node is record elem:Integer; succ:Int_List; end record;
  • 33. Blocos Grupo de construções de um programa que delimita o escopo das declarações contidas nele.      Detalhando mais um pouco .... Tipos     Comandos     Expressões
  • 34. Comando-bloco É uma forma de comando que contém uma declaração local (ou grupo de declarações) D e um subcomando C. As amarrações produzidas por D são usada somentes para execuções em C e essas amarrações sobrepõe qualquer amarração ao mesmo identificador no ambiente fora do bloco. São comuns em linguagens imperativas: C e Java: { D C } Ada: declare D begin C end;
  • 35. Expressão-bloco É uma forma de expressão que contêm uma declaração local (ou grupo de declarações) D e um subexpressão E. As amarrações produzidas por D são usada somentes para avaliação em E e essas amarrações sobrepõe qualquer amarração ao mesmo identificador no ambiente fora do bloco.
  • 36. Expressão-bloco - Haskell area r = let pi = 3.1415 r2 = r ^ 2 in pi * r2
  • 37. Tempo da amarração O momento no tempo onde a amarração ocorre é chamado de tempo de amarração (binding time) ● Podem ocorrer em tempo de design da LP, de implementação, de compilação, de carga, de ligação, de execução
  • 38. Tempo da amarração ● Por exemplo, o * é normalmente amarrado a operação de multiplicação em tempo de projeto da LP ● Um tipo de dado, tal como int em C, é amarrado a uma lista de valores em tempo de implementação da linguagem ● Variáveis em Java são amarradas a um tipo de dados em tempo de compilação. ● Uma variável é amarrado a uma célula de memória em tempo de carga. ● Variáveis declaradas em métodos em Java são amarradas a memória em tempo de execução. ● Uma chamada a outro pacote é amarrada a esse pacote em tempo de ligação.
  • 39. Tempo da amarração ● Considere a seguinte sentença em C: count = count + 5 ● Exemplos de amarração: ○ O tipo de count é amarrado em tempo de compilação ○ A lista de valores possíveis para count é definida em tempo de projeto do compilador C ○ O significado do sinal + é determinado em tempo de compilação, quando o tipo dos operandos for determinado ○ A representação interna do literal 5 é amarrada em tempo de projeto do compilador. ○ O valor de count é amarrado em tempo de execução com esta sentença