You are on page 1of 60

2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?

id=10413

Utilizacin de objetos.

Casoprctico

Ada y Juan se han reunido para discutir sobre distintos


proyectos de BK Programacin. Ada le comenta a Juan
que estn teniendo algunos problemas con algunos de
estos proyectos. A menudo surgen modificaciones o
mejoras en el software en el mbito de los contratos de
mantenimiento que tienen suscritos con los clientes, y
realizar las modificaciones en los programas est
suponiendoenmuchoscasosmodificarelprogramacasien
sutotalidad.
FrankE.Weaver
A eso se ha de sumar que las tareas de modificacin son
encargadasalaspersonasmsadecuadasenesemomento,segnlacargadetrabajoquehaya,que
no tienen por qu coincidir con las personas que desarrollaron el programa. Las modificaciones en los
proyectosseestnretrasando,yhayalgunasquedebenestarlistasantesdequesurjaelnuevocambio
deversin.

En reuniones anteriores se ha comentado la posibilidad de aumentar el precio del contrato de


mantenimiento de los clientes. Se ha consultado con el equipo de comerciales y a regaadientes han
aceptado un aumento que an est por decidir, pero an as quizs no sea suficiente. La empresa
necesita mejorar el mtodo de trabajo para reducir costes de mantenimiento del software y
alcanzarlarentabilidaddeseada.

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.

Existen coches, edificios, sillas, mesas, semforos, ascensores e incluso


personas o animales. Todos ellos pueden ser considerados objetos, con
una serie de caractersticas y comportamientos. Por ejemplo, existen
cochesdediferentesmarcas,colores,etc.ypuedenacelerar,frenar,girar,etc.,
olaspersonastenemosdiferentecolordepelo,ojos,alturaypesoypodemos
nacer,crecer,comer,dormir,etc.

Los programas son el resultado de la bsqueda y obtencin de una


solucin para un problema del mundo real. Pero en qu medida los
programasestnorganizadosdelamismamaneraqueelproblemaquetratan JoshuaDavisPhotography

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

Juan cuenta con la ayuda de Mara para desarrollar la aplicacin


para la Clnica Veterinaria. Lo normal es pensar en tener una
aplicacin de escritorio para las altas y bajas de clientes y la
gestin de mascotas, y una parte web para que la clnica pueda
estar presente en Internet, e incluso, realizar la venta online de
susproductos.Maratienebastanteexperienciaenadministracin
de pginas web, pero para estar capacitada en el desarrollo de
aplicacionesenJava,necesitaadquirirconocimientosadicionales.

Juan le explica que tienen que utilizar un mtodo de


programacinquelesayudeaorganizarlosprogramas,atrabajar
RyanO'Connell
enequipodeformaquesiunodeellostienequedejarunaparte
para que se encargue el otro, que ste lo pueda retomar con el mnimo esfuerzo. Nadie del equipo
debe ser imprescindible para que el trabajo contine. Adems, interesa poder reutilizar todo el
cdigoquevayancreando,parairmsrpidoalahoradeprogramar.Juanleexplicaquesiconsiguen
adoptar ese mtodo de trabajo, no slo redundar en una mejor organizacin para ellos, sino que
ayudar a que las modificaciones en los programas sean ms llevaderas de lo que lo estn siendo
ahora.

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.

Dentro de las distintas formas de hacer las cosas en programacin,


distinguimosdosparadigmasfundamentales:

Programacin Estructurada, se crean funciones o


procedimientos que definen las acciones a realizar, y que
posteriormenteformanlosprogramas.
Programacin Orientada a Objetos, considera los programas en
trminosdeobjetosytodogiraalrededordeellos.

Peroenquconsistenrealmenteestosparadigmas?

Veamos estos dos modelos de programacin con ms detenimiento. bellydraft

Inicialmente se programaba aplicando las tcnicas de programacin


tradicional,tambinconocidascomoProgramacinEstructurada.Elproblemasedescomponaenunidadesms
pequeashastallegaraaccionesoverbosmuysimplesyfcilesdecodificar.Porejemplo,enlaresolucindeuna
ecuacin de primer grado, lo que hacemos es descomponer el problema en acciones ms pequeas o pasos
diferenciados:

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

Relaciona el trmino con su definicin, escribiendo el nmero asociado a la definicin en el


huecocorrespondiente.

Ejercicioderelacionar

