Publicado el 12 de Abril del 2018
428 visualizaciones desde el 12 de Abril del 2018
1,2 MB
31 paginas
Creado hace 12a (11/10/2011)
LenguajesdeProgramación.
Capítulo3.
Variables.
CarlosUreñaAlmagro
Curso2011-12
Contents
1 Introducción
2 Referencias
3 Almacenamientodevalores
.
.
.
3.1 Almacenamientodetiposcompuestos .
.
.
.
.
3.2 Almacenamientodetiposrecursivos .
4 Tiposdevariablesytiempodevida
5 Referenciasinválidasyrecolecciónautomáticadebasura
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
5
7
8
12
13
24
1
LP(11-12)3. Variables.
1 Introducción
Invencióndelconceptodevariable
Históricamente,elconceptodevariablesurgeenlosprimeroslenguajesdeprogramación(p.ej.: Plankalkul,
ensambladores,Fortran). Seintentaresolvervariosproblemasdelcódigomáquina:
• direccionamientousandodireccionesnuméricas
• ausenciadeinformaciónsobrelainterpretaciónválidadelassecuenciasdebitsenmemoria
• ausenciadeinformaciónsemántica.
Direccionamientousandodireccionesnuméricas:
• Encódigomáquina,cadazonadememoriadondesealmacenansecuenciasdebitsseidentificaasu
vezporunasecuenciadebits(representaunvalornumérico).
• Aesevalornuméricoselellamalocalizacióndelasecuenciadebitsalmacenada.
Direccionamientousandodireccionesnuméricas:
• Ladireccióndeunvalorenmemoriadependedeladistribución(layout)detodoslosotrosvaloresen
memoria.
Ausenciadeinformaciónsobrelainterpretaciónválida
• Esposiblerealizarcualquierinterpretacióndedichassecuencias. Esfácilcometererrores.
Ausenciadeinformaciónsemántica
• No hay información en el programa sobre la semántica (el significado) de una secuencia de bits
almacenadaenunaposicióndememoria
ElconceptodeVariable
Una variable es una abstracción sobre un valor almacenado en una localización de memoria, usando la
representaciónasociadaauntipodedatos.
creadoOctober11,2011
página3.2/31
LP(11-12)3. Variables.
ElconceptodeVariable
• Unavariablepuedetenerunnombre
• Elvaloralmacenadopuedecambiardurantelaejecucióndeunprograma.
• Lalocalizaciónpuedecambiardurantelaejecucióndelprograma
Lasvariablescomoabstracciones
Abstracciónaquísignificaquepodemosolvidarnosde:
• Elvalorconcreto(solohayqueconocersutipo)
• Lalocalizaciónytamañodelazonadememoriadondesealmacenalarepresentacióndelvalor
• Larepresentaciónconcretaasociadaaltipodedatos
Beneficiosdelasabstracción
Olvidarnosdetodoestonosliberadelanecesidaddeocuparnosdeestosaspectos:
• Estoimpidequecometamosloserroresquesepuedencometeralocuparnosdeellos(mayorfiabilidad)
• Elusodevariablesconnombresytiposfacilitalaescrituradeprogramas,yaumentasulegibilidad.
Atributos
Enunpograma,unavariablesunaentidadqueestácompuestadeatributos,queson:
• Identidad(unvalordeuntipodependientedelaimplementación)
• Nombre(unasecuenciadedígitosyletras)
• Localizacióndememoria(unvalordetipopuntero)
• Valor(unasecuenciadebits)
• Tipo(entidadformal,determinalarepresentación)
• Tiempodevida(intervaloointervalosdetiempo)
creadoOctober11,2011
página3.3/31
LP(11-12)3. Variables.
Nombredelasvariables
• Esunidentificador(unasecuenciadedígitosyletras).
• Representaalavariableenelprogramafuente
• Permitealprogramadoraportarinformaciónsobreelsignificadodelvaloralmacenado
• Puedenexistirvariablessinnombre(sedenominananónimas)
• Puedenexistirvariablesconvariosnombres(aesosnombresselellamanalias)
Localizacióndememoria
• Sepuedecalcularapartirdelaidentidad
• Identificadondeestáalojadoelvalor
• Puedecambiarduranteeltiempodevidadelavariable.
• Loslenguajesdebenpermitiralprogramadorabstraersedeestevalor
Identidaddelasvariables
• Esunvalordeuntipodependientedellenguajey/olaimplementación
• Cadavariabledelprogramatieneasociadaunaidentidadúnica
• Nopuedecambiarduranteeltiempodevidadelavariable.
• Existeunafunciónqueasociaacadaidentidadunalocalizacióndememoria
• Laidentidadpuedeimplementarsemedianteeltipopuntero(C/C++),medianteuníndiceenunatabla
devariables(podríaserenJavaoC#),medianteelnombredelavariable(Python,Perl,Php)
Tipodelasvariables
• Determinaelconjuntodevaloresquepuedetomarlavariable,ylasoperacionesquepuedenhacerse
sobreella.
• Algunoslenguajesfuerzanaasociaruntipoúnicoacadavariable
• Algunoslenguajespermitenvariablessintipo(lasecuenciadebitssemanejatalcual)
• Algunoslenguajespermitenqueeltipodeunavariablecambiedurantesutiempodevida.
creadoOctober11,2011
página3.4/31
LP(11-12)3. Variables.
Tiempodevida
Laejecucióndeunprogramaocupaunintervalodetiempo:
• Eltiempodevidadeunavariableeselintervaloointervalosdetiempoduranteloscualeslavariable
existe
• Los intervalos están normalmente incluidos en el intervalo de tiempo de ejecución del programa. A
cadaunodeellosselesdenominaintervalodeexistencia
• Unavariableexistedurantelaejecucióncuandosepuedeaccederasuvalor,enelsentidodequese
puedegarantizarquedichovalorestáalmacenadoensulocalizaciónusandolarepresentaciónasociada
asutipo.
Ámbitodelasvariables
• Eslaporciónoporcionesdelprogramafuenteenloscualeslaaparicióndelnombredelavariablees
correctayhacereferenciaadichavariable,asusatributosoasuvalor.
• Lasvariablessinnombrenotienenámbito.
Otrosatributosdelasvariables
Lasvariablespuedentenerotrosatributos,p.ej.:
• Unavariablepuedesermodificableonomodificable,lassegundasnopuedencambiardevalordurante
unintervalodeexistencia(selessuelesllamarvariablesdesololectura.
2 Referencias
Referencias
Sea Tuntipocualquiera:
• Enunmomentodelaejecucióndeunprograma,podemosconsiderarelconjuntodelasidentidadesde
todaslasvariablesdetipo Tqueefectivamenteexistanenesemomento.
• Esteconjuntoesuntipo,quellamaremoseltipodelasreferenciasa T,(lonotamoscomo re f (T))
• Enalgunoslenguajes,podemosconsiderareltipodetodaslasreferencias,sintenerencuentaeltipo
delavariablereferenciada.
creadoOctober11,2011
página3.5/31
ref (T) =ref(T) ∪ {null}
LP(11-12)3. Variables.
Lareferencianula
Existeunvalordetiporeferencia,especial,llamadolareferencianula,quenoeslaidentidaddeninguna
variable,yquellamamosnull
• Normalmente,noconsideraremosunvalornuloentrelasreferencias
yaquenosirveparaaccederaningunavariable.
• Elconjuntoref eselconjuntodetodaslasreferenciasavariablesdetipo T,incluyendounvalornulo:
PunterosenC/C++
EllenguajeC/C++contemplalasreferenciasauntipo T, esdecir, eltiporef (T) , sedescribenconel
siguientedescriptordetipo T *(donde Teseldescriptordetipodeltipo T)
• EnlabibliografíasobreellenguajeC/C++,aestetipodereferenciasselesllamapunteros(pointers)
• Serepresentanenmemoriausandoelformatoparalocalizacionesdememoriadictadoporelhardware
subyacente.
• Secontemplaelvalornulo(elcero). Sepuedeusarelliteralentero 0(seconviertealenteronulo),
aunqueesmáslegibleusar NULLqueestádefinidocomo 0
ReferenciasenC/C++
LospunterosenC/C++presentanalgunosproblemas:
• Eltipo T *incluyetodaslasreferenciasválidas,másalgunasquenoloson.
• Seincluyetodoslosvaloresasociadosalocalizacionesdondealgunavezsehaalmacenadounavariable
detipo T
• Loanteriordalugarafrecuenteserrores.
Referencias(access)enAda
• EnAda83,eltipodelasreferenciasavariablesdetipo Tsedeclaracomo access T
• EnAda95,además,esválidousar access all T
creadoOctober11,2011
null /∈ref(T)
página3.6/31
LP(11-12)3. Variables.
Referenciasenotroslenguajes
EnloslenguajesJava,C#,Pythonyotrosnohayunasintaxisespecíficaparalasreferencias
• En estos lenguajes, el esquema de almacenamiento de variables (se verá más adelante) dicta que
variablessonreferencias.
• Loanteriordependeesencialmentedeltipodelavariable.
• Sehaceimplicitamente,nohayconstruccionesexplícitasparadeclararvariablesdetiporeferencia.
3 Almacenamientodevalores
Lasceldasdememoria
• Unaceldadememoriaesunasecuenciacontiguadebitsdelamemoria,deltamañomínimoquepuede
serasociadoconunalocalización(odirección)única,ytransferidoentrelaCPUylamemoria.
• Elconjuntodelocalizacionesodireccionesdeceldasenunconjuntofinitoordenadoynumerablede
valores,cadaunodeloscualesestaasociadoaunaceldadememoriadisponibleparaelprograma.
Lasceldasdememoria
• Eltamañoenbitsdelasceldasesfijoparacadaarquitecturahardware,sistemaoperativoycompilador
ointérprete.
• Estetamañosuelesermúltiplode8(unnúmeroenterodebytes).
• Eldiseñodeloslenguajesdeprogramaciónesindependientedeltamañodelasceldas
Ladireccióndeunavariable
• Cadavariable vdeuntipo Tocuparáunasecuenciadeceldasconsecutivasenmemoria(unbloque)
creadoOctober11,2011
página3.7/31
LP(11-12)3. Variables.
• Lalocalizacióndelavariable(dir(v))eslalocalizacióndelaprimeraceldaqueocupa(penlafigura)
3.1 Almacenamientodetiposcompuestos
Almacenamientodetiposcompuestos
Enloscasosdelasvariablesdetiposcompuestosnorecursivos(arraysyregistros),podemosdecirqueuna
variable(a)incluyeotrasvariables(c),queformanpartedelaprimera:
Arraysdetamañofijo
Enlosdiversoslenguajes,losarraysunidimensionalesdetamañofijosealmacenanusandounasecuencia
consecutivadebloquesdememoria,cadaunoconunvalor:
creadoOctober11,2011
página3.8/31
LP(11-12)3. Variables.
EnellenguajeC,losvaloressealmacenantalcual:
losvaloresalmacenados(ai)sondeuntipo T,eltamañototales s ndonde neselnúmerodeelementosy
s = tam(T). Elvalor nesconocidoentiempodecompilación.
Problemasenlosaccesosalosarrays
EnellenguajeC,unarraydetamañofijopuedeaccedersecomounarraydetamañovariable(dinámico)a
travésdeunpunteroalmismo,estoesmuyfrecuente
• Estoocurre,porejemplo,alpasarunarraycomoparámetroaunafunción
• Juntoconelpuntero,esnecesariopasarinformacióndeltamaño,paraquelosaccesoslotenganen
cuenta
• Estolodebedegestionarelprogramadorypuededarlugaraerrores
• Portanto,enotroslenguaje(p.ej. enAdaoJava),juntoconlasecuenciadevaloressealmacenael
tamañosiempre(paraarraysestáticosydinámicos)
RepresentacióndearraysenAdayJava
creadoOctober11,2011
página3.9/31
a0a1an-1........pp+sp+(n-1)san-2a2p+2s................ LP(11-12)3. Variables.
EnJavayC#,lasecuenciadevaloresincluyeunprefijoconelnúmerodeellos:
EnAda,siempreseincluyealiniciodosenterosconlosindicesminimoymáximodelarray:
Arraysdinámicos
Enlamayoríadeloslenguajes,losarraysdinámicossealmacenanusandounpuntero(enC)oreferenciaa
lasecuenciadevalores,queestáenbloquesdememorianocontiguosadichareferencia
EnC/C++nohayinformacióndeltamaño:
Arraysdinámicoseinformacióndetamaño
EnJavayC#seincluyeeltamaño,locualpermitecomprobarencualquieraccesoquelosíndicestienen
creadoOctober11
Comentarios de: Capítulo 3. Variables (0)
No hay comentarios