Linguagens de Programação -...

64
Linguagens de Programação Andrei Rimsa Álvares Nomes, Amarrações e Escopo

Transcript of Linguagens de Programação -...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

•  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

•  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

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

•  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

•  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

•  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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

•  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

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

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

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

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

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

LinguagensdeProgramação

ISSOÉTUDOPESSOAL!