Paradigma Relacin Definicin

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.

En la Programacin Estructurada, el programa estaba compuesto por un conjunto de datos y funciones


"globales". El trmino global significaba que eran accesibles por todo el programa, pudiendo ser llamados en
cualquier ubicacin de la aplicacin. Dentro de las funciones se situaban las instrucciones del programa que
manipulaban los datos. Funciones y datos se encontraban separados y totalmente independientes. Esto
ocasionabadosproblemasprincipales:

Los programas se creaban y estructuraban de acuerdo con la arquitectura de la computadora donde se


tenanqueejecutar.
Alestarseparadoslosdatosdelasfunciones,stoseranvisiblesentodalaaplicacin.Elloocasionabaque
cualquier modificacin en los datos poda requerir la modificacin en todas las funciones del programa, en
correspondenciaconloscambiosenlosdatos.

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?

Fundamentalmente la posibilidad de representar el problema en


trminosdelmundoreal,quecomohemosdichoestnmscercanosa
nuestra forma de pensar, pero existen otra serie de ventajas como las
siguientes:

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

Marca la opcin que NO se corresponda con uno de los beneficios de la Programacin


OrientadaaObjetos.
Modularidad.
Reusabilidad.
Complejidadenelmantenimiento.
Comprensin.

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:

Abstraccin. Es el proceso por el cual definimos las caractersticas


msimportantesdeunobjeto,sinpreocuparnosdecmoseescribirn
en el cdigo del programa, simplemente lo definimos de forma
general. En la Programacin Orientada a Objetos la herramienta ms
importanteparasoportarlaabstraccineslaclase.Bsicamente,una
claseesun tipodedatoqueagrupalascaractersticascomunesde
Helena
un conjunto de objetos. Poder ver los objetos del mundo real que
deseamos trasladar a nuestros programas, en trminos abstractos, resulta de gran utilidad para un buen
diseodelsoftware,yaquenosayudaacomprendermejorelproblemayatenerunavisinglobaldetodoel
conjunto.Porejemplo,sipensamosenunaclaseVehculoqueagrupalascaractersticascomunesdetodos
ellos, a partir de dicha clase podramos crear objetos como Coche y Camin. Entonces se dice que
VehculoesunaabstraccindeCocheydeCamin.
Modularidad. Una vez que hemos representado el escenario del problema en nuestra aplicacin, tenemos
comoresultadounconjuntodeobjetossoftwareautilizar.Esteconjuntodeobjetossecreanapartirdeuna
o varias clases. Cada clase se encuentra en un archivo diferente, por lo que la modularidad nos permite
modificar las caractersticas de la clase que define un objeto, sin que esto afecte al resto de clases de la
aplicacin.
Encapsulacin. Tambin llamada "ocultamiento de la informacin". La encapsulacin o
encapsulamientoeselmecanismobsicoparaocultarlainformacindelaspartesinternasdeunobjetoa
los dems objetos de la aplicacin. Con la encapsulacin un objeto puede ocultar la informacin que
contiene al mundo exterior, o bien restringir el acceso a la misma para evitar ser manipulado de forma
inadecuada. Por ejemplo, pensemos en un programa con dos objetos, un objeto Persona y otro Coche.
<code>PersonasecomunicaconelobjetoCocheparallegarasudestino,utilizandoparaellolasacciones
que Coche tenga definidas, como por ejemplo, conducir. Es decir, Persona utiliza Coche , pero no sabe
cmofuncionainternamente,slosabeutilizarsusmtodosoacciones.
Jerarqua. Mediante esta propiedad podemos definir relaciones
de jerarquas entre clases y objetos. Las dos jerarquas ms
importantes son la jerarqua "es un" llamada generalizacin o
especializacin y la jerarqua "es parte de", llamada
agregacin.Convienedetallaralgunosaspectos:
La generalizacin o especializacin, tambin conocida
comoherencia,permitecrearunaclasenuevaentrminos
de una clase ya existente (herencia simple) o de varias
clases ya existentes (herencia mltiple). Por ejemplo,
podemos crear la clase CocheDeCarreras a partir de la clase Coche, y as slo tendremos que
definirlasnuevascaractersticasquetenga.
La agregacin, tambin conocida como inclusin, permite agrupar objetos relacionados entre s
dentrodeunaclase.As,unCocheestformadoporMotor,Ruedas, Frenos y Ventanas. Se dice
queCocheesunaagregacinyMotor,Ruedas,FrenosyVentanassonagregadosdeCoche.
Polimorfismo.Estapropiedadindicalacapacidaddequevariasclasescreadasapartirdeunaantecesora
realicen una misma accin de forma diferente. Por ejemplo, pensemos en la clase Animal y la accin de
expresarse.NosencontramosquecadatipodeAnimalpuedehacerlodemaneradistinta,losPerrosladran,
losGatosmaullan,lasPersonashablamos,etc.Dichodeotramanera,elpolimorfismoindicalaposibilidad
de tomar un objeto (de tipo Animal, por ejemplo), e indicarle que realice la accin de expresarse, esta
accinserdiferentesegneltipodemamferodelquesetrate.

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

