Professional Documents
Culture Documents
id=10413
Utilizacin de objetos.
Casoprctico
MaterialesactualizadosporelprofesoradodelaJuntadeAndaluca.
AvisoLegal
MaterialesformativosdeFPOnlinepropiedaddelMinisteriode
Educacin,CulturayDeporte.
AvisoLegal
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 1/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
1. Introduccin.
Si nos paramos a observar el mundo que nos rodea, podemos apreciar que
casitodoestformadoporobjetos.
desolucionar?
La respuesta es que muchas veces los programas se ajustan ms a los trminos del sistema en el que se
ejecutarnquealosdelpropioproblema.
Siredactamoslosprogramasutilizandolosmismostrminosdenuestromundoreal,esdecir,utilizandoobjetos,y
nolostrminosdelsistemaocomputadoradondesevayaaejecutar,conseguiremosquestosseanmslegiblesy,
portanto,msfcilesdedesarrollar,modificarymantener,yportanto,menoscostosos.
Esto es precisamente lo que pretende la Programacin Orientada a Objetos (POO), en ingls OOP (Object
OrientedProgramming),establecer una serie de tcnicas que permitan trasladar los problemas del mundo real a
nuestro sistema informtico. Ahora que ya conocemos la sintaxis bsica de Java, es el momento de comenzar a
utilizar las caractersticas orientadas a objetos de este lenguaje, y estudiar los conceptos fundamentales de este
modelodeprogramacin.
Autoevaluacin
Rellenacadahuecoconlapalabramsadecuada.
LaProgramacinOrientadaa pretende establecer una serie de tcnicas que permitan
trasladarlosproblemasdel anuestro .
Enviar
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 2/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
2. Fundamentos de la Programacin
Orientada a Objetos.
Casoprctico
Mara asiente ante las explicaciones de Juan, e intuye que todo lo entender mejor conforme vaya
conociendolosconceptosdeProgramacinOrientadaaObjetos.
De lo que realmente se trata es de que BK Programacin invierta el menor tiempo posible en los
proyectos que realice, aprovechando material elaborado con el esfuerzo ya realizado en otras
aplicaciones.
Peroenquconsistenrealmenteestosparadigmas?
Pedirvalordeloscoeficientes.
Calcularelvalordelaincgnita.
Mostrarelresultado.
Si nos damos cuenta, esta serie de acciones o pasos diferenciados no son otra cosa que verbos por ejemplo el
verbopedir,calcular,mostrar,etc.
Sin embargo, la Programacin Orientada a Objetos aplica de otra forma diferente la tcnica de programacin
divideyvencers.Esteparadigmasurgeenunintentodesalvarlasdificultadesque,deformaconsustancial,
posee el software. Para ello lo que hace es descomponer, en lugar de acciones, en objetos. El principal objetivo
sigue siendo descomponer el problema en problemas ms pequeos, que sean fciles de manejar y mantener,
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 3/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
fijndonos en cul es el escenario del problema e intentando reflejarlo en nuestro programa. O sea, se trata de
trasladarlavisindelmundorealanuestrosprogramas.PorestemotivosedicequelaProgramacinOrientada
a Objetos aborda los problemas de una forma ms natural, entendiendo como natural que est ms en
contacto con el mundo que nos rodea, que es ms cercana a nuestra forma de analizar, entender y resolver los
problemas.
LaProgramacinEstructuradasecentraenelconjuntodeaccionesarealizarenunprograma,
haciendounadivisindeprocesosydatos.LaProgramacinOrientadaaObjetossecentraen
la relacin que existe entre los datos y las acciones a realizar con ellos, y los encierra dentro
delconceptodeobjeto,tratandoderealizaruna abstraccinlomscercanaalmundoreal.
LaProgramacinOrientadaaObjetosesunsistemaoconjuntodereglasquenosayudanadescomponer
la aplicacin en objetos. A menudo se trata de representar las entidades y objetos que nos encontramos
en el mundo real mediante componentes de una aplicacin. Es decir, debemos establecer una
correspondenciadirectaentreelespaciodelproblemayelespaciodelasolucin.
Pero,ququieredecirestoenlaprctica?
Puesquealahoradeescribirunprograma,nosfijaremosenlosobjetosinvolucrados,suscaractersticascomunes
ylasaccionesquepuedenrealizar.Unavezlocalizadoslosobjetosqueintervienenenelproblemareal(espaciodel
problema),lostendremosquetrasladaralprogramainformtico(espaciodelasolucin).Conesteplanteamiento,la
solucinaunproblemadadoseconvierteenunatareasencillaybienorganizada.
Autoevaluacin
Ejercicioderelacionar
ProgramacinOrientada 1.Manejafuncionesyprocedimientosquedefinenlas
aObjetos. accionesarealizar.
Programacin 2.Representalasentidadesdelmundorealmediante
Estructurada. componentesdelaaplicacin.
Enviar
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 4/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
2.1. Conceptos.
Para entender mejor la filosofa de orientacin a objetos veamos algunas caractersticas que la diferencian de las
tcnicasdeprogramacintradicional.
EnlaProgramacinOrientadaaObjetoslasituacinesdiferente.Lautilizacindeobjetospermiteunmayor
niveldeabstraccinqueconlaProgramacinEstructurada,yofrecelassiguientesdiferenciasconrespectoasta:
El programador organiza su programa en objetos, que son representaciones del mundo real que estn
mscercanasalaformadepensardelagente.
Losdatos,juntoconlasfuncionesquelosmanipulan,sonparteinternadelosobjetosynoestnaccesibles
al resto de los objetos. Por tanto, los cambios en los datos de un objeto slo afectan a las funciones
definidasparaeseobjeto,peronoalrestodelaaplicacin.
Todos los programas escritos bajo el paradigma orientado a Objetos se pueden escribir igualmente mediante la
ProgramacinEstructurada.Sinembargo,laProgramacinOrientadaaObjetoseslaquemayorfacilidadpresenta
paraeldesarrollodeprogramasbasadosen interfacesgrficasdeusuario.
Autoevaluacin
Marcalasafirmacionesqueseancorrectas,referidasalaProgramacinOrientadaaObjetos.
Losdatos,juntoconlasfuncionesquelosmanipulan,sonparteinternadelosobjetosynoestn
accesiblesalrestodelosobjetos.
Los programas se crean y estructuran de acuerdo con la arquitectura de la computadora donde
sevanaejecutar.
Los cambios en los datos de un objeto afectan a las funciones definidas para ese objeto as
comoalrestodelaaplicacin.
Al programar organizamos el cdigo en torno a objetos, que son representaciones del mundo
realqueestnmscercanasalaformadepensardelagente.
Mostrarretroalimentacin
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 5/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 6/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
2.2. Beneficios.
Segn lo que hemos visto hasta ahora, un objeto es cualquier
entidadquepodemosveroapreciar.
ElconceptofundamentaldelaProgramacinOrientadaaObjetosson,
precisamente,losobjetos.Peroqubeneficiosaportalautilizacinde
objetos?
Comprensin.Losconceptosdelespaciodelproblemasehayanreflejadosenelcdigodelprograma,por
loquelameralecturadelcdigonosdescribelasolucindelproblemaenelmundoreal.
Modularidad.Facilitalamodularidaddelcdigo,alestarlasdefinicionesdeobjetosenmdulosoarchivos
independientes,hacequelasaplicacionesestnmejororganizadasyseanmsfcilesdeentender.
Fcil mantenimiento. Cualquier modificacin en las acciones queda automticamente reflejada en los
datos, ya que ambos estn estrechamente relacionados. Esto hace que el mantenimiento de las
aplicaciones, as como su correccin y modificacin sea mucho ms fcil. Por ejemplo, podemos querer
utilizar un algoritmo ms rpido, sin tener que cambiar el programa principal. Por otra parte, al estar las
aplicaciones mejor organizadas, es ms fcil localizar cualquier elemento que se quiera modificar y/o
corregir. Esto es importante ya que se estima que los mayores costes de software no estn en el
procesodedesarrolloens,sinoenelmantenimientoposteriordeesesoftwarealolargodesuvida
til.
Seguridad. La probabilidad de cometer errores se ve reducida, ya que no podemos modificar los datos de
un objeto directamente, sino que debemos hacerlo mediante las acciones definidas para ese objeto.
Imaginemos un objeto lavadora. Se compone de un motor, tambor, cables, tubos, etc. Para usar una
lavadoranosenosocurreabrirlayempezaramanipularesoselementos,yaquelomsprobableesquese
estropee. En lugar de eso utilizamos los programas de lavado establecidos. Pues algo parecido con los
objetos,nopodemosmanipularlosinternamente,sloutilizarlasaccionesqueparaelloshaydefinidas.
Reusabilidad.Losobjetossedefinencomoentidadesreutilizables,esdecir,quelosprogramasquetrabajan
conlasmismasestructurasdeinformacin,puedenreutilizarlasdefinicionesdeobjetosempleadasenotros
programas, e incluso las acciones definidas sobre ellos. Por ejemplo, podemos crear la definicin de un
objetodetipoPersonaparaunaaplicacindenegociosydeseamosconstruiracontinuacinotraaplicacin,
digamos de educacin, en donde utilizamos tambin personas, no es necesario crear de nuevo el objeto,
sinoquepormediodelareusabilidadpodemosutilizareltipodeobjetoPersonapreviamentedefinido.
Citasparapensar
Primeroresuelveelproblema.Entonces,escribeelcdigo.
JohnJohnson.
Autoevaluacin
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 7/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
2.3. Caractersticas.
CuandohablamosdeProgramacinOrientadaaObjetos,existenunaserie
de caractersticas que se deben cumplir. Cualquier lenguaje de programacin
orientadoaobjetoslasdebecontemplar.Lascaractersticasmsimportantes
delparadigmadelaprogramacinorientadaaobjetosson:
Autoevaluacin
Completalafrase,rellenandoloshuecosconlapalabraadecuada.
La propiedad que indica la capacidad de que varias clases creadas a partir de una antecesora realicen
una misma accin de forma diferente recibe el nombre de . Eso quiere
decir que cuando pedimos a un que realice una misma accin, la respuesta va a ser
dependiendodelobjetoquerealiceesaaccin.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 8/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Enviar
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 9/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Smalltalk 72, a la que sigui Smalltalk 76, versin totalmente orientada a objetos. Se caracteriza por
soportar las principales propiedades de la Programacin Orientada a Objetos y por poseer un entorno que
facilita el rpido desarrollo de aplicaciones. El ModeloVistaControlador ( MVC) fue una importante
contribucin de este lenguaje al mundo de la programacin. El lenguaje Smalltalk ha influido sobre otros
muchoslenguajescomoC++yJava.
C++(1985).C++fuediseadoporBjarneStoustrupenloslaboratoriosdondetrabajaba,entre1982y1985.
Lenguaje que deriva del C, al que aade una serie de mecanismos que le convierten en un lenguaje
orientado a objetos. No tiene recolector de basura automtica, lo que obliga a utilizar un destructor de
objetos no utilizados. En este lenguaje es donde aparece el concepto de clase tal y como lo conocemos
actualmente,comounconjuntodedatosyfuncionesquelosmanipulan.
Eiffel (1986). Creado en 1985 por Bertrand Meyer, recibe su nombre en honor a la famosa torre de Pars.
TieneunasintaxissimilaraC.Soportatodaslaspropiedadesfundamentalesdelosobjetos,utilizadosobre
todo en ambientes universitarios y de investigacin. Entre sus caractersticas destaca la posibilidad de
traduccindecdigoEiffelaLenguajeC.Aunqueesunlenguajebastantepotente,nologrlaaceptacinde
C++yJava.
Java (1995). Diseado por Gosling de Sun Microsystems a finales de 1995. Es un lenguaje orientado a
objetosdiseadodesdecero,querecibemuchasinfluenciasdeC++.Comosabemos,secaracterizaporque
produceunbytecodequeposteriormenteesinterpretadoporlamquinavirtual.LarevolucindeInternetha
influidomuchoenelaugedeJava.
C# (2000). El lenguaje C#, tambin es conocido como Sharp. Fue creado por Microsoft, como una
ampliacindeCconorientacinaobjetos.EstbasadoenC++yenJava.Unadesusprincipalesventajas
queevitamuchosdelosproblemasdediseodeC++.
Autoevaluacin
Ejercicioderelacionar
Lenguajede
Relacin Tienelacaractersticadeque
programacin
Java 1.Fueelprimerlenguajequeintrodujoelconceptodeclase.
SmallTalk 2.IntrodujoelconceptodelModeloVistaControlador.
3.Produceunbytecodeparaserinterpretadoporlamquina
Simula
virtual.
4.Introduceelconceptodeclasetalcualloconocemos,con
C++
atributosymtodos.
Enviar
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 10/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 11/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Casoprctico
Marahahechoundescansodecincominutos.
rport
Alprincipiodelaunidadveamosqueelmundorealestcompuestodeobjetos,ypodemosconsiderarobjetoscasi
cualquier cosa que podemos ver y sentir. Cuando escribimos un programa en un lenguaje orientado a objetos,
debemos identificar cada una de las partes del problema con objetos presentes en el mundo real, para luego
trasladarlosalmodelocomputacionalqueestamoscreando.
En este contexto, un objeto de software es una representacin de un objeto del mundo real, compuesto de una
serie de caractersticas y un comportamiento especfico. Pero qu es ms concretamente un objeto en
ProgramacinOrientadaaObjetos?Vemoslo.
Unobjetoesunconjuntodedatosconlasoperacionesdefinidasparaellos.Losobjetostienen
unestadoyuncomportamiento.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 12/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Concretandounpocoms,laspartesdeunobjetoson:
Campos,AtributosoPropiedades.Sonlapartedelobjetoque
almacena los datos. Tambin se les denomina variables
miembro. Estos datos pueden ser de cualquier tipo primitivo
(boolean, char,int, double,etc.)osera su vez otro objeto. Por
ejemplo,unobjetodelaclaseCochepuedetenerunobjetodela
claseRuedas.
Mtodos o Funciones Miembro. Son la parte del objeto que
llevaacabolasoperacionessobrelosatributosdefinidosparaeseobjeto.
Laideaprincipalesqueelobjetoreneenunasolaentidadlosdatosylasoperaciones,yparaaccederalosdatos
privadosdelobjetodebemosutilizarlosmtodosquehaydefinidosparaeseobjeto.
La nica forma de manipular la informacin del objeto es a travs de sus mtodos. Es decir, si queremos
saberelvalordealgnatributo,tenemosqueutilizarelmtodoquenosmuestreelvalordeeseatributo.Deesta
forma,evitamosquemtodosexternospuedanalterarlosdatosdelobjetodemanerainadecuada.Sedicequelos
datosylosmtodosestnencapsuladosdentrodelobjeto.
Autoevaluacin
Completaeltextoescribiendolapalabraadecuadaencadahueco.
El estado de un objeto viene definido por sus , mientras que su comportamiento
vienedefinidoporsus .
Enviar
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 13/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Dentro de un programa los objetos se comunican llamando unos a los mtodos de otros. Los mtodos estn
dentro de los objetos y describen el comportamiento de un objeto cuando recibe una llamada a uno de sus
mtodos.Enotraspalabras,cuandounobjeto,objeto1,quiereactuarsobreotro,objeto2,tienequeejecutarunode
susmtodos.Entoncessedicequeelobjeto2recibeunmensajedelobjeto1.
Unmensajeeslaaccinquerealizaunobjeto.
Unmtodoeslafuncinoprocedimientoalquesellamaparaactuarsobreunobjeto.
Los distintos mensajes que puede recibir un objeto o a los que puede
responderrecibenelnombredeprotocolodeeseobjeto.
Elprocesodeinteraccinentreobjetossesueleresumirdiciendoque
se ha "enviado un mensaje" (hecho una peticin) a un objeto, y el
objeto determina "qu hacer con el mensaje" (ejecuta el cdigo del
mtodo).
Cuandoseejecutaunprogramaseproducenlassiguientesacciones:
Srinath66
Creacindelosobjetosamedidaquesenecesitan.
Comunicacinentrelosobjetosmedianteelenvodemensajesdeunosaotros,oelusuarioalosobjetos.
Eliminacindelosobjetoscuandonosonnecesariosparadejarespaciolibreenlamemoriadelordenador.
Losobjetossepuedencomunicarentreellosinvocandoalosmtodosdelosotrosobjetos.
Autoevaluacin
Cuando un objeto, objeto1, ejecuta un mtodo de otro, objeto2, se dice que el objeto2 le ha
mandadounmensajealobjeto1.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 14/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
3.3. Clases.
Hastaahorahemosvistoloquesonlosobjetos.
Un programa informtico se compone de muchos objetos, algunos de los cuales comparten la misma estructura y
comportamiento.Situviramosquedefinirlaestructuraycomportamientodelobjetocadavezquequeremoscrear
unobjeto,estaramosutilizandomuchocdigoredundante.Porelloloquesehaceescrearunaclase,queesuna
descripcindeunconjuntodeobjetosquecompartenunaestructurayuncomportamientocomn.Yapartirdela
clase,secreantantas"copias"o"instancias"comonecesitemos.Esascopiassonlosobjetosdelaclase.
Las clases constan de datos y mtodos que resumen las caractersticas comunes de un
conjuntodeobjetos.
Un programa informtico est compuesto por un conjunto de clases, a partir de las cuales se
creanobjetosqueinteractanentres.
Sirecuerdas,cuandoutilizbamoslostiposdedatosenumerados,losdefinamosconlapalabrareservadaenumy
lalistadevaloresentrellaves,ydecamosqueuntipodedatosenumnoesotracosaqueunaespeciedeclaseen
Java. Efectivamente, todas las clases llevan su contenido entre llaves. Y una clase tiene la misma estructura que
untipodedatoenumerado,aadindoleunaseriedemtodosyvariables.
Enotraspalabras,unaclaseesunaplantillaoprototipodondeseespecifican:
Losatributoscomunesatodoslosobjetosdelaclase.
Losmtodosquepuedenutilizarseparamanejaresosobjetos.
ParadeclararunaclaseenJavaseutilizalapalabrareservadaclass.Ladeclaracindeunaclaseestcompuesta
por:
Cabeceradelaclase.Lacabeceraesunpocomscomplejaquecomoaqudefinimos,peroporahoraslo
nos interesa saber que est compuesta por una serie de modificadores, en este caso hemos puesto public
queindicaqueesunaclasepblicaalaquepuedenaccederotrasclasesdelprograma,lapalabrareservada
classyelnombredelaclase.
Cuerpodelaclase.Enlseespecificanencerradosentrellaveslosatributosylosmtodosquevaatener
laclase.
EstructuradeunaclaseenJava (1KB)
En las unidades anteriores ya hemos utilizado clases, aunque an no sabamos apenas nada sobre su significado
exacto.
Por ejemplo, en los ejemplos de la unidad o en la tarea, estbamos utilizando clases, todas ellas eran clases
principales,notenanningnatributoyelnicomtododelquedisponaneraelmtodomain().
Elmtodomain()seutilizaparaindicarquesetratadeunaclaseprincipal,apartirdelacualva
aempezarlaejecucindelprograma.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 15/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Este mtodo no aparece si la clase que estamos creando no va a ser la clase principal del
programa.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 16/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
4. Utilizacin de objetos.
Casoprctico
Yastodosobreobjetosledicesloque...
Soloque....qu?aadeJuan.
Solomefaltasaberunacosa,cmosecreaunobjeto?
Temandoundocumentoporemailqueloexplicatodomuybien.
Ah,gracias!Estanocheleechounvistazo.
Unavezquehemoscreadounaclase,podemoscrearobjetosennuestroprogramaapartirdeesasclases.
Cuandocreamosunobjetoapartirdeunaclasesedicequehemoscreadouna"instanciadelaclase".Aefectos
prcticos,"objeto"e"instanciadeclase"sontrminossimilares.Esdecir,nosreferimosaobjetoscomoinstancias
cuandoqueremoshacerhincapiquesondeunaclaseparticular.
Losobjetossecreanapartirdelasclases,yrepresentan"casosindividuales"destas.
Paraentendermejorelconceptoentreunobjetoysuclase,piensadenuevo
enunmoldedegalletasyenlaspropiasgalletas.
Elmoldeseralaclase,quedefinelascaractersticasdelobjeto,porejemplo
suformaytamao.Lasgalletascreadasapartirdeesemoldesonlosobjetos
o instancias, y todos los objetos de esa clase, aun siendo distintos, se
parecernbastante,yaquetendrnlasmismascaractersticasgenerales.
Otro ejemplo, imagina una clase Persona que rena las caractersticas
comunes de las personas (nombre, NIF, color de pelo, color de ojos, peso,
medea_material
altura, etc.) y las acciones que pueden realizar (crecer, dormir, comer, etc.).
Posteriormente dentro del programa podremos crear un objeto trabajador que est basado en esa clase Persona.
Entonces se dice que el objeto trabajador es una instancia de la clase Persona, o que la clase Persona es una
abstraccindelobjetotrabajador.
Cualquierobjetoinstanciadodeunaclasecontieneunacopiadetodoslosatributosdefinidosenlaclase.Enotras
palabras, lo que est haciendo el operador new al instanciarlo es reservar el espacio necesario en la memoria del
ordenadorparaguardarsusatributosymtodos,siguiendoparaellolasindicacionesqueledalapropiaclase.Por
tanto, cada objeto tiene una zona de almacenamiento propia donde se guarda toda su informacin, que ser
distinta a la de cualquier otro objeto. A las variables miembro instanciadas tambin se les llama variables
instancia, o simplemente instancias. De igual forma, a los mtodos que manipulan esas variables se les llama
mtodosdeinstancia.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 17/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Autoevaluacin
Unobjetoescomounmoldeparacrearclases.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 18/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Alavistadeloanterior,podemosconcluirquelosobjetostienenunciclodevida,enelcualpodemosdistinguirlas
siguientesfases:
Creacin,dondesehacelareservadememoriaeinicializacindeatributos.
Manipulacin,quesellevaacabocuandosehaceusodelosatributosymtodosdelobjeto.
Destruccin,eliminacindelobjetoyliberacinderecursos.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 19/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
4.2. Declaracin.
Paralacreacindeunobjetohayqueseguirlossiguientespasos:
Declaracin:definireltipodeobjeto.
Instanciacin:creacindelobjetoutilizandoeloperadornew.
PeroenquconsistenestospasosaniveldeprogramacinenJava?
Veamosprimerocmodeclararunobjeto.Paraladefinicindeltipodeobjeto
debemosemplearlasiguienteinstruccin:
RameshNG
<tipo>nombreObjeto
Donde:
tipoeslaclaseapartirdelacualsevaacrearelobjeto,y
nombreObjetoeselnombredelavariablereferenciaconlacualnosreferiremosalobjeto.
Los tipos referenciados o referencias se utilizan para guardar la direccin de los datos en la
memoriadelordenador.
Nada ms crear una referencia, sta se encuentra vaca. Cuando una referencia a un objeto no contiene ninguna
instancia se dice que es una referencia nula, es decir, que contiene el valor null. (Tambin se dice que apunta a
null). Esto quiere decir que la referencia est creada, pero que el objeto no est instanciado todava, es decir,
hemos preparado la referencia indicando a qu tipo de objetos va a apuntar, pero todava no hemos reservado
memoriaparaelobjeto,asquenoestapuntandoaningunaposicindememoriaquecontengaeseobjeto,ypara
quenohayaconfusinposible,lareferenciaapuntaaunobjetoinexistentellamadonull(nulo).
Paraentendermejorladeclaracindeobjetosveamosunejemplo.
Cuando veamos los tipos de datos primitivos, decamos que Java proporciona un tipo de dato especial para los
textosocadenasdecaracteresqueeraeltipodedatoString.Veamosquerealmenteestetipodedatoesuntipo
referenciadoycrebamosunavariablemensajedeesetipodedatodelasiguienteforma:
Stringmensaje
Los nombres de la clase empiezan con mayscula, como String, y los nombres de los objetos
conminscula,comomensaje,assabemosqutipodeelementoseestutilizando.
Puesbien,StringesrealmenteunaclasequenosproporcionaJavaparafacilitareltrabajoconcadenasdetexto,a
partirdelacualcreamosnuestroobjetollamadomensaje.
Si observas, poco se diferencia esta declaracin de las declaraciones de variables que hacamos para los tipos
primitivos. Antes decamos que mensaje era una variable del tipo de dato String. Ahora realmente vemos que
mensaje es una referencia a un objeto de la clase String. Pero mensaje an no contiene el objeto porque no ha
sidoinstanciado,veamoscmohacerlo.
Por tanto, cuando creamos un objeto estamos haciendo uso de una variable que almacena la direccin de ese
objetoenmemoria.Esavariableesunareferenciaountipodedatoreferenciado,porquenocontieneeldato,si
nolaposicindeldatoenlamemoriadelordenador.
Stringsaludo=newString("BienvenidoaJava")
Strings//svalenull
s=saludo//asignacindereferencias
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 20/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Enlasinstruccionesanteriores,lasvariablessy saludoacabanapuntandoalmismoobjetodelaclaseString.Esto
implicaquecualquiermodificacinenelobjetosaludomodificatambinelobjetoalquehacereferencialavariable
s, ya que realmente son el mismo. Es decir, cualquier modificacin que haga usando saludo, se har sobre el
objeto,ypuestoquesapuntaalmismoobjeto,servisibletambinatravsdes.
Autoevaluacin
Indicasilassiguientesafirmacionessonverdaderasofalsas.
Lasreferenciasseutilizanparaalmacenarlosdatosdelobjeto.
Verdadero Falso
A la hora de nombrar clases siguiendo el convenio generalmente aceptado, siempre
comenzaremosconmaysculas,cadaprimeraletradecadapalabraqueformeelnombredela
clase, incluida la primera palabra, con el resto de letras en minscula, sin usar espacios en
blanco,nicaracteresacentuados,nisignosde$,nicarcterdesubrayado.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 21/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
4.3. Instanciacin.
Una vez creada la referencia al objeto, debemos crear la instancia u objeto a la que va a apuntar esa referencia.
Paraelloutilizamoseloperadornewconlasiguientesintaxis:
nombreObjeto=new<ConstructorDeLaClase>([<parametro1>,<par<code>ametro2>,...,N>])
Donde:
Durantelainstanciacindelobjeto,sereservamemoriasuficienteparaelobjeto.DeestatareaseencargaJava y
juegaunpapelmuyimportanteelrecolectordebasura,queseencargadeeliminardelamemorialosobjetosque
ya han quedado descolgados (sin ninguna referencia que los apunte) y por tanto ya no van a poder volver a ser
utilizados,paraquelamemoriaqueocupabanpuedavolveraestardisponibleparaserusada.
Deestemodo,parainstanciarunobjetoString,haramoslosiguiente:
mensaje=newString()
Asestaramosinstanciandoelobjetomensaje.Paraelloutilizaramoseloperadornewyelconstructordelaclase
Stringalaqueperteneceelobjetosegnladeclaracinquehemoshechoenelapartadoanterior.Acontinuacin
utilizamoselconstructor,quesellamaigualquelaclase,String.
Enelejemploanteriorelobjetosecrearaconlacadenavaca(""),siqueremosquetengauncontenidodebemos
utilizarparmetrosenelconstructor,as:
mensaje=newString("Elprimerprograma")
AunqueStringesunaclase,setratadeunaclasemuyespecial.
JavapermiteutilizarlaclaseStringcomosideuntipodedatoprimitivosetratara,poresono
hacefaltautilizareloperadornewparainstanciarunobjetodelaclaseString,aunquetambin
permite hacerlo como para cualquier otra clase. Por tanto las sentencias mensaje=new
String("Elprimerprograma")ymensaje="Elprimerprograma"sontotalmenteequivalentes.
Llamamostambintuatencinsobreelhechodequenoeslomismodecirqueunareferencia
detipoStringapuntealacadenavaca("",queesunStringquenotieneningncarcter)que
decirqueapunteanull(quenoesunString,sinounaformadeindicarquenoapuntaaningn
objeto).Lacadenavacasesunobjeto.
Ladeclaracineinstanciacindeunobjetopuederealizarseenlamismainstruccin,as:
Stringmensaje=newString("Elprimerprograma")
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 22/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
4.4. Manipulacin.
Unavezcreadoeinstanciadoelobjetocmoaccedemosasucontenido?
Paraaccederalosatributosymtodosdelobjetoutilizaremoselnombredelobjetoseguidodeloperadorpunto(.)
yelnombredelatributoomtodoquequeremosutilizar.Cuandoutilizamoseloperadorpuntosedicequeestamos
enviandounmensajealobjeto.Laformageneraldeenviarunmensajeaunobjetoes:
nombreObjeto.mensaje
Porejemplo,paraaccederalasvariablesinstanciaoatributosseutilizalasiguientesintaxis:
nombreObjeto.atributo
Yparaaccederalosmtodosofuncionesmiembrodelobjetoseutilizalasintaxis:
nombreObjeto.metodo([parametro1,parametro2,...,parametroN])
Enlasentenciaanteriorparametro1, parametro2,etc.,sonlosparmetrosqueutilizaelmtodo.Aparecenentre
corchetesparaindicarquesonopcionales,yaquepuedehabermtodosquenollevenparmetros.
Paraentendermejorcmosemanipulanobjetosvamosautilizarunejemplo.ParaellonecesitamoslaBiblioteca
deClasesJavaoAPI(ApplicationProgrammingInterfaceInterfazdeprogramacindeaplicaciones).Unodelos
paquetesdelibrerasobibliotecasesjava.awt.Estepaquetecontieneclasesdestinadasalacreacindeobjetos
grficoseimgenes.Vemosporejemplocmocrearunrectngulo.
En primer lugar instanciamos el objeto utilizando el mtodo constructor, que se llama igual que el objeto, e
indicandolosparmetroscorrespondientesalaposicinyalasdimensionesdelrectngulo:
Rectanglerectangulo=newRectangle(50,50,150,150)
LasentenciaanteriordeclaralavariablerectangulocomounareferenciadetipoRectangle,yhacequeapunteaun
nuevoobjetoquesecreaalinvocaralconstructorconeloperadornew.Elconstructorrecibecomoparmetroslas
coordenadasdelaesquinasuperiorizquierda,queseraelpunto(50,50)enlapantalla,yelanchoyaltodelmismo
(longituddelabaseylaaltura),quesera150enamboscasos.
Unavezinstanciadoelobjetorectangulosiqueremoscambiarelvalordelosatributosutilizamoseloperadorpunto.
Porejemplo,paracambiarladimensindelrectngulo,paraquetantosualturacomosubasesean100,enlugar
delos150quelehabamosasignado,seharamodificandodirectamenteelvalordesusatributosas::
<code>rectangulo.height=100
<code>rectangulo.width=100
Obienpodemosutilizarunmtodoparahaceralgosimilaraloanterior.Porejemplo,lasiguientesentencia,fijael
tamaoderectanguloa200por200,tantodebasecomodealtura.
<code>rectangulo.setSize(200,200)
Acontinuacinpuedesaccederalcdigodelejemplo:
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 23/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Manipularobjetos. (2KB)
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 24/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Elrecolectordebasuraseejecutaensegundoplanoydemaneramuyeficienteparanoafectaralavelocidaddel
programa que se est ejecutando. Lo que hace es que peridicamente va buscando objetos que ya no son
referenciados, y cuando encuentra alguno lo marca para ser eliminado. Despus los elimina en el momento que
consideraoportuno,cuandoelprocesadorestmenosocupado.
Justo antes de que un objeto sea eliminado por el recolector de basura, se ejecuta su mtodo finalize(). Si
queremos forzar que se ejecute el proceso de finalizacin de todos los objetos del programa podemos utilizar el
mtodo runFinalization() de la clase System. La clase System forma parte de la Biblioteca de Clases de Java y
contienediversasclasesparalaentradaysalidadeinformacin,accesoavariablesdeentornodelprogramayotros
mtodosdediversautilidad.Paraforzarelprocesodefinalizacinejecutaramos:
System.runFinalization()
Autoevaluacin
Lasfasesdelciclodevidadeunobjetoson:Creacin,ManipulacinyDestruccin.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 25/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
5. Utilizacin de mtodos.
Casoprctico
Al igual que las clases, los mtodos estn compuestos por una
cabecera y un cuerpo. La cabecera tambin tiene modificadores, en
estecasohemosutilizadopublicparaindicarqueelmtodoespblico,
locualquieredecirquelepuedenenviarmensajesnoslolosmtodos
del objeto sino los mtodos de cualquier otro objeto externo. Veremos
ms adelante los modificadores que se pueden usar y lo que significa
cadauno.
Inicializarlosatributosdelobjeto.
Consultarlosvaloresdelosatributos.
Modificarlosvaloresdelosatributos.
Llamaraotrosmtodos,delmismoobjetoodeobjetosexternos.
Citasparapensar
Encuestindesentidocomntomarunmtodoyprobarlo.Peroloimportanteesprobar
algo.
FranklinDelanoRoosevelt.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 26/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Porvalor.Elvalordelosparmetrosnosedevuelvealfinalizarelmtodo,es
decir, cualquier modificacin que se haga en los parmetros no tendr efecto
una vez se salga del mtodo. Esto es as porque cuando se llama al mtodo
desde cualquier parte del programa, dicho mtodo recibe una copia de los
argumentos,portantocualquiermodificacinquehagasersobrelacopia,no
sobrelasvariablesoriginales.
Por referencia. La modificacin en los valores de los parmetros s tienen lindyi
efecto tras la finalizacin del mtodo. Cuando pasamos una variable a un
mtodo por referencia lo que estamos haciendo es pasar la direccin del dato en memoria, por tanto
cualquiercambioeneldatoseguirmodificadounavezquesalgamosdelmtodo.
En un mtodo hay que indicar qu tipo de valor devuelve (o bien void). Este valor de retorno es el
valorquedevuelveelmtodocuandoterminadeejecutarse,almtodooprogramaquelollam.Puedeser
untipoprimitivo,untiporeferenciadoobieneltipovoid,queindicalaausenciadevalorderetorno.
Unmtodotieneunnmerofijodeargumentos.Losargumentossonvariablesatravsdelascualesse
pasa informacin al mtodo desde el lugar del que se llame, para que ste pueda utilizar dichos valores
durantesuejecucin.Losargumentosrecibenelnombredeparmetroscuandoaparecenenladeclaracin
delmtodo.
Elvalorderetornoeslainformacinquedevuelveunmtodotrassuejecucin.
Segnhemosvistoenelapartadoanterior,lacabeceradeunmtodosedeclaracomosigue:
publictipoDeDatoDevueltonombreMetodo(listaDeParametros)
Como vemos, el tipo de dato devuelto aparece despus del modificador public y se corresponde con el valor de
retorno. (Aunque la declaracin puede terminar en punto y coma, como se ve en el ejemplo anterior, lo normal es
queademsdeladeclaracindelacabecera,incluyamosladefinicincompletadelmtodo,loquesignificaponer
lassentenciasdelcuerpodelmtodoentrellaves,justoenellugardondeapareceelpuntoycomaenlasentencia
anterior).
La lista de parmetros aparece al final de la cabecera del mtodo, justo despus del nombre, encerrados entre
signosdeparntesisyseparadosporcomas.Sedebeindicareltipodedatodecadaparmetroas:
(tipoParametro1nombreParametro1,...,tipoParametroNnombreParametroN)
Cuando se llame al mtodo, se deber utilizar el nombre del mtodo, seguido de los argumentos que deben
coincidirconlalistadeparmetros.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 27/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
5.2. Constructores.
Recuerdascuandohablbamosdelacreacineinstanciacindeunobjeto?
Datefecha=newDate()
ConlaanteriorinstruccinestamoscreandounobjetofechadetipoDate,
quecontendrlafechayhoraactualdelsistema.
La estructura de los constructores es similar a la de cualquier mtodo, salvo que no tiene que indicarse
explcitamente el tipo de dato devuelto porque ya est claro que lo que devuelve es el objeto que crea. Est
formada por una cabecera y un cuerpo, que contiene la inicializacin de atributos y resto de instrucciones del
constructor.
Elmtodoconstructortienelassiguientesparticularidades:
Elconstructoresinvocadoautomticamenteenlacreacindeunobjeto,ysloesavez.
Losnombresdelosconstructoresnoempiezanconminscula,comoelrestodelosmtodos,yaque
se llaman igual que la clase y los nombres de clase deben empezar siempre con letra mayscula, segn
convenio.
Puedehabervariosconstructoresparaunaclase,quesellamarntodosigual,peroquesediferenciarn
porsulistadeargumentos.
Como cualquier mtodo, el constructor puede tener parmetros para definir qu valores dar a los atributos
delobjeto.
El constructor por defecto es aqul que no tiene argumentos o parmetros. Cuando creamos un objeto
llamandoalnombredelaclasesinargumentos,estamosutilizandoelconstructorpordefecto.
Es necesario que toda clase tenga al menos un constructor. Si no definimos constructores para una
clase,ysloenesecaso,elcompiladorcreaunconstructorpordefectovaco,queinicializalosatributosa
sus valores por defecto, segn del tipo que sean: 0 para los tipos numricos, false para los boolean y null
paralasreferencias.Dichoconstructorloquehaceesllamaralconstructorsinargumentosdelasuperclase
(clase de la cual hereda) si la superclase no tiene constructor sin argumentos se produce un error de
compilacin.
Cuandodefinimosconstructorespersonalizados,elconstructorpordefectodejadeexistir,ysinodefinimosnosotros
un constructor sin argumentos cuando intentemos utilizar el constructor por defecto nos dar un error de
compilacin.
Autoevaluacin
Marcalasopcionesqueseancorrectas.
Un constructor es un mtodo que puede ser invocado en cualquier momento para un objeto,
para que ste quede reinicializado, con todos sus atributos a valores nulos: 0 para atributos
numricos,falseparaboolean,y nullparareferencias.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 28/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Elconstructordebellamarse,forzosamente,comolaclaseenlaqueestdefinido.
Es siempre obligatorio definir un constructor en una clase, ya que de lo contrario resultara
imposiblecrearobjetosdeesaclase.
Una clase puede definir varios constructores, que obligatoriamente se llamarn todos igual,
como la clase, diferencindose por su lista de parmetros. En caso de que hayamos declarado
algnconstructorpersonalizadoconparmetrosenunaclase,Javayanocrearimplcitamente
el constructor por defecto, que creaba el objeto inicializndolo a valores nulos: 0 para atributos
numricos,falseparaboolean,y nullparareferencias.
Mostrarretroalimentacin
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 29/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Dehecho,seaconsejanoinventarsenombresdistintosparalosparmetrosqueseusanpararecogerel
valorquesevaaasignaraunatributo,espreferiblellamarleigualadoscosasqueenelfondoserefieren
"almismoatributo,ydistinguirparmetroyatributopormediodeloperadorthis.
Vamos a ilustrar mediante un ejemplo la utilizacin de objetos y mtodos, as como el uso de parmetros y el
operador this. Aunque la creacin de clases la veremos en las siguientes unidades, en este ejercicio creamos una
pequeaclaseparaquepodamosinstanciarelobjetoconelquevamosatrabajar.
Lasclasessesuelenrepresentarcomounrectngulo,ydentrodelsesitanlosatributosylosmtodosdedicha
clase.
Enlaimagen,laclasePajaroestcompuestaportresatributos,unodeelloselnombreyotrosdosqueindicanla
posicindelave,posXyposY.Tienedosmtodosconstructoresyunmtodovolar().Comosabemos,losmtodos
constructoresrecibenelmismonombredelaclase,ypuedehabervariosparaunamismaclase,dentrodeellase
diferencianunosdeotrosporlosparmetrosqueutilizan.
Ejercicioresuelto
Dada una clase principal llamada Pajaro, se definen los atributos y mtodos que aparecen en la
imagen.Losmtodosrealizanlassiguientesacciones:
Pajaro(). Constructor por defecto. En este caso, el constructor por defecto no contiene ninguna
instruccin, ya que Java inicializa de forma automtica las variables miembro, si no le damos
ningnvalor.
Pajaro(Stringnombre,intposX,intposY).Constructorquerecibecomoargumentosunacadena
detextoydosenterosparainicializarelvalordelosatributos.
volar(int posX, int posY). Mtodo que recibe como argumentos dos enteros: posX y posY, y
devuelve un valor de tipo double como resultado, usando la palabra clave return. El valor
devuelto es el resultado de aplicar un desplazamiento de acuerdo con la siguiente frmula:
Disea un programa que utilice la clase Pajaro, cree una instancia de dicha clase y ejecute sus
mtodos.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 30/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Parallamaraunmtodoesttico,podemoshacerlodedistintasformas:
Elnombredelmtodo,silollamamosdesdelamismaclaseenlaqueseencuentradefinido.
nombreMetodoEstatico()
Elnombredelaclase,seguidoporeloperadorpunto(.)mselnombredelmtodoesttico,silollamamos
desdeunaclasedistintaalaqueseencuentradefinido.Estaserlaformahabitualdeusarlosmtodos
estticos:
NombreClase.nombreMetodoEstatico()
Elnombredelobjeto,seguidoporeloperadorpunto(.)mselnombredelmtodoesttico.Estaformase
podra usar cuando tengamos un objeto instanciado de la clase en la que se encuentra definido el mtodo
esttico,peroSIEMPREserpreferibleinvocarlomedianteelnombredelaclase,yaquealinvocarloconun
objeto, da la sensacin de que es "un mensaje para ese objeto", que hace algo exclusivamente con ese
objeto,cuandoenrealidadhacealgoparalaclase,paratodoslosobjetosdelaclase:
nombreObjeto.nombreMetodoEstatico()
Esmuyrecomendablequecualquiermtodoestticoseinvoquesiemprereferenciadoporel
nombredelaclaseenlaqueestdefinido,(tantosiseinvocandesdelamismaclase,comosi
seinvocandesdeunaclasedistinta,comosiexistenobjetosdelaclaseconlosquesepodra
invocarsisequisiera),justamenteparahacerexplcitoquesetratadeunmtodoestticosin
msqueverlasentenciadondeseinvoca,quedandoclaroquehacealgoparalaclase,yno
paraunobjetoparticular.Esdecir,como:
NombreClase.nombreMetodoEstatico()
Los mtodos estticos no afectan al estado de los objetos instanciados de la clase (variables de instancia), y
suelen utilizarse para realizar operaciones comunes a todos los objetos de la clase. Por ejemplo, si
necesitamos contar el nmero de objetos instanciados de una clase, podramos utilizar un mtodo esttico que
fuera incrementando el valor de una variable entera de la clase conforme se van creando los objetos. Adems,
podrahaberunmtodoparaconsultaresetotaldeobjetoscreado,ydeberaseresttico,porqueyopodraquerer
consultar el nmero de elementos que existen mediante ese mtodo, incluso en el caso de que no existiera
ningnobjetodedichaclasequepoderusarparainvocaralmtodo.Medianteelnombredelaclasespodraal
seresttico.
En la Biblioteca de Clases de Java existen muchas clases que contienen mtodos estticos. Pensemos en las
clases que ya hemos utilizado en unidades anteriores, como hemos comentado la clase String con todas las
operacionesquepodamoshacerconellayconlosobjetosinstanciadosapartirdeella.ObienlaclaseMath.para
laconversindetiposdedatos.TodosellossonmtodosestticosquelaAPIdeJavadefineparaesasclases.Lo
importanteesquetengamosencuentaquealtratarsedemtodosestticos,parautilizarlosnonecesitamoscrear
unobjetodedichasclases.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 31/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Autoevaluacin
Los mtodos estticos, tambin llamados mtodos de instancia, suelen utilizarse para realizar
operacionescomunesatodoslosobjetosdelaclase.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 32/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Casoprctico
Conforme nuestros programas se van haciendo ms grandes, el nmero de clases va creciendo. Meter todas las
clasesennicodirectorionoayudaaqueestnbienorganizadas,lomejoreshacergrupos de clases, de forma
quetodaslasclasesqueestnrelacionadasotratensobreunmismotemaestnenelmismogrupo.
Un paquete de clases es una agrupacin de clases que consideramos que estn relacionadas
entresotratandeuntemacomn.
Las clases de un mismo paquete tienen un acceso privilegiado a los atributos y mtodos de
otras clases de dicho paquete, una especie de "relacin de confianza". Es por ello por lo que
los paquetes son tambin, en cierto modo, unidades de encapsulacin y ocultacin de
informacin.
Java nos ayuda a organizar las clases en paquetes. En cada fichero .java
quehagamos,alprincipio,podemosindicaraqupaquetepertenecelaclase
quehagamosenesefichero.
packageNombre_de_Paquete SethSchoen
Por ejemplo, si decidimos agrupar en un paquete "ejemplos" un programa llamado "Bienvenida", pondramos en
nuestroficheroBienvenida.javalosiguiente:
Elcdigoesexactamenteigualquecomohemosvenidohaciendohastaahora,solamentehemosaadidolalnea
"packageejemplos"alprincipio.Enlaimagensemuestracmoaparecenlospaquetesenelentornointegradode
Netbeans.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 33/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Debesconocer
En la siguiente presentacin puedes ver una demostracin de cmo hemos creado el proyecto
Bienvenida:
Creacindeproyectoconpaquetes
Resumentextualalternativopara"Creacindeproyectoconpaquetes"
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 34/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
npslibrarian
importjava.util.Scanner
Sepuedenimportartodaslasclasesdeunpaqueteconunasentenciaimport.Porejemplo,paraimportartodaslas
clasesdelpaquetejava.awt,sepuedehaceras:
importjava.awt.*
Esimportanteaclararqueusandoelasterisco,importamoslasclasesdelpaquete,peroNOseimportanlasclases
delossubpaquetesquepudieratener.
Las sentencias import (puede haber varias) deben aparecer al principio de la clase, justo despus de la sentencia
package,sistaexistiese.
Tambin podemos utilizar una clase sin importarla con la sentencia import, en cuyo caso cada vez que queramos
usarladebemosindicarsurutacompleta:
java.util.Scannerteclado=newjava.util.Scanner(System.in)
Reflexiona
En unidades anteriores hemos hecho uso de clases como String, o Math, que si consultamos en la
documentacindelaAPI,pertenecenalpaquetejava.langysinembargo,nuncahemostenidoqueusar
ninguna sentencia import java.lang.String ni importjava.lang.Math ni tampoco import java.lang.* y a
pesardeellotodofuncionabacorrectamente.
No habamos quedado en que siempre haba que importar las clases de otros paquetes que
quisiramosusar?
Porotraparte,quespreferible,importarlasclasesunaaunaoimportartodaslasclasesdelpaquete
usandoelasterisco?
Parasaberms
Te proponemos el siguiente enlace para repasar conceptos que hemos visto a lo largo de la unidad
sobreprogramacinorientadaaobjetosyutilizacindeclases:
TutorialdeJavaenespaolCaptulo13ClasesyObjetos.
Resumentextualparaelvdeo"TutorialdeJavaenespaolCaptulo13ClasesyObjetos".
LasiguientepartedelvdeohablasobrelautilizacindeobjetosyclasesenJava:
TutorialdeJavaenespaolCaptulo14ClasesyObjetos.
Resumentextualparaelvdeo"TutorialdeJavaenespaolCaptulo14ClasesyObjetos."
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 35/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Autoevaluacin
Es preferible importar todas las clases que necesitemos mediante su propia sentencia import,
ya que si usamos .* estaremos aadiendo a nuestra aplicacin el cdigo de toda una serie de
clases del paquete que no necesitamos, y que slo servirn para aumentar el tamao de la
aplicacin,alargandoeltiempodecompilacin,adems.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 36/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Porejemplo,enLinuxtendramosestaestructuradedirectorios:
/<directorio_usuario>/Proyecto_Bienvenida/ejemplos/Bienvenida.java Tom
Debemostenercuidadoconlasmaysculasylasminsculas,paraevitarproblemas,tenemosqueponerelnombre
en"package"exactamenteigualqueelnombredelsubdirectorio.
ParacompilarlaclaseBienvenida.javaqueestenelpaqueteejemplosdebemossituarnoseneldirectoriopadre
delpaqueteycompilardesdeah:
$cd/<directorio_usuario>/Proyecto_Bienvenida
$javacejemplos/Bienvenida.java
Sitodovabien,eneldirectorioejemplosnosaparecerlaclasecompiladaBienvenida.class.
FlorMoncada.MontajesobrecapturadepantallaenUbuntu.
ParaejecutarlaclasecompiladaBienvenida.classqueesteneldirectorioejemplos,debemosseguirsituadosenel
directorio padre del paquete. El nombre completo de la clase es "paquete.clase", es decir "ejemplos.Bienvenida".
Lospasosseranlossiguientes:
$cd/<directorio_usuario>/Proyecto_Bienvenida
$javaejemplos/Bienvenida
BienvenidoaJava
Sitodoescorrecto,debesalirelmensaje"BienvenidoaJava"porlapantalla.
Afortunadamente,sielproyectolohemoscreadodesdeunentornointegradocomoNetbeans,podemos
delegar en que ser el entorno quien se encargue de estos detalles, la compilacin y ejecucin se
realizaralejecutarlaopcinRunFile(Ejecutararchivo)ohacerclicsobreelbotnEjecutardelabarra
deherramientas.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 37/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Odd.note
packageejemplos.basicos
packageejemplos.avanzados
A nivel de sistema operativo, tendramos que crear los subdirectorios basicos y avanzados dentro del directorio
ejemplos,ymeterahlasclasesquecorrespondan.
Para compilar, en el directorio del proyecto habra que compilar poniendo todo el path hasta llegar a la clase. Es
decir, el nombre de la clase va con todos los paquetes separados por puntos, por ejemplo
ejemplos.basicos.Bienvenida.
Laestructuradedirectoriosenelsistemaoperativocuandousamossubpaquetessera:
/<directorio_usuario>/Proyecto_Bienvenida/ejemplos/basicos/Bienvenida.java
Ylacompilacinyejecucinsera:
$cd/<directorio_usuario>/Proyecto_Bienvenida
$javacejemplos/basicos/Bienvenida.java
$javaejemplos/basicos/Bienvenida
HolaMundo
FlorMoncada.MontajesobrecapturadepantallaenUbuntu.
LaBibliotecadeClasesdeJavaseorganizahaciendousodeestajerarquadepaquetes.Asporejemplo,siquiero
accederalaclaseDate,tendrqueimportarlaindicandosurutacompleta,osea,java.util.Date,as:
importjava.util.Date
Citasparapensar
Tanbuenocomoesheredarunabiblioteca,esmejorcoleccionaruna. AugustineBirrel.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 38/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 39/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
UtilizarlasclasesymtodosdelaBibliotecadeJavanosvaayudarareducir
el tiempo de desarrollo considerablemente, por lo que es importante que
aprendamosaconsultarlayconozcamoslasclasesmsutilizadas.
LospaquetesmsimportantesqueofreceellenguajeJavason:
java.io.Contienelasclasesquegestionanlaentradaysalida,yaseaparamanipularficheros,leeroescribir
enpantalla,enmemoria,etc.EstepaquetecontieneporejemplolaclaseBufferedReaderqueseutilizapara
laentradaporteclado.
java.lang. Contiene las clases bsicas del lenguaje. Este paquete no es necesario importarlo, ya que es
importadoautomticamenteporelentornodeejecucin.EnestepaqueteseencuentralaclaseObject,que
sirve como raz para la jerarqua de clases de Java, o la clase System que ya hemos utilizado en algunos
ejemplos y que representa al sistema en el que se est ejecutando la aplicacin. Tambin podemos
encontrar en este paquete las clases que "envuelven" los tipos primitivos de datos, como Integer, Long,
Float, Double, etc., lo que proporciona una serie de mtodos para cada tipo de dato de utilidad, como por
ejemplomtodosparalasconversionesdedatos.
java.util.Bibliotecadeclasesdeutilidadgeneralparaelprogramador.Estepaquetecontieneporejemplola
clase Scanner utilizada para la entrada por teclado de diferentes tipos de datos, la clase Date, para el
tratamientodefechas,etc.
java.math.Contieneherramientasparamanipulacionesmatemticas.
java.awt. Incluye las clases relacionadas con la construccin de interfaces de usuario, es decir, las que nos
permitenconstruirventanas,cajasdetexto,botones,etc. Algunas de las clases que podemos encontrar en
estepaquetesonButton, TextField,Frame, Label,etc.
java.swing. Contiene otro conjunto de clases para la construccin de interfaces avanzadas de usuario. Los
componentes que se engloban dentro de este paquete se denominan componentes Swing, y suponen una
alternativamuchomspotentequeAWTparaconstruirinterfacesdeusuario.
java.net.ConjuntodeclasesparalaprogramacinenlaredlocaleInternet.
java.sql.ContienelasclasesnecesariasparaprogramarenJavaelaccesoalasbasesdedatos.
java.security.Bibliotecadeclasesparaimplementarmecanismosdeseguridad.
ComosepuedecomprobarJavaofreceunacompletajerarquadeclasesorganizadasatravsdepaquetes.
Parasaberms
En el siguiente enlace puedes acceder a la informacin oficial sobre la Biblioteca de Clases de Java
(estenIngls).
InformacinoficialsobrelaBibliotecadeClasesdeJava.
Enelsiguientevdeoseexplicademanerainteresanteelpaquetebsicojava.lang:
Clasesquecomponenelpaquetejava.lang.
Resumentextualpara"Clasesquecomponenelpaquetejava.lang"
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 40/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Casoprctico
JuanvaarealizaralgunaspruebasconelproyectodelaClnicaVeterinaria.
LecomentaaMaraqueloquetienenahoramismoeslaestructurabsica
del proyecto, que bsicamente se trata de la definicin de algunas clases y
objetos que se van a utilizar. Van a necesitar introducir datos por pantalla
para ver cmo se comportan esos objetos, y mostrar por pantalla el
resultadodemanipularlos.ParaelloutilizarnlasclasesSystemy Scanner.
Estasclasesyalashemosutilizadoanteriormente,estnenlospaquetes
java.lang y java.util, respectivamente, observa en el siguiente cdigo cmo
lasutilizodiceJuan.
Deacuerdo,ensameesecdigocomentaMara.
PeterMegyeri
EnJava,laentradaportecladoylasalidadeinformacinporpantallase
hacemediantelaclaseSystemdelpaquetejava.langdelaBibliotecade
ClasesdeJava.
System.in.Entradaestndar:teclado.
System.out.Salidaestndar:pantalla.
System.err. Salida de error estndar que se utiliza para mostrar mensajes de error. Una prctica comn en
informtica es enviar los mensajes de error a una corriente de salida diferente a la de los mensajes
normales.Losmensajes normales se envan a lo que se llama "salida estndar". Los mensajes de error se
envana"errorestndar".
NosepuedencrearobjetosapartirdelaclaseSystem,sinoqueseutilizadirectamentellamandoacualquierade
susmtodosconeloperadordemanipulacindeobjetos,esdecir,eloperadorpunto(.):
System.out.println("BienvenidoaJava")
Parasaberms
En el siguiente enlace puedes consultar los atributos y mtodos de la clase System del paquete
java.langpertenecientealaBibliotecadeClasesdeJava:
ClaseSystemdeJava.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 41/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Autoevaluacin
La clase System del paquete java.io, como cualquier clase, est formada por mtodos y
atributos,yademsesunaclasequenosepuedeinstanciar,sinoqueseutilizadirectamente.
Verdadero Falso
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 42/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
EnJava,InputStreamnospermiteleerenbytes,desdeteclado,unarchivoocualquierotrodispositivodeentrada.
Conestaclasepodemosutilizarporejemploelmtodoread()quepermiteleerunbytedelaentradaoskip(longn),
quesaltanbytesdelaentrada.Peroloquerealmentenosinteresaespoderleertextoonmeros,nobytes, para
hacernosmscmodalaentradadedatos.Paraelloseutilizanlasclases:
InputStreamReader.Conviertelosbytesledosencaracteres.Particularmente,nosvaaservirparaconvertir
elobjetoSystem.inenotrotipodeobjetoquenospermitaleercaracteres.
BufferedReader.Leehastaunfindelnea.Estaeslaclasequenosinteresautilizar,puestieneunmtodo
readLine()quenosvaapermitirleercaractereshastaelfinaldelnea.
InputStreamReaderisr=newInputStreamReader(System.in)
BufferedReaderbr=newBufferedReader(isr)
Stringcadena=br.readLine()
Obtendremosencadenauna"A".
Sin embargo, seguimos necesitando hacer la conversin si queremos leer nmeros. Por ejemplo, si escribimos un
entero 32, en cadena obtendremos "32". Si recordamos, para convertir cadenas de texto a enteros se utiliza el
mtodoestticoparseInt()delaclaseInteger,conlocuallalecturalaharamosas:
intnumero=Integer.parseInt(br.readLine())
Esa operacin de conversin de cadena a nmero slo funcionar si la cadena introducida realmente se puede
convertirennmero,porquerepresentabaaunliteralcorrectoparaeltiponumricodequesetrata,enelcasode
la sentencia anterior sera int. En caso contrario, se producira una excepcin de tipo NumberFormatException,
(ExcepcindeFormatodenmero)quedebesercapturadaytratadaconvenientemente.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 43/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
CdigodeentradaportecladoconlaclaseSystem. (1KB)
Observa que hemos metido el cdigo entre excepciones trycatch. Cuando en nuestro programa falla algo, por
ejemplolaconversindeunStringa int,Java nos avisa lanzando excepciones. Si "capturamos" esa excepcin en
nuestro programa, podemos avisar al usuario de qu ha pasado. Esto es conveniente porque si no tratamos la
excepcin seguramente el programa se pare y no siga ejecutndose. El control de excepciones ya lo vimos en la
unidadanterior,asquenocreoquetengasningnproblemaparaentendereso.
Parasaberms
Teproponemoselsiguienteenlaceconundescriptivovdeosobrecmocapturardatosdesdeelteclado:
CapturardatosdesdetecladoconBufferedReader.
Resumentextualpara"CapturardatosdesdetecladoconBufferedReader
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 44/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
inconvenientedequeslopodemosleerdemanerafciltiposdedatos
String. Si queremos leer otros tipos de datos deberemos convertir la
cadenadetextoledaenesostiposdedatos.
ElkitdedesarrollodeJava,apartirdesuversin1.5,incorporalaclase FlorMoncada.
CapturadepantalladelawebcopyrightdeOracle.
java.util.Scanner, la cual permite leer tipos de datos String, int, long,
etc.,atravsdelaconsoladelaaplicacin.Porejemplo,paraleerundatodetipoenteroportecladosera:
Scannerteclado=newScanner(System.in)
inti=teclado.nextInt()
O bien esta otra instruccin para leer una lnea completa, incluido texto,
nmerosoloquesea:
Stringcadena=teclado.nextLine()
ParaconocercmofuncionaunobjetodelaclaseScannerteproporcionamoselsiguienteejemplo:
CdigodeentradaportecladoconlaclaseScanner. (2KB)
Parasaberms
SiquieresconoceralgomssobrelaclaseScannerpuedesconsultarelsiguienteenlace:
CapturardatosdesdetecladoconScanner.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 45/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
voidprint(Strings):escribeunacadenadetexto.
void println(String x): escribe una cadena de texto y termina la
lnea.
void printf(String format, Object... args): escribe una cadena de
textoutilizandoformato.
FlorMoncada.
Enlaordenprint()y println(),cuandoqueramosescribirunmensajeyel CapturadepantalladelawebcopyrightdeOracle.
valordeunavariabledebemosutilizareloperadordeconcatenacindecadenas(+),porejemplo:
System.out.println(Bienvenido,+nombre)
Escribeelmensajede"Bienvenido,Carlos",sielvalordelavariablenombreesCarlos.
Lasrdenesprint()y println()considerancomocadenasdetextosinformatoatodaslasvariablesqueescribenpor
ejemplo,noseraposibleindicarqueescribaunnmerodecimalcondoscifrasdecimalesoredondearlascifras,o
escribirlospuntosdelosmiles.Paraelloseutilizalaordenprintf().
Laordenprintf()utilizaunoscdigosdeconversinparaindicardequtipoeselcontenidoamostrar.Estoscdigos
secaracterizanporquellevandelanteelsmbolo%,algunosdeellosson:
%c:escribeuncarcter.
%s:escribeunacadenadetexto.
%d:escribeunentero.
%f:escribeunnmeroenpuntoflotante.
%e:escribeunnmeroenpuntoflotanteennotacincientfica.
Porejemplo,siqueremosescribirelnmerofloat12345.1684conelpuntodelosmilesyslodoscifrasdecimales
laordensera:
System.out.printf("%,.2f",12345.1684)
Estaordenmostraraelnmero12.345,17porpantalla.
Esimportanteaclararqueestoscdigosdeconversinformateanlasalida,mostrndoladeunamanera
o de otra, pero no cambian el valor que internamente tengan las variables. Si en el caso anterior, en
lugardeimprimirunvalorconcreto,12345.1684, se hubiera impreso una variable con ese mismo valor,
aunque se mostrara su valor como 12.345,17 por pantalla, la variable seguira teniendo almacenado el
valor12345.1684
Estasrdenespuedenutilizarlassecuenciasdeescapequevimosenunidadesanteriores,como"\n"paracrearun
saltodelnea,"\t"paraintroducirunsaltodetabulacineneltexto,etc.
Debesconocer
Para conocer algo ms sobre la orden printf(), en el siguiente enlace tienes varios ejemplos de
utilizacin:
Salidadedatosconlaordenprintf().
Entradaysalidadedatos.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 46/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Entradaysalidadedatos.
Parasaberms
En este otro enlace, puedes ver un ejemplo interesante de uso de la clase Scanner junto con las
rdenesprintf()y println().Paraello,descrgateelfichero,descomprmeloyhazdobleclicenelfichero
.html
Ejemplodeentradaysalidadedatos (67KB).
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 47/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Por defecto, tanto out como err tienen su destino en la misma pantalla, o al
menos en el caso de la consola del sistema donde las dos salidas son
representadasconelmismocolorynonotamosdiferenciaalguna.Encambio, Ameyaarsekar
en la consola de varios entornos integrados de desarrollo como NetBeans o
Eclipselasalidadeerrseveenuncolordiferente.Teniendoelsiguientecdigo:
LasalidadeesteejemploenNetBeanses:
Comovemos,enunentornocomoNetBeans,utilizarlasdossalidasnospuedeayudaraunamejordepuracindel
cdigo.
Aunque por defecto vemos la salida de error en la consola, es posible redirigirla a un fichero por ejemplo, como
podemosverenelsiguienteparasaberms.
Parasaberms
Msinformacinsobrelaentrada,salidayerrorestndar.
Flujosdedatosestndar.
Autoevaluacin
Relacionacadaclaseconsufuncin,escribiendoelnmeroasociadoalafuncinenelhueco
correspondiente.
Ejercicioderelacionar
Scanner 1.Conviertelosbytesledosencaracteres.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 48/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
PrintStream 2.Leehastaunfindelnea.
3.Leediferentestiposdedatosdesdelaconsoladela
InputStreamReader
aplicacin.
BufferedReader 4.Contienevariosmtodosparamostrardatosporpantalla.
Enviar
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 49/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
8. Recursividad.
Casoprctico
EneldocumentoqueJuanenviaMaraporcorreoelectrnico,
adems de conceptos sobre Programacin Orientada a Objetos,
habaotracosamuyinteresantequelellammucholaatencin,
yeslarecursividad.
AdolfoLlopisIbaez
Aunqueesamximaesmuylgicaysensataalahoradehablarennuestra
vida diaria, ya puedes ir olvidndola en el caso de la programacin, al igual
queenmatemticas,dondeexistendefinicionesporrecurrencia:
SedefinealgunapropiedadparaelprimernmeroNatural,cero.
Suponiendo que la propiedad est definida para un nmero Natural
cualquiera, llamado n, usamos esa definicin para definirla tambin
paraelsiguientenmeroNatural,n+1
De esta forma queda definida para todo el conjunto de los nmeros
Naturales.
GabrielEsteffan
Enprogramacin,usamoseltrminorecursividadparareferirnosaprocedimientosomtodosquecontienen
ensuimplementacinllamadasasmismo,esdecirunmtodoesrecursivosiparaejecutarsesellamaa
smismo.
Elaspectodeladeclaracindeunmtodorecursivoesalgocomoloquesigue:
metodoRecursivo(){
sentencia
sentencia
metodoRecursivo()
sentencia
sentencia
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 50/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Hemosresaltadoennegritalallamadaqueelmtodosehaceasmismo.
Pero,siparaejecutaraunmtodohayquehacerunallamadaalmismomtodoqueasuvezharunallamadaal
mismomtodo,yassucesivamente,nohabremosentradoenunbucleinfinitoqueharquenuncaterminemos?
No,silascosassehacenbien,aunqueevidentemente,esposiblehacerlasmal.Qudebemostenerencuentaa
lahoradesabersiunmtodorecursivoestbiendefinido?
Ademsdelallamadaalpropiomtodo,debenexistirotrassentenciasenladefinicindelmtodoque
establezcanalmenosuncasobase,esdecir,uncasoparaelqueseconocelasolucin,yparaelquela
llamada al mtodo puede devolver un valor o terminar la ejecucin sin necesidad de volver a invocar de
nuevoalpropiomtodo.
Cadanuevallamadaalpropiomtododebereducirelproblema,esdecir,debeacercarnosmsalcaso
base.
La solucin debe ser correcta para los casos no base. Es decir, debemos ser capaces de expresar
correctamente la solucin de un caso a partir de la soluciones de casos menos complejos, para poder
construirlasolucindecualquiercasoapartirdelassolucionesdelcasobase.
CitasParaPensar
ParaentenderloqueeslaRecursividad,anteshayqueentenderloqueeslaRecursividad.
Annimo.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 51/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
DefinicinRecursiva.Comoelproductodelpropionmeroporelfactorialdelnmeroanterior.
Es evidente que (n1)! = (n1)* (n2)**3*2*1, lo que nos lleva a poder escribir que n! = n * (n1)!, siendo
adems0!=1igualqueantes.Acabamosdehacerunadefinicinporrecurrenciadelfactorialdeunnmero.
El factorial de un nmero vale 1 si el nmero es cero, y el producto del propio nmero por el factorial del
anterior,enotrocaso.
Para calcular el factorial de esta forma, es como si le encargramos la tarea a una persona, que no sabe
calcularelvalorfinaldelfactorialden,perosabequeesn*(n1)!,ylepreguntaaotrapersonaelvalorde(n
1)!Estapersona,tampocosabecalcularelvalorfinalde(n1)!,perosabequees(n1)*(n2)!,ylepreguntaa
suvezaotrapersonaelvalorde(n2)!,yassucesivamentehastaquellegamosapreguntarleaunapersona
elvalorde0!Yesapersonarespondeque0!=1.Apartirdeesemomento,lapersonaquelepregunttiene
toda la informacin para calcular 1!, lo calcula, y le responde a la persona que le pregunt, que completa el
clculo de 2!, y as sucesivamente, hasta llegar a la persona que calcula (n1)!, que completa el clculo y le
proporcionasuvaloraquienlepregunt,quemultiplicaesevalorpornyobtieneelvalorden!.
Parasaberms
Puedesconsultarestawebparaentendermejorlapresentacinsobreelfactorial,quetienesmsabajo.
InformacinsobrelaelconceptodePila
Clculodefactorialrecursivamente.
Resumendelapresentacin.
Presentacinapantallacompleta,
Al igual que tenemos dos definiciones del factorial, una iterativa y otra recursiva, un problema lo podemos
resolver mediante un mtodo que sea iterativo, ajustndose a la primera definicin o mediante un mtodo
recursivo,queseajustealasegunda.Lasolucinrecursiva,enestecaso,esmselegante,enelsentidode
quegenerauncdigomsbreve,ymssimpledeentender,esmuyintuitiva.
La recursividad es una poderosa herramienta en programacin y ofrece una alternativa a las soluciones iterativas
complejasdealgunosalgoritmos.
Culessonentonceslasrazonesparausarlarecursividad?
Losproblemasresultanmsfcilesderesolverqueconestructurasiterativas.
Proporcionasolucionesmssimples.
Proporcionasolucioneselegantes.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 52/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Autoevaluacin
Qudebemostenerencuentaalahoradesabersiunmtodorecursivoestbiendefinido?Sealala
afirmacincorrecta?
Debemossercapacesdeexpresarcorrectamentelasolucindeuncasoapartirdelasoluciones
de casos menos complejos, para poder construir la solucin de cualquier caso a partir de las
solucionesdelcasobase.
Debemossercapacesdeexpresarcorrectamentelasolucindeuncasoapartirdelasoluciones
decasosmscomplejos
Lasolucinpuedenosercorrectaparaloscasosnobase.
Todaslasanterioressoncorrectas.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 53/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
No slo no existen casos en los que sea obligatoria, sino que siempre
existe una solucin iterativa, y sta siempre ser ms eficiente, es
decir, necesitar consumir menos recursos de memoria y de CPU, y
obtendrlasolucinenmenostiempo.
Lo que ocurre es que a veces, por la naturaleza recursiva del problema, no robvandePavert
es fcil encontrar la solucin iterativa, o resulta complicada y difcil de
entender.
La recursividad se debe usar cuando sea realmente necesaria, es decir, cuando no exista una solucin
iterativa simple. Cuando las dos soluciones son fcilmente expresables, siempre ser preferible la
soluciniterativa.
Por otro lado, la recursividad requiere hacer una asignacin dinmica de memoria, que no es posible en
todosloslenguajesdeprogramacin.(SloesenJavayenotrosmuchos).
Esto incluye almacenar en la memoria todos los valores de los registros del microprocesador, para poder
restablecerlos posteriormente y continuar por el mismo punto de la ejecucin de esa llamada que lo habamos
dejado.
Como puede haber muchas llamadas sucesivas, stas se van almacenando en la pila, de forma que se irn
retirando de ella en el orden contrario a como se introdujeron. As, el ltimo en entrar es el primero en salir.
(Estructura LIFO).Deestemodo,elprocesadordelacomputadoratienequededicarsea:
guardarlosdatosdecadaejecucinenlapila,
cargarlosdelanuevallamadaparacuandoalfinalstatermine,
irdenuevosacandoesosvaloresdelapilaenordencontrarioacomoseintrodujeron,
pararestaurarlosenlaCPUycompletarlallamada.
EsaeslacausaresponsabledequelassolucionesrecursivasrequieranmuchomstiempodeCPUymuchams
memoria.
Con una solucin iterativa slo tendremos un mtodo ejecutndose, por lo que slo necesitaremos memoria para
unacopiadecadaunadelasvariablesqueusaesemtodo.Porotrolado,nohayquehacerningunaoperacinde
almacenarenlapilalosdatosdelaejecucinparaposteriormentereanudarla,yaquelallamadaalmtodoiterativo
seejecutahastafinalizar,sintenerqueintercambiarseconningunaotrallamada.
En este sentido, el factorial no es el mejor ejemplo que se puede mostrar de uso adecuado de una solucin
recursiva,yaqueexisteunasoluciniterativaigualmenteclaraysimple,quesiemprevaasermseficiente.
Autoevaluacin
Sealalaafirmacincorrecta.Respectoalarecursividadfrentealaiteracin,podemosafirmarque:
Siexisteunasolucinrecursivaaunproblema,nosiempreexisteunasoluciniterativa.
A veces, por la naturaleza recursiva del problema, no es fcil encontrar la solucin iterativa, o
resultacomplicadaydifcildeentender.
LasolucinrecursivanecesitarconsumirmenosrecursosdememoriaydeCPU,yobtendrla
solucinenmenostiempo.
Todaslasrespuestasanterioressoncorrectas.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 54/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 55/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Hemosvenidocontandolascaractersticasatenerencuentasobrelarecursividad,su
definicin,yalgunasconsideracionesgeneralessobresuuso.
Con los ejemplos de los apartados siguientes, pretendemos dar una idea de la
recursividad. Son ejemplos que ayudan por su sencillez y claridad a comprender el
conceptoderecursividad,peroquepresentanunasoluciniterativasimplequees
igualmenteclaraymseficiente(factorial,Fibonacciymximocomndivisor)
Noahondaremosenproblemasmscomplicados,peroquesepasquehayejemplos
que escapan a las pretensiones del mdulo, en los que, a pesar de que existe la
solucin iterativa, sta es difcil de imaginar, y la recursividad aporta una solucin
simpleyelegante.Estoscasossonporejemplo:elproblemadelasTorresdeHanoi,
@Cristianhold
OrdenacinporQuickSort,etc.
Tambin se usa la recursividad en un un tipo especial de problemas, denominados algoritmos de Vuelta atrs o
Backtracking,queconsistenenexplorardeformasistemticatodosloscaminosposiblesparaalcanzarlasolucin,
ysialgncaminonosllevaaunpuntoenelquenoesposiblealcanzarlasolucindeseada,sevuelveatrshasta
alcanzar un punto en el que es posible continuar explorando nuevas alternativas. Es el caso de problemas para
encontrarlasalidadeunlaberinto,oparacalcularlosmovimientosdeunafichaeneltablerodeajedrez.
Parasaberms
EnestawebpuedesprobareljuegodelastorresdeHanoi:
TorresdeHanoi.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 56/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
8.3.1. Factorial.
ste es el primer ejemplo de recursividad que vamos a ver. Por qu lo
elegimoscomoelprimero?
Ejercicioresueltofactorialiterativamente (2KB)
Ejercicioresueltofactorialrecursivamente (3KB)
Autoevaluacin
Culeseslaraznfundamentalparausarlarecursividad?Sealalaafirmacincorrecta.
Losproblemasresultanmsfcilesderesolverqueconestructurasiterativas.
Proporcionasolucionesmssimples.
Proporcionasolucioneselegantes.
Todaslasanterioressoncorrectas.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 57/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Aligualqueenelcasodelfactorial,existeunasoluciniterativaque
es bastante sencilla y clara, por lo que la recursividad lo nico que
aportaesunmayorparecidoconladefinicindelafuncin.Peroen
este caso, tenemos el agravante de que cada llamada a la funcin
genera dos nuevas llamadas recursivas, con lo que la eficiencia
decrece considerablemente. Se produce una explosin exponencial
del nmero de llamadas recursivas, repitindose adems clculos de
forma innecesaria. As, resulta an ms desaconsejable el uso de la
recursividadenestecaso.
Portanto,lafuncinFibonaccisepuededefinircomo:
fib(n)=n,sin=0n=1
fib(n)=fib(n1)+fib(n2),sin>1
Estadefinicindelafuncinesmuyclaraeintuitiva,yelalgoritmorecursivoquelaimplementaesmuysencillode
hacer, pero muy ineficiente. Si intentas calcular el trmino 40 de la sucesin, vers cmo tarda un tiempo
considerableenresolverlo,ysiintroducesunvalormsalto,posiblementetendrslasensacindequeelordenador
sehabloqueado,debidoaloquetarda.Esetiempo,noobstante,sermayoromenordependiendodelapotencia
detuordenador.
Ejercicioresueltofibonaccirecursiva (2KB)
Fibonacci
Resumendelapresentacin.
Presentacinapantallacompleta.
A continuacin presentamos el cdigo de la solucin iterativa, que tambin es claro y fcil de programar, aunque
quizsnotanelegante,perodesdeluegoesmuchomseficiente.Alejecutarlocompruebaeltiempoquetardaen
ejecutarse para el caso de que el nmero sea 100. Prcticamente es instantneo. Sin embargo, la solucin
recursiva,yatardabamuchomsdelorazonableparanmerosmayoresde40.Claramente,lasoluciniterativaes
muchomseficiente.
Ejercicioresueltofibonacciiterativa (2KB)
Parasaberms
PuedesconsultarunresumendelabiografadeFibonaccienesteenlace:
CursiosidadessobreFibonacci.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 58/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
Dividirelmayorentreelmenor.
Repetirlospasossiguienteshastaqueobtengamosunrestocero.
Sielrestodeladivisines0,elmximocomndivisoreseldivisor.
Encasocontrario,seguiremosdividiendo,tomandocomodividendoeldivisor,ycomodivisorelresto
deladivisinanterior.
Por tanto, el mximo comn divisor ser el ltimo resto no nulo de esas divisiones sucesivas, que tambin es el
divisordelaltimadivisinparalaquesehaobtenidoresto0.
EjercicioresueltoMximocomndivisor (2KB)
Parasaberms
Con este juego de un libro de educacin primaria, puedes comprobar el mximo comn divisor de
muchosnmerosdemaneradivertida.
Mximocomndivisor
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 59/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 60/60