LinguagensdeProgramação
AndreiRimsaÁlvares
Nomes,AmarraçõeseEscopo
Sumário
• Nomes• Amarrações• Escopo
LinguagensdeProgramação
NOMES
Nomes
• Conceitomaisamploquevariáveis
• Podemrepresentar– Variáveis– Labels– Sub-programas(funções)– Parâmetrosformais– Outrasconstruções
DecisõesdeDesign
• Qualdeveserotamanhomáximodeumnome?
• Pode-seuLlizarcaracteresconectores?
• Osnomessãocase-sensi(ve?
• Palavrasespeciaissãoreservadas?
FormatodosNomes
• Tamanhofixoouvariável?– FORTRANIeFORTRAN777caracteres– FORTRAN90eC31caracteres– C++Semlimitesnateoria,masdependedeimplementação– JavaSemlimites
• Case-sensiLveoucase-insensiLve?– Case-sensiLvediminuialegibilidadedocódigo
• Ex.:rosa,Rosa,ROSA
PalavrasEspeciais
• Palavrasespeciais– Nomearaçõesaseremexecutadas– SeparamenLdadesestáLcas
• Palavrasreservadasvspalavras-chave– Ex.:emFORTRAN
REAL laranjaREAL = 3.4
REAL INTEGERINTEGER REAL
Variáveis
• Variáveissãoabstraçõesdeendereçosdememória
• Tornamosprogramasmaisfáceisdecodificareentender
• Umavariávelpodesercaracterizadapeloseu:– Nome– Endereço– Valor– Tipo– Tempodevida– Escopo
Variáveis:Nomes
• IdenLficadoresdasvariáveis
Variáveis:Endereços
• Endereçodememóriaassociado
• Ummesmonomepodeestarassociadoadiferentesendereços– Duasvariáveiscomomesmonome(emfunçõesdisLntas)– Mesmavariável,masemumafunçãorecursiva
• Esteendereçoéconhecidocomol-value
Variáveis:Aliases
• MúlLplosidenLficadoresapontandoparaamesmaáreadememória
• Podehaverperdadelegibilidade
– Amodificaçãodeumavariáveltemefeitoemoutravariável
Variáveis:Tipo
• Determinafaixadevaloresqueumavariávelpodereceber– Exemplo:short(-32.768a32767)
• Conjuntodeoperaçõesassociadas– Operações:+,-,*,/– Funções:abs,exp
Variáveis:Valor
• Oconteúdodoendereçodememóriaassociadoavariável– Abstraçãodamemóriacomotamanhodavariável
• Tambémconhecidacomor-value– Paraacessaror-value,deve-seconhecerol-value
LinguagensdeProgramação
AMARRAÇÕES
Conceituação
• Amarração(oubinding)éumaassociaçãoentreenLdadesdeprogramação– Variável/Valor– IdenLficador/Tipo– Operador/símbolo
• Otempoqueocorreaamarraçãoéchamadotempodeamarração
• EnfoquenaamarraçãodeidenLficadoresaenLdades
TemposdeAmarração
• Asconstruçõesdeumalinguagempodemterosseguintestemposdeamarração
1) TempodeprojetodaLP2) Tempodeimplementação3) Tempodecompilação4) Tempodeligação5) Tempodecarga6) Tempodeexecução
Porqueéimportantesaberotempodeamarração?
1)TempodeProjetodaLP
• Definiçãodossímbolosdalinguagemeseucomportamento– Ex:*(mulLplicação)
• Definiçãodaspalavras-reservadaseseucomportamento– Ex.:true,if,while
2)TempodeImplementação
• Implementadasduranteacodificaçãodotradutor(emgeralnoscompiladores)
• Exemplo:EmC,definiçãodafaixadevaloresdoLpo– char-128a127– int-2,147,483,648a2,147,483,647
3)TempodeCompilação
• AssociaçãodavariávelcomseuLpo– Exemplo:
int i;char c;
• Associaçãodeexpressõescomseusoperadores– Exemplo:
3 * 2(x >> 4) & 0xF
4)TempodeLigação
• Integração(ligação)deváriosmóduloscompiladospreviamente• Exemplo
#include <stdio.h>#include <math.h>
void main() { printf("%f\n", sqrt(25));}
Ondeestáaimplementaçãodafunçãosqrt?
NabibliotecadematemáLca(libm.a)quepodeserligadaadicionandoaflag–lmaogcc
5)TempodeCarga
• Duranteocarregamentodoprograma
– Memóriasassociadasavariáveisglobaiseconstantes
– EndereçosdememóriarelaLvossubsLtuídosporendereçosdememóriaabsolutos
6)TempodeExecução
• Ocorridasemtempodeexecução
• Exemplo:– Associaçãodevaloravariável
• Ex:int x = 5;
– Associaçãodeáreasdememóriaavariáveis• Ex:int x = new int;
• ConsidereoseguintetrechodecódigoemCepreenchaatabela:
Exercício
Exemplo TempodeAmarração
PossíveisLposdecont
Tipodecont
Possíveisvaloresdecont
Valordecont
Possíveissignificadosdooperador+
Significadodooperador+nestaatribuição
Representaçãointernadoliteral5
int cont;/* ... */cont = cont + 5;
• Omomento em que ocorre a ligação pode ser classificado comocedo(earlybinding)outardio(latebinding)
• Quantomaiscedoocorrealigação,maioraeficiênciadeexecuçãodo programa, mas menor a flexibilidade das estruturasdisponibilizadas
Amarrações
AmarraçãodeTipo
• OLpodeveseramarradoavariávelparaqueestasejareferenciadapeloprogramas
• Aspectosimportantes– ComooLpodeveserdefinido?– Quandoaamarraçãodeveserfeita?
• AmarraçõesdeLpos
AmarraçãoEstáEca AmarraçãoDinâmica
• Antesdaexecução• Permaneceinalteradanaexecução
• Duranteaexecução• Podesercriada/alteradanaexecução
• PodeserobLdaatravésde
– Declaração explícita: instrução do programa que lista nomesdevariáveiseespecificaosLpos.• Ex.:emC:inti,charc;
– Declaraçãoimplícita:ConvençõesdeterminamseuLpo.• Exemplo em Fortran: começam com I, J, K, L, M, ou N
(INTEGER),outras(REAL)• ExemploemPerl:começamcom$(escalar),@(array),
%(hashtable)
AmarraçãodeTipoEstáLca
• Avariável é vinculadaaumLpoquando lheé atribuídaumvaloremumainstruçãodeatribuição
• A variável que está sendo atribuída é vinculada ao Lpo do valor,variávelouexpressãodoladodireitodaatribuição
• Vantagens:– Flexibilidadeegeneralidade
• Desvantagens:– Reduçãodacapacidadededetecçãodeerropelocompilador– Custodeimplementaçãodavinculaçãodinâmica
AmarraçãodeTipoDinâmica
• ExemplodealteraçãodeLpodinamicamenteemC#
• ExemplodeoperadoresquealteramoLpo
AmarraçãodeTipoDinâmica
<?php $x = 20; var_dump($x); $x += 'Texto...'; var_dump($x);?>
<script>var x = 20;alert(typeof(x));x += "Texto...";alert(typeof(x));
</script>
– JavaScript– PHP
dynamic variavel = new Int32();variavel = 10; // Int32variavel = 2.5; // Doublevariavel = ”25/02/2011"; //Stringvariavel = DateTime.Parse(variavel); // Data
AmarraçõesdeArmazenamento
• AlocaçãoAmarraçãofeitaemumacéluladememóriadisponívelobLdadeumpooldememória
• DesalocaçãoDevolveracéluladememóriadesvinculadaàvariáveldevoltaaopooldememória
• TempodevidaOtemponoqualaquelavariávelestávinculadaacéluladememóriaalocada– Começaquandoavariáveléalocadaeterminaquandoelaédesalocada
AmarraçõesdeArmazenamento
• Classificaçãodasvariáveisquantoàamarraçãodearmazenamento
– VariáveisestáLcas
– Variáveisstack-dinâmicas(pilha)
– Variáveisheap-dinâmicas• Explícitas• Implícitas
VariáveisEstáLcas
• Vinculadasàmemóriaantesdaexecuçãoepermanecematéoprogramaterminar
• Vantagens– Variáveis em subprogramas sensíveis à história (retêm valoresentrechamadas)
– Eficiência: endereçamento direto; inexistência deoverhead dealocaçãoedesalocação
• Desvantagens
– Flexibilidadereduzida(recursão)– ImpossibilidadedecomparLlhamentodamemória
VariáveisEstáLcas
• ExemploemC
• ExemploemJava
#include <stdio.h>
static char* var = "global";
void main() { printf("%s\n", var);}
class Foo {public static String bar = "foobar";
}EmJavaéalocadaemtempode
carregamentodaclasse
EmCéalocadaemtempodecompilação
VariáveisStack-Dinâmicas
• Vinculadasàcélulasdememórianomomentodadeclaração,masoLpoédefinidoestaLcamente
• Vantagens– Permiterecursividade– PermiteocomparLlhamentodememória
• Desvantagens– Overheaddealocaçãoedesalocaçãoemtempodeexecução– Nãosãosensíveisàhistória
VariáveisStack-Dinâmicas
• ExemploemC
void funct(int size) { char buffer[size]; /* ... */}
VariáveisHeap-DinâmicasExplícitas
• Células(abstratas)dememóriaalocadasedesalocadaspeloprogramadorduranteaexecuçãodoprograma
• Aheapmantémumacoleçãodecélulasalocadasdinamicamente(altamentedesorganizada)
• Célulassomentepodemserreferenciadasatravésdeponteirosoureferências
• AvinculaçãodeLpoéfeitaestaLcamente,masoarmazenamentoéfeitodinamicamente
VariáveisHeap-DinâmicasExplícitas
• Vantagens– Gestãodinâmicadememória
• Desvantagens– Custoassociadoamanutençãodaheap(alocação/desalocação)– AuLlizaçãodeponteirosnãoésegura
VariáveisHeap-DinâmicasExplícitas
• ExemploemC
• ExemploemC++
• ExemploemJava
int* node = malloc(sizeof(int));/* ... */free(node);
int* node = new int;/* ... */delete node;
Integer node = new Integer(10);/* ... */
OndeéfeitaaliberaçãodamemóriaemJava?
VariáveisHeap-DinâmicasImplícitas
• Armazenamento(céluladememória)somenteéassociadoquandoumvaloréatribuído
• Vantagens– ElevadograudeflexibilidadedoLpodevariável,permiLndodefinircódigosgenéricos
• Desvantagens
– Ineficienteporquetodososatributosdavariávelsãodinâmicos;– Dificuldadededetecçãodeerrospelocompilador.
VariáveisHeap-DinâmicasImplícitas
• ExemploemJavaScript
• ExemploemPerl
<script> var list = [ 5, "texto" ]; alert(typeof(list));</script>
#!/usr/bin/perl!!my @array = ( "1", "2", "3"); !!for $e (@array) { ! print $e . "\n"; !} !
LinguagensdeProgramação
ESCOPO
Escopo
• Emquaispartesdoprograma(instruções)umavariávelévisível(visibilidade)– Ouseja,sepodeserreferenciadanaqueleponto
• Variáveisnão-locaisdeumaunidadedoprogramasãoaquelasvisíveis,masnãodeclaradaslá
• Asregrasdeescopodeterminamcomoosnomessãoassociadoscomasvariáveis
Escopo
• Exemplo
01: int a = 13;02: void f() {03: int b = a; // Referência à variável do ponto 104: int a = 2;05: b = b + a; // Referência à variável do ponto 406: }
EscoposAninhados
• Definiçãodeescoposdentrodeoutros,formandoumasequênciadeescoposcomsucessoreseantecessores
• Aredefiniçãodeumavariávelcomomesmonome(numescopointerior)deumajáexistentenumescopoexterior,permite"esconder"(shadow)adefiniçãoexterior– C++,Pascal,ADApermitemoacessoaestasvariáveisescondidasemescoposexteriores
– JáJavanãoaceitashadowdentrodeprocedimentos
TiposdeEscopo
• EstáLco– Baseadonadescriçãotextualdoprograma– Amarraçõesfeitasemtempodecompilação
• Ex:Algol,Pascal,C,C++,Java,C#,Ada…
• Dinâmico– BaseadonasequênciadeaLvação(chamadas)dosmódulosdoprograma
– Amarraçõesfeitasemtempodeexecução• Ex:Lisp,APL,SNOBOL,Smalltalk…
EscopoEstáLco
• Blocos
– Permitemqueumaseçãodecódigopossuasuasprópriasvariáveislocaiscomescoporeduzido
– Trechodecódigodelimitadopormarcadores• Pascal:begineend• C,C++:{e}
EscopoEstáLco
x x
y
z
w
x
y
z
w
x
BlocoMonolíLco BlocosNãoAninhados BlocosAninhados
EscopoEstáLco
x
BlocoMonolíLco
• Programacomumúnicobloco– Amarraçõescomvisibilidadeglobal
• Estruturamuitoelementar– Nãoapropriadaparagrandesprogramas– Dificultaacodificaçãoporgrandesequipesdeprogramadores
• Ex:BASICeCOBOL
EscopoEstáLco
• Programadividoemblocos– Somentelocaisouglobais
• Qualquervariávelnão-localdeveserglobal
• Exemplo– FORTRAN:Todosossubprogramassãoseparadosecadaumatuacomoumbloco
x
y
z
w
BlocosNãoAninhados
EscopoEstáLco
• Blocospodemseraninhadosdentrodeoutrosblocos
• IdenLficadorespodemseramarradosemcadabloco– IdenLficadoressãoprocuradosde“dentroparafora”
• Vantagem:programas+legíveis• Desvantagem:ocultamentodevariáveis
x
y
z
w
x
BlocosAninhados
EscopoEstáLco
• ExemplodeocultamentoemC:
#include <stdio.h>
void main() {int i = 0;int x = 10;while (i++ < 100) {
float x = 3.231;printf("x = %f\r\n", x * i);
}}
Javanãopermitetalocultamento!
EscopoEstáLco
• Problemascomestruturaaninhada
P
A B C
D E D
P
A B C
E
D
BlocoDduplicado BlocoDacessívelpormaisblocosqueintencionado
EscopoEstáLco
• CuLlizaumaabordagemmista
– Definidosporfunções:Blocosnão-aninhados• FunçõespodemserreusadasevariáveisglobaispodemsercomparLlhadas(visibilidadeglobal)
– Definidosinternamente:Blocosaninhados• Nãopodeserreaproveitado
EscopoEstáLco
• ExemploemC
01: #include <stdio.h>02: 03: int x = 10;04: int y = 15;05: 06: void f() {07: if (y – x)08: int z = x + y;09: }
10: void g() {11: int w;12: w = x;13: }14:15: void main() {16: f();17: x = x + 3;18: g();19: }
EscopoDinâmico
• Sãoamarradasdeacordocomofluxodeprograma
• IdenLficadoréassociadoàdeclaraçãomaispróximanapilhadechamada
• ExemploemlinguagemhipotéLca
program p { inteiro x = 1; procedimento sub1() { escreva(x); } procedimento sub2() { inteiro x = 3; sub1(); } sub2(); sub1(); }
EscopoDinâmico
• Problemas– PerdadeeficiênciaverificaçãodeLposemtempodeexecução
– Reduçãonalegibilidadedi~cildeterminarasequênciadechamadas
– Acessolentoavariáveisnãolocaisdi~cilidenLficarosidenLficadoresdasequênciadechamadas
– Reduçãodaconfiabilidadevariáveislocaisacessadasporquaisquerfunçõeschamadas
TempodeVida
• Escopoetempodevidapossuemumarelaçãopróxima,massãoconceitosdiferentes
– EscopoestáLcoéumconceitotextual
– Tempodevidaéumconceitotemporal
TempodeVida
program Pvar m: integer; procedure R (n: integer); begin Escopo de n Escopo de m if n > 0 then R (n-1) end;begin R(2)end.
início P início R(2) início R(1) início R(0) fim R(0) fim R(1) fim R(2) fim P
tempo de vida n=0
tempo de vida n=1
tempo de vida n=2
tempo de vida m
• Variávelx– Escopo:nãoestendefoo– Tempodevida:estendefoo
• Variávely– Escopo:visívelemfoo– Tempodevida:estendeportodooprograma
TempodeVida
• ExemploemC
void foo() {static int y;/* ... */
}
int main() {int x;foo();
}
AmbientesdeReferenciamento
• Conjuntodetodososnomesvisíveisemumadeterminadainstruçãooupontodeprograma
• NoescopoestáLco,oambientedereferenciamentoéconsLtuídodetodasasvariáveisdeclaradasemseuescopolocal,comoconjuntodetodasasvariáveisdeseusescoposascendentesvisíveis
AmbientesdeReferenciamento
program exemplo; var a,b: integer; procedure sub1; var x,y: integer; begin (1) end; procedure sub2; var x: integer; procedure sub3; var x: integer; begin (2) end; begin (3) end; begin (4) end;
• Ponto(1)– x, y (???)– a, b (???)
• Ponto(2)– x (???)– a, b (???)
• Ponto(3)– x (???)– a, b (???)
• Ponto(4)– a, b (???)
AmbientesdeReferenciamento
program exemplo; var a,b: integer; procedure sub1; var x,y: integer; begin (1) end; procedure sub2; var x: integer; procedure sub3; var x: integer; begin (2) end; begin (3) end; begin (4) end;
• Ponto(1)– x, y (sub1)– a, b (exemplo)
• Ponto(2)– x (sub3)– a, b (exemplo)
• Ponto(3)– x (sub2)– a, b (exemplo)
• Ponto(4)– a, b (exemplo)
Constantes
• Umaconstanteéumavariávelvinculadaaumvalornomomentoemqueévinculadaaumacéluladememória
• Ovalordasconstantesnãopodeseralterado
• Ajudamnalegibilidadeeconfiabilidadedoprograma
InicializaçãodeVariáveis
• Avinculaçãodeumavariávelaumvalor,nomomentoemqueévinculadaaumacéluladememória,édesignadoporinicialização
• Exemplos– Fortran:REALPIINTEGERSOMA
DATASOMA/0/,PI/3,14159/– Ada:SOMA:INTEGER:=0;
• Pascalnãooferecemeiosdeseinicializarvariáveis,excetonaatribuição
LinguagensdeProgramação
ISSOÉTUDOPESSOAL!
Top Related