2.4. Lenguajes de programacin orientados a


objetos.
Unapanormicadelaevolucindeloslenguajesdeprogramacinorientados
aobjetoshastallegaralosutilizadosactualmenteeslasiguiente:

Simula (1962). El primer lenguaje con objetos fue B1000 en 1961,


seguido por Sketchpad en 1962, el cual contena clones o copias de
objetos. Sin embargo, fue Simula el primer lenguaje que introdujo el
concepto de clase, como elemento que incorpora datos y las
operaciones sobre esos datos. En 1967 surgi Simula 67 que
incorporaba un mayor nmero de tipos de datos, adems del apoyo a
objetos.
SmallTalk (1972). Basado en Simula 67, la primera versin fue Quasar

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

Relaciona los lenguajes de programacin indicados con la caracterstica correspondiente,


escribiendoelnmeroasociadoalacaractersticaenelhuecocorrespondiente.

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

3. Clases y Objetos. Caractersticas de los


objetos.

Casoprctico

Marahahechoundescansodecincominutos.

Se est tomando un caf y est repasando los conceptos de


Programacin Orientada a Objetos. Piensa que este paradigma
supone un cambio de enfoque con respecto a las tcnicas
tradicionales. Ahora lo que necesita es ahondar en el concepto
de objeto, que parece ser el eje central de este modelo de
programacin.

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.

Por tanto, estudiando los objetos que estn presentes en un problema


podemos dar con la solucin a dicho problema. Los objetos tienen unas
caractersticasfundamentalesquelosdistinguen:

Identidad. Es la caracterstica que permite diferenciar un objeto


de otro. De esta manera, aunque dos objetos sean exactamente
iguales en sus atributos, son distintos entre s. Puede ser una
direccin de memoria, el nombre del objeto o cualquier otro
elemento que utilice el lenguaje para distinguirlos. Por ejemplo,
dosvehculosquehayansalidodelamismacadenadefabricacin
yseanigualesaparentemente,sondistintosporquetienenuncdigoquelosidentifica.
Estado.Elestadodeunobjetovienedeterminadoporunaseriedeparmetrosoatributosquelodescriben,
y los valores de stos. Por ejemplo, si tenemos un objeto Coche, el estado estara definido por atributos
comoMarca,Modelo,Color,Cilindrada,etc.
Comportamiento. Son las acciones que se pueden realizar sobre el objeto. En otras palabras, son los
mtodos o procedimientos que realiza el objeto. Siguiendo con el ejemplo del objeto Coche, el el
comportamientoseranaccionescomo:arrancar(),parar(),acelerar(),frenar(),etc.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413 12/60
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10413

3.1. Propiedades y mtodos de los objetos.


Como acabamos de ver todo objeto tiene un estado y un
comportamiento.

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

3.2. Interaccin entre objetos.


Perolosdistintosobjetosdeunprogramapuedenteneralgntipodecomunicacinentreellos?

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.

Piensa en el mundo real, en un tipo de objeto, una galleta y en el


proceso industrial de produccin de galletas. No necesitamos hacer y
hornear una sola galleta, sino que lo normal ser hacer y hornear un
montn de ellas. Para realizar ese proceso, seguro que nos resulta til
disponerdeunmoldequeestablezcacmovaasercadaobjetogalleta.
Puesbien,algoasocurreenprogramacinconlosobjetos,queusamos
"moldes"paraconstruirlos.

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

Mara sigue fuera de la oficina. Esta noche en casa quiere


repasar conceptos sobre Programacin Orientada a Objetos, as
queaprovechaunmomentoparallamaraJuanylecomenta:

