Title | Cap Muestra Joyanes 8448156315 |
---|---|
Author | Pedro Arias |
Course | Fundamentos de Ingeniería de Software |
Institution | Universidad APEC |
Pages | 37 |
File Size | 1.1 MB |
File Type | |
Total Downloads | 72 |
Total Views | 128 |
Download Cap Muestra Joyanes 8448156315 PDF
capitulo
2
tipos de datos: Clases y objetos Objetivos Con el estudio de este capítulo usted podrá: • Definir lo que es un tipo de datos. • Conocer los tipos de datos básicos. • Conocer los tipos de datos estructurados. • Especificar los tipos abstractos de datos. • Entender el concepto de encapsulación de datos a través de las clases. • Definir las clases como una estructura que encierra datos y métodos. • Especificar tipos abstractos de datos a través de una clase. • Establecer controles de acceso a los miembros de una clase. • Identificar los miembros dato de una clase como la representación de las propiedades de un objeto. • Identificar los métodos de una clase con el comportamiento o funcionalidad de los objetos.
Contenido 2.1. Abstracción en lenguajes de programación. 2.2. Tipos abstractos de datos. 2.3. Especificación de los TAD. 2.4. Clases y objetos. 2.5. Declaración de una clase. 2.6. Paquetes. 2.7. Constructores.
Conceptos clave ♦ Abstracción. ♦ Componentes. ♦ Constructores. ♦ Encapsulación. ♦ Especificadores de acceso: public, protected, private.
2.8. Recolección de objetos. 2.9. Objeto que envía el mensaje: this. 2.10. Miembros static de una clase. 2.11. Clase Object. 2.12. Tipos abstractos de datos en Java. RESUMEN EJERCICIOS PROBLEMAS
♦ ♦ ♦ ♦ ♦
Interfaz. Ocultación de la información. Reutilización. Software. Tipos de datos y variables.
Para profundizar (página web: www.mhe.es/joyanes) ▪ Aplicación del tipo abastracto de dato conjunto.
23
24 Estructuras de datos en Java
IntrOduCCIón Enestecapítuloseexaminanlosconceptosdemodularidadyabstracción de datos.Lamodularidadeslaposibilidaddedividirunaaplicaciónenpiezasmáspequeñasllamadasmódulos.La abstracción de datoseslatécnicaparainventarnuevostiposdedatosqueseanmásadecuadosa unaaplicacióny,porconsiguiente,facilitenlaescrituradelprograma.Latécnicadeabstracción dedatosesunatécnicapotentedepropósitogeneralque,cuandoseutilizaadecuadamente,puede producirprogramasmáscortos,máslegiblesyflexibles. Loslenguajesdeprogramaciónsoportanensuscompiladorestipos de datos fundamentales o básicos (predefinidos),talescomoint,charyfloatenJava,CyC++.LenguajesdeprogramacióncomoJavatienencaracterísticasquepermitenampliarellenguajeañadiendosuspropios tiposdedatos. Un tipo de dato definido por el programador se denomina tipo abstracto de dato, TAD, (abstract data type, ADT). El término abstracto se refiere al medio en que un programador abstraealgunosconceptosdeprogramacióncreandounnuevotipodedato. Lamodularizacióndeunprogramautilizalanocióndetipoabstractodedato(TAD)siempre queseaposible.Siellenguajedeprogramaciónsoportalostiposquedeseaelusuarioyelconjuntodeoperacionessobrecadatipo,seobtieneunnuevotipodedatodenominadoTAD. Una claseesuntipodedatoquecontienecódigo(métodos)ydatos.Unaclasepermiteencapsulartodoelcódigoylosdatosnecesariosparagestionaruntipoespecíficodeunelemento deprograma,comounaventanaenlapantalla,undispositivoconectadoaunacomputadora,una figuradeunprogramadedibujoounatarearealizadaporunacomputadora.Enestecapítulose aprenderáacrear(definiryespecificar)yautilizarclasesindividuales.
2.1.
ABStrACCIón En LEnGuAJES dE PrOGrAMACIón
Los lenguajes de programación son las herramientas mediante las cuales los diseñadores de lenguajespuedenimplementarlosmodelosabstractos.Laabstracciónofrecidaporloslenguajes deprogramaciónsepuededividirendoscategorías: abstracción de datos(pertenecientealos datos)yabstracción de control(pertenecientealasestructurasdecontrol). Desdecomienzosdeladécadadelossesenta,cuandosedesarrollaronlosprimeroslenguajes deprogramacióndealtonivel,hasidoposibleutilizarlasabstraccionesmásprimitivasdeambas categorías(variables,tiposdedatos,procedimientos,controldebucles,etc.).
2.1.1.
Abstracciones de control
Los microprocesadores ofrecendirectamente sólo dos mecanismos paracontrolarel flujo y ejecución de las instrucciones: secuencia y salto. Los primeros lenguajes de programación dealtonivelintrodujeronlasestructurasdecontrol:sentenciasdebifurcación (if)ybucles (for, while, do-loop, etc.). Lasestructurasdecontroldescribenelordenenelqueseejecutanlassentenciasogruposde sentencia(unidades de programa).Lasunidadesdeprogramaseutilizancomobloquesbásicos delaclásicadescomposición“descendente”.Entodosloscasos,lossubprogramasconstituyen una herramienta potente de abstracción ya que, durante su implementación, el programador describeendetallecómofuncionan.Cuandoelsubprogramasellama,bastaconconocerloque haceynocómolohace.Deestemodo,seconviertenencajasnegrasqueamplíanellenguaje deprogramaciónautilizar.Engeneral,lossubprogramassonlosmecanismosmásampliamente utilizadosparareutilizarcódigo,atravésdecoleccionesdesubprogramasenbibliotecas.
Tipos de datos: Clases y objetos
25
Lasabstraccionesylasestructurasdecontrolseclasificanenestructurasdecontrolanivelde sentenciayaniveldeunidades.Lasabstraccionesdecontrolaniveldeunidadseconocencomo abstracciones procedimentales. abstracción procedimental (por procedimientos) Es esencial para diseñar software modular y fiable la abstracción procedimental que se basa enlautilizacióndeprocedimientosofuncionessinpreocuparsedecómoseimplementan.Esto es posible sólo si conocemos qué hace el procedimiento; esto es, conocemos la sintaxis y la semánticaqueutilizaelprocedimientoofunción.Laabstracciónapareceenlossubprogramas debidoalassiguientescausas: • Conelnombredelossubprogramas,unprogramadorpuedeasignarunadescripciónabstractaquecapturaelsignificadoglobaldelsubprograma.Utilizandoelnombreenlugarde escribirelcódigo,permitealprogramadoraplicarlaacciónentérminosdesudescripción dealtonivelenlugardesusdetallesdebajonivel. • Los subprogramas proporcionan ocultación de la información. Las variables locales y cualquierotradefiniciónlocalseencapsulanenelsubprograma,ocultándosedeforma que no pueden utilizarse fuera del subprograma. Por consiguiente, elprogramador no tienequepreocuparsesobrelasdefinicioneslocales. • Losparámetrosdelossubprogramas,juntoconlaocultacióndelainformaciónanterior, permitencrearsubprogramasqueconstituyenentidadesdesoftwarepropias.Losdetalles localesdelaimplementaciónpuedenestarocultos,mientrasquelosparámetrossepueden utilizarparaestablecerlainterfazpública. EnJava,laabstracciónprocedimentalseestablececonlosmétodosofuncionesmiembros declases. otros mecanismos de abstracción de control Laevolucióndeloslenguajesdeprogramaciónhapermitidolaaparicióndeotrosmecanismos paralaabstraccióndecontrol,comomanejo de excepciones, corrutinas, unidades concurrentes oplantillas (templates).Estasconstruccionessonsoportadasporloslenguajesdeprogramación basadosyorientadosaobjetos,comoJava,Modula-2,Ada,C++,SmalltalkoEiffel.
2.1.2.
Abstracciones de datos
LosprimerospasoshacialaabstraccióndedatossecrearonconlenguajestalescomoFORTRAN, COBOLyALGOL60,conlaintroduccióndetipos devariablesdiferentes,quemanipulaban enteros, números reales, caracteres,valoreslógicos,etc.Sinembargo,estostiposdedatos no podíansermodificadosynosiempreseajustabanaltipodeunoparaelquesenecesitaban.Por ejemplo,eltratamientodecadenasesunadeficienciaenFORTRAN,mientrasquelaprecisióny fiabilidadparacálculosmatemáticosesmuyalta. Lasiguientegeneracióndelenguajes,incluyendoPascal,SIMULA-67yALGOL68,ofrecióunaampliaseleccióndetiposdedatosypermitióalprogramadormodificaryampliarlos tiposdedatosexistentesmedianteconstruccionesespecíficas(porejemplo,arrays yregistros). Además,SIMULA-67fueelprimerlenguajequemezclódatosyprocedimientosmediantela construccióndeclases,queeventualmenteseconvirtióenlabasedeldesarrollodeprogramaciónorientadaaobjetos.
26 Estructuras de datos en Java Laabstracción de datoseslatécnicadeprogramaciónquepermiteinventarodefinirnuevos tiposdedatos(tiposdedatosdefinidosporelusuario)adecuadosalaaplicaciónquesedesea realizar.Laabstraccióndedatosesunatécnicamuypotentequepermitediseñarprogramasmás cortos,legiblesyflexibles.Laesenciadelaabstracciónessimilaralautilizacióndeuntipode dato,cuyousoserealizasintenerencuentacómoestárepresentadooimplementado. Lostiposdedatossonabstraccionesyelprocesodeconstruirnuevostipossellamaabstraccióndedatos.Losnuevostiposdedatosdefinidosporelusuariosellamantipos abstractos de datos. El concepto de tipo, tal como se definió en Pascal y ALGOL 68, ha constituido un hito importante para la realización de un lenguaje capaz de soportar programación estructurada. Sinembargo,estoslenguajesnosoportantotalmenteunametodologíaorientadaaobjetos.La abstraccióndedatosútilparaestepropósitonosóloclasificaobjetosdeacuerdoasuestructura derepresentación,sinoquelosclasificandeacuerdoalcomportamientoesperado.Talcomportamientoesexpresableentérminosdeoperacionesquesonsignificativassobreesosdatos,ylas operacionessonelúnicomedioparacrear,modificaryaccederalosobjetos. En términos más precisos, Ghezzi indica que un tipo de dato definible por el usuario se denominatipoabstractodedato(TAD)si: • Existeunaconstruccióndellenguajequelepermiteasociarlarepresentacióndelosdatos conlasoperacionesquelomanipulan; • Larepresentacióndelnuevotipodedatoestáocultadelasunidadesdeprogramaquelo utilizan[GHEzzI87]. Las clases de Java o de C++ cumplen las dos condiciones: agrupan los datos junto a las operaciones,ysurepresentaciónquedaocultadeotrasclases. Lostiposabstractosdedatosproporcionanunmecanismoadicionalmedianteelcualserealizaunaseparaciónclaraentrelainterfazylaimplementacióndeltipodedato.Laimplementación deuntipoabstractodedatoconstade: 1. Larepresentación:eleccióndelasestructurasdedatos. 2. Lasoperaciones:eleccióndelosalgoritmos. Lainterfazdeltipoabstractodedatoseasociaconlasoperacionesydatosvisiblesalexterior delTAD.
2.2.
tIPOS ABStrACtOS dE dAtOS
Algunoslenguajesdeprogramacióntienencaracterísticasquenospermitenampliarellenguaje añadiendosuspropiostiposdedatos.Untipodedatodefinidoporelprogramadorsedenomina tipoabstractodedatos(TAD)paradiferenciarlodeltipofundamental(predefinido)dedatos.Por ejemplo,enJava,eltipo Punto,querepresentalascoordenadas xeydeunsistemadecoorde nadasrectangulares,noexiste.Sinembargo,esposibleimplementareltipoabstractodedatos, considerandolosvaloresquesealmacenanenlasvariablesyquéoperacionesestándisponibles paramanipularestasvariables.Enesencia,untipoabstractoesuntipodedatoqueconstadedatos (estructurasdedatospropias)yoperacionesquesepuedenrealizarsobreellos.UnTADsecomponede estructuras de datosylos procedimientoso funcionesquemanipulanesasestructuras dedatos.
Tipos de datos: Clases y objetos
27
Para recordar Un tipo abstracto de datos puede definirse mediante la ecuación: taD = Representación (datos) + Operaciones (funciones y procedimientos)
Laestructuradeuntipoabstractodedato(clase),desdeunpuntodevistaglobal,secompone delainterfazydelaimplementación(Figura2.1). Lasestructurasdedatosrealeselegidasparaalmacenarlarepresentacióndeuntipoabstracto dedatossoninvisiblesalosusuariosoclientes.Losalgoritmosutilizadosparaimplementarcada unadelasoperacionesdelosTADestánencapsuladasdentrodelospropiosTAD.Lacaracterísticadeocultamientodelainformaciónsignificaquelosobjetostieneninterfaces públicas.Sin embargo,lasrepresentacioneseimplementacionesdeesasinterfacessonprivadas.
Figura 2.1 Estructura de un tipo abstracto de datos (TAD)
2.2.1.
Ventajas de los tipos abstractos de datos
Untipoabstractodedatosesunmodelo(estructura)conunnúmerodeoperacionesqueafectan aesemodelo.Lostiposabstractosdedatosproporcionannumerososbeneficiosalprogramador, quesepuedenresumirenlossiguientes: 1. Permiten una mejor conceptualización y modelización del mundo real. Mejoran la representaciónylacomprensibilidad.Clarificanlosobjetosbasadosenestructurasy comportamientoscomunes.
28 Estructuras de datos en Java 2. Mejoranlarobustezdelsistema.Sihaycaracterísticassubyacentesenloslenguajes,permitenlaespecificacióndeltipodecadavariable.Lostiposabstractosdedatospermiten lacomprobacióndetiposparaevitarerroresdetipoentiempodeejecución. 3. Mejoranelrendimiento(prestaciones).Parasistemastipeados (tipificados),elconocimientodelosobjetospermitelaoptimizacióndetiempodecompilación. 4. Separanlaimplementacióndelaespecificación.Permitenlamodificaciónylamejorade laimplementaciónsinafectarlainterfazpúblicadeltipoabstractodedato. 5. Permiten la extensibilidad del sistema. Los componentes de software reutilizables son másfácilesdecrearymantener. 6. Recogenmejorlasemánticadeltipo.Lostiposabstractosdedatosagrupanolocalizanlas operacionesylarepresentacióndeatributos. UnprogramaquemanejaunTADlohaceteniendoencuentalasoperacionesolafuncionalidadquetiene,sininteresarseporlarepresentaciónfísicadelosdatos.Esdecir,losusuariosde unTADsecomunicanconésteapartirdelainterfazqueofreceelTADmediantefuncionesde acceso.Podríacambiarselaimplementacióndeltipodedatosinafectaralprogramaqueusael TADyaqueparaelprogramaestáoculta.
2.2.2.
Implementación de los tAd
LasunidadesdeprogramacióndelenguajesquepuedenimplementarunTADrecibendistintos nombres: Modula-2 Ada C++ Java
módulo paquete clase clase
EnestoslenguajessedefinenlaespecificacióndelTAD,quedeclaralasoperacionesylos datos,ylaimplementación,quemuestraelcódigofuentedelasoperaciones,quepermanece ocultoalexteriordelmódulo.
2.3.
ESPECIFICACIón dE LOS tAd
ElobjetivodelaespecificaciónesdescribirelcomportamientodelTAD;constadedospartes, la descripción matemática del conjunto de datos y la de las operaciones definidas en ciertos elementosdeeseconjuntodedatos. LaespecificacióndelTADpuedetenerunenfoqueinformal,quedescribelosdatosylas operacionesrelacionadasen lenguaje natural.Otroenfoquemasriguroso,la especificación formal,suponesuministrarunconjuntode axiomasquedescribenlasoperacionesensuaspectosintácticoysemántico.
2.3.1.
Especificación informal de un tAd
Constadedospartes: • Detallarenlosdatosdeltipolosvaloresquepuedentomar. • Describirlasoperacionesrelacionándolasconlosdatos.
Tipos de datos: Clases y objetos
29
Elformatoquegeneralmenteseemplea,primeroespecificaelnombredelTADylosdatos: TADnombre del tipo(valoresysudescripción) Acontinuacióncadaunadelasoperacionesconsusargumentos,yunadescripciónfuncional enlenguajenatural,conesteformato: Operación(argumentos) Descripción funcional
Comoejemplo,sevaaespecificareltipoabstractodedatosConjunto: TAD Conjunto(coleccióndeelementossinduplicidades,puedenestarencualquierorden,se usapararepresentarlosconjuntosmatemáticosconsusoperaciones). Operaciones,seponenlasoperacionesbásicassobreconjuntos: Conjuntovacio. Creaunconjuntosinelementos. Añadir(Conjunto, elemento). Comprueba si elelemento forma parte del conjunto; en caso negativo,es añadido. La operaciónmodificaalconjunto. Retirar(Conjunto, elemento). Sielelementopertenecealconjunto,eseliminadodeéste.Laoperaciónmodificaalconjunto. Pertenece(Conjunto, elemento). Verificasielelementoformapartedelconjunto,encuyocasodevuelvecierto. Esvacio(Conjunto). Verificasielconjuntonotieneelementos,encuyocasodevuelvecierto. Cardinal(Conjunto). Devuelveelnúmerodeelementosdelconjunto. Union(Conjunto, Conjunto). Realizalaoperaciónmatemáticadelaunióndedosconjuntos.Laoperacióndevuelveun conjuntoconloselementoscomunesynocomunesalosdosconjuntos. Sepuedenespecificarmásoperacionessobreconjuntos,tododependerádelaaplicaciónque sequieradaralTAD.
A tener en cuenta La especificación informal de un TAD tiene como objetivo describir los datos del tipo y las operaciones según la funcionalidad que tienen. No sigue normas rígidas al hacer la especificación, simplemente indica, de forma comprensible, la acción que realiza cada operación.
2.3.2.
Especificación formal de un tAd
Laespecificaciónformalproporcionaunconjuntodeaxiomasquedescribenelcomportamiento detodaslasoperaciones.Ladescripciónhadeincluirunapartedesintaxis,encuantoalostipos
30 Estructuras de datos en Java delosargumentosyaltipodelresultado,yunapartedesemántica,dondesedetallalaexpresión delresultadoqueseobtieneparaunosvaloresparticularesdelosargumentos.Laespecificación formalhadeserlobastantepotenteparaquecumplaelobjetivodeverificarlacorreccióndela implementacióndelTAD. ElesquemaquesigueconstadeunacabeceraconelnombredelTADylosdatos: TAD nombre del tipo (valores que toma los datos del tipo)
Lesiguelasintaxisdelasoperaciones,quelistalasoperacionesmostrandolostiposdelos argumentosyeltipodelresultado: Sintaxis Operación(Tipo argumento, ...)
->
Tipo resultado
A continuación se explica la semántica de las operaciones. Ésta seconstruye dando unos valoresparticularesalosargumentosdelasoperaciones,apartirdelosqueseobtieneunaexpresión resultado. Éste puede tener referencias a tipos ya definidos, valores de tipo lógico o referenciasaotrasoperacionesdelpropioTAD. Semántica Operación(valores particulares argumentos) ⇒ expresión resultado
Alhacerunaespecificaciónformal,siemprehayoperacionesdefinidasporsímismasquese consideranconstructoresdelTAD.Sepuededecirquemedianteestosconstructoressegeneran todoslosposiblesvaloresdelTAD.Normalmente,seeligecomoconstructorlaoperaciónque inicializa(porejemplo,ConjuntovacíoenelTAD Conjunto)ylaoperaciónqueañadeundatoo elemento(estaoperaciónescomúnalamayoríadelostiposabstractosdedatos).Seacostumbra amarcarconunasteriscolasoperacionesquesonconstructores. AcontinuaciónseespecificaformalmenteelTAD Conjunto;paraformarlaexpresiónresultadosehaceuso,siesnecesario,delasentenciaalternativasi-entonces-sino. TAD Conjunto(colección de elementos sin duplicidades, pueden estar en cualquier orden, se usa para representar los conjuntos matemáticos con sus operaciones).
Sintaxis *Conjuntovacio...