Linguagens de Programação -...

Post on 21-Mar-2018

222 views 1 download

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

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!