Yastodosobreobjetosledicesloque...

Soloque....qu?aadeJuan.

Solomefaltasaberunacosa,cmosecreaunobjeto?

Juan sonre ante la pregunta de Mara, y le explica que los JoseMariaCuellar


objetossecreancomosifueradeclarandounavariablems,tan
slo que el tipo de datos de dicho objeto ser una clase. Tras declararlos hay que instanciarlos con el
operador new para reservar memoria para ellos, y despus ya podremos utilizarlos, refirindonos a su
contenidoconeloperadorpunto.

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.

Enelejemplodelobjetotrabajador,lasvariablesinstanciaserancolorDePelo, peso,altura,etc. Y los mtodos de


instanciaserancrecer(), dormir(),comer(),etc.

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

4.1. Ciclo de vida de los objetos.


Todo programa en Java parte de una nica clase, que como hemos
comentado se trata de la clase principal. Esta clase ejecutar el
contenido de su mtodo main(), el cual ser el que utilice las dems
clasesdelprograma,creeobjetosylancemensajesaotrosobjetos.

Las instancias u objetos tienen un tiempo de vida determinado. Cuando


un objeto no se va a utilizar ms en el programa, es destruido por el
recolectordebasuraparaliberarrecursosquepuedenserreutilizadospor
otrosobjetos.

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:

nombreObjeto es el nombre de la variable referencia con la cual nos


referiremosalobjeto.
neweseloperadorparacrearelobjeto.
ConstructorDeLaClase es un mtodo especial de la clase, que se
llamaigualqueella,yseencargadeinicializarelobjeto,esdecir,de
darunosvaloresinicialesasusatributos.
par<code>ametro1,...,parametroN, son parmetros que puede o no
necesitarelconstructorparadarlosvaloresinicialesalosatributosdel
objeto.
manuelfloresv

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

4.5. Destruccin de objetos y liberacin de


memoria.
Cuando un objeto deja de ser utilizado, es necesario liberar el espacio de
memoria y otros recursos que posea para poder ser reutilizados por el
programa.Aestaaccinseledenominadestruccindelobjeto.

En Java la destruccin de objetos corre a cargo del recolector de basura


(garbage collector). Un gran invento!, ya que nos permite como
programadores prcticamente desentendernos de ese asunto, sabiendo
adems que nunca van a producirse problemas por olvidarse de recoger la
basuraadecuadamente,comoocurraenotroslenguajes.
PatPilon
El recolector de basura es un sistema de destruccin automtica de objetos
que ya no son utilizados. Lo que se hace es liberar una zona de memoria que haba sido reservada previamente
medianteeloperadornew,peroqueyahadejadodeestarreferenciada,esdecir,yanohayformadellegaraella,y
por tanto ya no es posible volver a usar ese objeto. Esto evita que al programar tengamos que preocuparnos de
realizarlaliberacindememoria.

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

Mara est contenta con lo que est aprendiendo sobre Java,


bsicamente se trata de ampliar sus conocimientos y con la
experiencia que ella tiene no le resultar difcil ponerse a
programarenpocotiempo.

Juan ha comenzado el proyecto de la Clnica Veterinaria y ella


quiereimplicarsetambinloantesposible.Adems,estnlosdos
becarios Ana y Carlos, que se han incorporado al proyecto hace
pocoyhayquecomenzarapensarentareasparaellos.

Por lo pronto, Mara contina con el documento facilitado por


Seudonimoanonimo
Juan, ahora tiene que ver cmo se utilizan los mtodos, aunque
intuyequenovaaseralgomuydiferentealasfuncionesyprocedimientosdecualquierotrolenguaje.

Los mtodos, junto con los atributos, forman parte de la estructura


internadeunobjeto.Losmtodoscontienenladeclaracindevariables
locales y las operaciones que se pueden realizar para el objeto, y que
sonejecutadascuandoelmtodoesinvocado.Sedefinenenelcuerpo
de la clase y posteriormente son instanciados para convertirse en
mtodosdeinstanciadeunobjeto.

Para utilizar los mtodos adecuadamente es conveniente conocer la


estructurabsicadequedisponen.

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.

Dentro de un mtodo nos encontramos el cuerpo del mtodo que


contieneelcdigodelaaccinarealizar.Lasaccionesqueunmtodopuederealizarson:

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

