linguagens de programação -...
TRANSCRIPT
![Page 1: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/1.jpg)
LinguagensdeProgramação
AndreiRimsaÁlvares
Nomes,AmarraçõeseEscopo
![Page 2: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/2.jpg)
Sumário
• Nomes• Amarrações• Escopo
![Page 3: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/3.jpg)
LinguagensdeProgramação
NOMES
![Page 4: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/4.jpg)
Nomes
• Conceitomaisamploquevariáveis
• Podemrepresentar– Variáveis– Labels– Sub-programas(funções)– Parâmetrosformais– Outrasconstruções
![Page 5: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/5.jpg)
DecisõesdeDesign
• Qualdeveserotamanhomáximodeumnome?
• Pode-seuLlizarcaracteresconectores?
• Osnomessãocase-sensi(ve?
• Palavrasespeciaissãoreservadas?
![Page 6: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/6.jpg)
FormatodosNomes
• Tamanhofixoouvariável?– FORTRANIeFORTRAN777caracteres– FORTRAN90eC31caracteres– C++Semlimitesnateoria,masdependedeimplementação– JavaSemlimites
• Case-sensiLveoucase-insensiLve?– Case-sensiLvediminuialegibilidadedocódigo
• Ex.:rosa,Rosa,ROSA
![Page 7: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/7.jpg)
PalavrasEspeciais
• Palavrasespeciais– Nomearaçõesaseremexecutadas– SeparamenLdadesestáLcas
• Palavrasreservadasvspalavras-chave– Ex.:emFORTRAN
REAL laranjaREAL = 3.4
REAL INTEGERINTEGER REAL
![Page 8: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/8.jpg)
Variáveis
• Variáveissãoabstraçõesdeendereçosdememória
• Tornamosprogramasmaisfáceisdecodificareentender
• Umavariávelpodesercaracterizadapeloseu:– Nome– Endereço– Valor– Tipo– Tempodevida– Escopo
![Page 9: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/9.jpg)
Variáveis:Nomes
• IdenLficadoresdasvariáveis
![Page 10: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/10.jpg)
Variáveis:Endereços
• Endereçodememóriaassociado
• Ummesmonomepodeestarassociadoadiferentesendereços– Duasvariáveiscomomesmonome(emfunçõesdisLntas)– Mesmavariável,masemumafunçãorecursiva
• Esteendereçoéconhecidocomol-value
![Page 11: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/11.jpg)
Variáveis:Aliases
• MúlLplosidenLficadoresapontandoparaamesmaáreadememória
• Podehaverperdadelegibilidade
– Amodificaçãodeumavariáveltemefeitoemoutravariável
![Page 12: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/12.jpg)
Variáveis:Tipo
• Determinafaixadevaloresqueumavariávelpodereceber– Exemplo:short(-32.768a32767)
• Conjuntodeoperaçõesassociadas– Operações:+,-,*,/– Funções:abs,exp
![Page 13: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/13.jpg)
Variáveis:Valor
• Oconteúdodoendereçodememóriaassociadoavariável– Abstraçãodamemóriacomotamanhodavariável
• Tambémconhecidacomor-value– Paraacessaror-value,deve-seconhecerol-value
![Page 14: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/14.jpg)
LinguagensdeProgramação
AMARRAÇÕES
![Page 15: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/15.jpg)
Conceituação
• Amarração(oubinding)éumaassociaçãoentreenLdadesdeprogramação– Variável/Valor– IdenLficador/Tipo– Operador/símbolo
• Otempoqueocorreaamarraçãoéchamadotempodeamarração
• EnfoquenaamarraçãodeidenLficadoresaenLdades
![Page 16: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/16.jpg)
TemposdeAmarração
• Asconstruçõesdeumalinguagempodemterosseguintestemposdeamarração
1) TempodeprojetodaLP2) Tempodeimplementação3) Tempodecompilação4) Tempodeligação5) Tempodecarga6) Tempodeexecução
Porqueéimportantesaberotempodeamarração?
![Page 17: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/17.jpg)
1)TempodeProjetodaLP
• Definiçãodossímbolosdalinguagemeseucomportamento– Ex:*(mulLplicação)
• Definiçãodaspalavras-reservadaseseucomportamento– Ex.:true,if,while
![Page 18: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/18.jpg)
2)TempodeImplementação
• Implementadasduranteacodificaçãodotradutor(emgeralnoscompiladores)
• Exemplo:EmC,definiçãodafaixadevaloresdoLpo– char-128a127– int-2,147,483,648a2,147,483,647
![Page 19: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/19.jpg)
3)TempodeCompilação
• AssociaçãodavariávelcomseuLpo– Exemplo:
int i;char c;
• Associaçãodeexpressõescomseusoperadores– Exemplo:
3 * 2(x >> 4) & 0xF
![Page 20: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/20.jpg)
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
![Page 21: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/21.jpg)
5)TempodeCarga
• Duranteocarregamentodoprograma
– Memóriasassociadasavariáveisglobaiseconstantes
– EndereçosdememóriarelaLvossubsLtuídosporendereçosdememóriaabsolutos
![Page 22: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/22.jpg)
6)TempodeExecução
• Ocorridasemtempodeexecução
• Exemplo:– Associaçãodevaloravariável
• Ex:int x = 5;
– Associaçãodeáreasdememóriaavariáveis• Ex:int x = new int;
![Page 23: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/23.jpg)
• 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;
![Page 24: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/24.jpg)
• 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
![Page 25: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/25.jpg)
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
![Page 26: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/26.jpg)
• 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
![Page 27: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/27.jpg)
• 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
![Page 28: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/28.jpg)
• 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
![Page 29: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/29.jpg)
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
![Page 30: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/30.jpg)
AmarraçõesdeArmazenamento
• Classificaçãodasvariáveisquantoàamarraçãodearmazenamento
– VariáveisestáLcas
– Variáveisstack-dinâmicas(pilha)
– Variáveisheap-dinâmicas• Explícitas• Implícitas
![Page 31: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/31.jpg)
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
![Page 32: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/32.jpg)
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
![Page 33: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/33.jpg)
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
![Page 34: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/34.jpg)
VariáveisStack-Dinâmicas
• ExemploemC
void funct(int size) { char buffer[size]; /* ... */}
![Page 35: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/35.jpg)
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
![Page 36: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/36.jpg)
VariáveisHeap-DinâmicasExplícitas
• Vantagens– Gestãodinâmicadememória
• Desvantagens– Custoassociadoamanutençãodaheap(alocação/desalocação)– AuLlizaçãodeponteirosnãoésegura
![Page 37: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/37.jpg)
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?
![Page 38: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/38.jpg)
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.
![Page 39: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/39.jpg)
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"; !} !
![Page 40: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/40.jpg)
LinguagensdeProgramação
ESCOPO
![Page 41: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/41.jpg)
Escopo
• Emquaispartesdoprograma(instruções)umavariávelévisível(visibilidade)– Ouseja,sepodeserreferenciadanaqueleponto
• Variáveisnão-locaisdeumaunidadedoprogramasãoaquelasvisíveis,masnãodeclaradaslá
• Asregrasdeescopodeterminamcomoosnomessãoassociadoscomasvariáveis
![Page 42: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/42.jpg)
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: }
![Page 43: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/43.jpg)
EscoposAninhados
• Definiçãodeescoposdentrodeoutros,formandoumasequênciadeescoposcomsucessoreseantecessores
• Aredefiniçãodeumavariávelcomomesmonome(numescopointerior)deumajáexistentenumescopoexterior,permite"esconder"(shadow)adefiniçãoexterior– C++,Pascal,ADApermitemoacessoaestasvariáveisescondidasemescoposexteriores
– JáJavanãoaceitashadowdentrodeprocedimentos
![Page 44: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/44.jpg)
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…
![Page 45: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/45.jpg)
EscopoEstáLco
• Blocos
– Permitemqueumaseçãodecódigopossuasuasprópriasvariáveislocaiscomescoporeduzido
– Trechodecódigodelimitadopormarcadores• Pascal:begineend• C,C++:{e}
![Page 46: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/46.jpg)
EscopoEstáLco
x x
y
z
w
x
y
z
w
x
BlocoMonolíLco BlocosNãoAninhados BlocosAninhados
![Page 47: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/47.jpg)
EscopoEstáLco
x
BlocoMonolíLco
• Programacomumúnicobloco– Amarraçõescomvisibilidadeglobal
• Estruturamuitoelementar– Nãoapropriadaparagrandesprogramas– Dificultaacodificaçãoporgrandesequipesdeprogramadores
• Ex:BASICeCOBOL
![Page 48: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/48.jpg)
EscopoEstáLco
• Programadividoemblocos– Somentelocaisouglobais
• Qualquervariávelnão-localdeveserglobal
• Exemplo– FORTRAN:Todosossubprogramassãoseparadosecadaumatuacomoumbloco
x
y
z
w
BlocosNãoAninhados
![Page 49: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/49.jpg)
EscopoEstáLco
• Blocospodemseraninhadosdentrodeoutrosblocos
• IdenLficadorespodemseramarradosemcadabloco– IdenLficadoressãoprocuradosde“dentroparafora”
• Vantagem:programas+legíveis• Desvantagem:ocultamentodevariáveis
x
y
z
w
x
BlocosAninhados
![Page 50: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/50.jpg)
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!
![Page 51: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/51.jpg)
EscopoEstáLco
• Problemascomestruturaaninhada
P
A B C
D E D
P
A B C
E
D
BlocoDduplicado BlocoDacessívelpormaisblocosqueintencionado
![Page 52: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/52.jpg)
EscopoEstáLco
• CuLlizaumaabordagemmista
– Definidosporfunções:Blocosnão-aninhados• FunçõespodemserreusadasevariáveisglobaispodemsercomparLlhadas(visibilidadeglobal)
– Definidosinternamente:Blocosaninhados• Nãopodeserreaproveitado
![Page 53: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/53.jpg)
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: }
![Page 54: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/54.jpg)
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(); }
![Page 55: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/55.jpg)
EscopoDinâmico
• Problemas– PerdadeeficiênciaverificaçãodeLposemtempodeexecução
– Reduçãonalegibilidadedi~cildeterminarasequênciadechamadas
– Acessolentoavariáveisnãolocaisdi~cilidenLficarosidenLficadoresdasequênciadechamadas
– Reduçãodaconfiabilidadevariáveislocaisacessadasporquaisquerfunçõeschamadas
![Page 56: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/56.jpg)
TempodeVida
• Escopoetempodevidapossuemumarelaçãopróxima,massãoconceitosdiferentes
– EscopoestáLcoéumconceitotextual
– Tempodevidaéumconceitotemporal
![Page 57: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/57.jpg)
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
![Page 58: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/58.jpg)
• 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();
}
![Page 59: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/59.jpg)
AmbientesdeReferenciamento
• Conjuntodetodososnomesvisíveisemumadeterminadainstruçãooupontodeprograma
• NoescopoestáLco,oambientedereferenciamentoéconsLtuídodetodasasvariáveisdeclaradasemseuescopolocal,comoconjuntodetodasasvariáveisdeseusescoposascendentesvisíveis
![Page 60: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/60.jpg)
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 (???)
![Page 61: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/61.jpg)
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)
![Page 62: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/62.jpg)
Constantes
• Umaconstanteéumavariávelvinculadaaumvalornomomentoemqueévinculadaaumacéluladememória
• Ovalordasconstantesnãopodeseralterado
• Ajudamnalegibilidadeeconfiabilidadedoprograma
![Page 63: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/63.jpg)
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
![Page 64: Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/... · – Overhead de alocação e desalocação em ... • Células somente podem](https://reader034.vdocuments.mx/reader034/viewer/2022052420/5ab1e28c7f8b9ac3348cfaa7/html5/thumbnails/64.jpg)
LinguagensdeProgramação
ISSOÉTUDOPESSOAL!