5.1. Parmetros y valores devueltos.


Losmtodossepuedenutilizartantoparaconsultarinformacinsobreelobjetocomo
para modificar su estado. La informacin consultada del objeto se devuelve a travs
deloqueseconocecomovalorderetorno,ylamodificacindelestadodelobjeto,o
sea,desusatributos,sehacemediantelalistadeparmetros.

En general, la lista de parmetros de un mtodo se puede declarar de dos formas


diferentes:

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.

EnellenguajeJava,todaslasvariablessepasanporvalor, excepto los objetos que se pasan por referencia.


EnJava,ladeclaracindeunmtodotienedosrestricciones:

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.

La lista de argumentos en la llamada a un mtodo (lista de parmetros actuales) debe coincidir en


nmero, tipo y orden con los parmetros incluidos en la declaracin del mtodo (lista de parmetros
formales),yaquedelocontrarioseproduciraunerrordesintaxis.

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?

Decamosqueutilizbamoseloperadornew seguido del nombre de la clase y un parntesis. Adems, el nombre


de la clase era realmente el constructor de la misma, de ah la necesidad de poner parntesis, y lo definamos
como un mtodo especial que sirve para inicializar valores. En este apartado vamos a ver un poco ms sobre los
constructores.

Un constructor es un mtodo especial con el mismo nombre de la clase y que no devuelve


ningnvalordeformaexplcitatrassuejecucin,aunqueimplcitamentedevuelveelobjetoque
seestcreando.

Cuando creamos un objeto debemos instanciarlo utilizando el constructor
de la clase. Veamos la clase Date proporcionada por la Biblioteca de
ClasesdeJava.SiqueremosinstanciarunobjetoapartirdelaclaseDate
tanslotendremosqueutilizarelconstructorseguidodeunparntesis:

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

5.3. El operador this.


Los constructores y mtodos de un objeto suelen utilizar el operador this. Este operador sirve para referirse a los
atributos de un objeto cuando estamos dentro de l. Sobre todo se utiliza cuando existe ambigedad entre el
nombre de un parmetro y el nombre de un atributo, entonces en lugar del nombre del atributo solamente
escribiremosthis.nombreAtributo,yasnohabrdudadeaquelementonosestamosrefiriendo.

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

5.4. Mtodos estticos.


Cuando trabajbamos con cadenas de caracteres utilizando la clase
String,veamoslasoperacionesquepodamoshacerconellas:obtener
longitud, comparar dos cadenas de caracteres, cambiar a maysculas o
minsculas, etc. Pues bien, sin saberlo estbamos utilizando mtodos
estticos definidos por Java para la clase String. Pero qu son los
mtodosestticos?Vemoslo.

Losmtodos estticos son aquellos mtodos definidos para una clase


que se pueden usar directamente, sin necesidad de crear un objeto de
dichaclase.Tambinsellamanmtodosdeclase.

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

6. Libreras de objetos (paquetes).

Casoprctico

Vaya! exclama Mara No consigo encontrar la clase Persona


dentrodelconjuntodeclasesquehastaahorahecreado.

Por qu no pruebas a dividir las clases en paquetes? pregunta


Juan.Enunpaqueteagrupaslasqueestnrelacionadas,yaste
sermsfcilencontrarunaclaselaprximavez.Ademspuedes
crear paquetes dentro de otros, como si fuera una estructura de
directorios.

Ah s? Pues es justo lo que necesito para resolver este


desorden.VoyaponermeconelloaadeMara.
JJMerelo

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.

Los paquetes se declaran utilizando la palabra clave package seguida del


nombre del paquete. Para establecer el paquete al que pertenece una clase
hayqueponerunasentenciadedeclaracincomolasiguientealprincipiode
laclase:

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

6.1. Sentencia import.


Cuando queremos utilizar una clase que est en un paquete distinto a la
clase que estamos utilizando, se suele utilizar la sentencia import. Por
ejemplo, si queremos utilizar la clase Scanner que est en el paquete
java.util de la Biblioteca de Clases de Java, tendremos que utilizar esta
sentencia:

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

6.2. Compilar y ejecutar clases con paquetes.


Hasta aqu todo correcto. Sin embargo, al trabajar con paquetes, Java nos
obligaaorganizarlosdirectorios,compilaryejecutardeciertaformaparaque
todofuncioneadecuadamente.

Si hacemos que Bienvenida.java pertenezca al paquete ejemplos, debemos


crearunsubdirectorio"ejemplos"ymeterdentroelarchivoBienvenida.java.

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

6.3. Jerarqua de paquetes.


Para organizar mejor las cosas, un paquete tambin puede contener otros
paquetes. Es decir, podemos hacer subpaquetes de los paquetes y
subpaquetes de los subpaquetes y as sucesivamente. Piensa que
internamente Java asocia una carpeta a cada paquete, as que podemos
tener cualquier jerara que paquetes, de la misma forma que podemos tener
cualquier jerarqua de carpetas. Esto permite agrupar paquetes relacionados
en un paquete ms grande. Por ejemplo, si quiero dividir mis clases de
ejemplos en ejemplos bsicos y ejemplos avanzados, puedo poner ms
nivelesdepaquetesseparandoporpuntos:

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

6.4. Libreras Java.

Cuando descargamos el entorno de compilacin y ejecucin de Java,


obtenemos la API de Java. Como ya sabemos, se trata de un conjunto de
bibliotecas que nos proporciona paquetes de clases tiles para nuestros
programas.

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

7. Programacin de la consola: entrada y


salida de la informacin.

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

Los programas a veces necesitan acceder a los recursos del sistema,


como por ejemplo los dispositivos de entrada/salida estndar, para
recogerdatosdetecladoomostrardatosporpantalla.

EnJava,laentradaportecladoylasalidadeinformacinporpantallase
hacemediantelaclaseSystemdelpaquetejava.langdelaBibliotecade
ClasesdeJava.

Como cualquier otra clase, est compuesta de mtodos y atributos. Los


atributosdelaclaseSystemsontresobjetosqueseutilizanparalaentradaysalidaestndar.Estosobjetossonlos
siguientes:

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

7.1. Conceptos sobre la clase System.


La lectura por teclado es muy importante cuando empezamos a hacer
nuestros primeros programas. Para entender mejor en qu consiste la
clase System, y en particular el objeto System.in vamos a describirlo
msdetenidamente.

En el apartado anterior hemos dicho que System.in es un atributo de


laclaseSystem,queestdentrodelpaquetejava.lang.Peroadems,
siconsultamoslaBibliotecadeClasesdeJava,nosdamoscuentaque
es un objeto, y como todos los objetos debe ser instanciado. En FlorMoncada.Capturadepantallade
lawebdeOracle.(cita)
efecto,volviendoaconsultarlabibliotecadeclasesnosdamoscuenta
queSystem.inesunainstanciadeunaclasedeJavaquesellamaInputStream.

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.

La forma de instanciar estas clases para usarlas con System.in es la


siguiente:

InputStreamReaderisr=newInputStreamReader(System.in)
BufferedReaderbr=newBufferedReader(isr)

En el cdigo anterior hemos creado un InputStreamReader a partir de


System.in y pasamos dicho InputStreamReader al constructor de
BufferedReader. El resultado es que las lecturas que hagamos con el objeto br son en realidad realizadas sobre
System.in, pero con la ventaja de que podemos leer una lnea completa. As, por ejemplo, si escribimos una A,
con:

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

7.2. Entrada por teclado. Clase System.

A continuacin vamos a ver un ejemplo de cmo utilizar la clase System para la


entradadedatosportecladoenJava.

Como ya hemos visto en unidades anteriores, para compilar y ejecutar el ejemplo


puedesutilizarlasrdenesjavacy java,obiencrearunnuevoproyectoenNetbeans
ycopiarelcdigoqueseproporcionaenelarchivoanterior.

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

7.3. Entrada por teclado. Clase Scanner.


Laentradaportecladoquehemosvistoenelapartadoanteriortieneel

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()

En las instrucciones anteriores hemos creado un objeto de la clase Scanner


llamadotecladoutilizandoelconstructordelaclase,alcuallehemospasado
comoparmetrolaentradabsicadelsistemaSystem.inquepordefectoest
asociadaalteclado.

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

7.4. Salida por pantalla.


La salida por pantalla en Java se hace con el objeto System.out. Este
objeto es una instancia de la clase PrintStream del paquete java.lang.
SimiramoslaAPIdePrintStreamobtendremoslavariedaddemtodos
paramostrardatosporpantalla,algunosdeestosson:

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

7.5. Salida de error.


La salida de error est representada por el objeto System.err. Este objeto es
tambinunainstanciadelaclasePrintStream,porloquepodemosutilizarlos
mismosmtodosvistosanteriormente.

La separacin o diferencia entre la salida estndar y la de error se puede


utilizar para redirigir los mensajes de error a un lugar diferente que los
mensajesnormales.

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

Clase. Relacin. Funcin.

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.

Pero esto qu es? Se lo debera preguntar a Juan ahora, o


estardurmiendoylomolestar?Nossipodraguantarhasta
maana,...piensaMara.

AdolfoLlopisIbaez

Has odo alguna vez la mxima de que en la definicin no debe usarse lo


queseintentadefinir?Parecelgicoquesimepidendefinirloqueesun
ordenador, decir que es una especie de ordenador que permite, no
aportamuchainformacin,noeslamejormaneradeempezarladefinicin.

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

8.1. Concepto de Recursividad.


El concepto suele entenderse mejor con el ejemplo del clculo del factorial
de un nmero. El factorial de un nmero entero positivo n se representa
comon!(queseleecomonfactorial)

Sabemos que dado un nmero entero positivo, el factorial se puede definir


dedosformas:

Definicin Iterativa. Como el producto de todos los nmeros enteros


comprendidosentre1yelpropionmero:
BlancaEgea
n != n*(n1)*(n2)**3*2*1. Adems, por convenio, para extender la
definicintambinalcero,sedefine:0!=1

Para calcular el factorial de esta forma, tenemos que repetir un ciclo en el que se vaya acumulando el
productodelnmeroporelanterior,hastaquelleguemosauno.

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

8.2. Recursin frente a iteracin.


Enelcasodelfactorialhemosvistoquehabadosposiblessoluciones,una
iterativayotrarecursiva.

Siempre va a existir una solucin iterativa o hay casos en los que


obligatoriamentetendremosqueusarrecursividad?

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).

Cadavezquesehaceunanuevallamadaalmtodorecursivo,esnecesarioguardarenla pila(stack) todos los


datos de la llamada anterior que an no ha terminado (todas las variables de memoria que tenga definidas el
mtodo),loqueseconocecomoentornovoltildeesaejecucin.

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

8.3. Ejemplos de uso.


Verdad que algn ejemplo de programa recursivo ayudara a entender mejor estos
conceptos?

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?

Porque es el ms simple de todos, y el que ms ayuda a aclarar los


conceptos.

Presentaremos tanto una solucin iterativa, como una solucin


recursiva.

Primero te recomendamos que veas el cdigo de la versin iterativa.


Como puedes observar, esta solucin es totalmente clara, y al ser ms
eficiente,serpreferiblealasolucinrecursiva.

Ejercicioresueltofactorialiterativamente (2KB)

A continuacin aparece el enlace a la versin recursiva. Como ves, es Kuco


una solucin elegante, que ayuda a comprender el concepto de
recursividad,peroquenoaportaclaridadnisencillez,porloquealsermenoseficientequelasoluciniterativa,no
seraadecuadousarrecursividadenestecaso.

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

8.3.2. Serie de Fibonacci.


Empiezas a ver claras las diferencias entre un buen uso de la
recursividad y un mal uso? El ejemplo de la sucesin de Fibonacci
ponedemanifiestomsan,esasdiferencias.

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.

La funcin Fibonacci calcula el valor del trmino nsimo de la east_mountain


sucesindeFibonacci,enlaqueelprimertrminoes0,elsegundo1
y a partir de ah, cada nuevo trmino se calcula como la suma de los dos inmediatamente anteriores. Puede
tambininicializarselosdosprimerostrminosconotrosvalores,peroloquenocambiaeslaformadeobtenerlos
sucesivostrminos.

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

8.3.3. Mximo comn divisor.


Necesitasalgnejemplomsparaaclarartelasideas?

ste es otro caso en el que la solucin iterativa sera ms eficiente, y


por tanto preferible: el clculo del mximo comn divisor de dos
nmeros por el algoritmo de Euclides. No aporta por tanto ninguna
novedad, salvo la de comprobar que casi cualquier algoritmo iterativo
puede tener una versin recursiva, y mostrar un ejemplo ms de
problemarecursivo.

El clculo del mximo comn divisor de dos nmeros enteros por el


algoritmodeEuclides,consisteen:

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

You might also like