Está en la página 1de 49

PROGRAMACIN

Tema 4
Tem
Programacin Basada
en Objetos
IES Trassierra
Dpto. Informtica

ndice de contenidos
Introduccin.
Lenguaje de modelado unificado: UML.
Programacin basada en objetos:
Creacin de clases propias.
PROGRAMACIN

Instanciacin de objetos.
Miembros de clase estticos.
Paquetes (packages) de clases.

Objetivos del tema


Profundizar en los conceptos de orientacin a
objetos vistos en temas anteriores.

PROGRAMACIN

Identificar y crear de forma correcta las posibles


clases de una aplicacin, a partir del enunciado de
requisitos de la misma.
Identificar y establecer las distintas relaciones
que puedan existir entre las clases de una
aplicacin, a partir de su enunciado de requisitos.
Introducir en el uso de herramientas grficas de
modelizacin de clases mediante UML.
Usar de forma correcta determinadas clases del
API de Java.
Crear aplicaciones robustas, en las que se haga un
uso correcto de objetos como instancias de clases.

Introduccin

PROGRAMACIN

Al construir aplicaciones centramos nuestra


atencin en las entidades del mundo real sobre las
que se van a realizar los clculos y manipulaciones.
Lo que se denomina dominio del problema.
Las entidades reales presentan dos caractersticas
que las definen: un estado y un comportamiento.
En la orientacin a objetos, cada entidad relevante
para la aplicacin tiene su objeto software
equivalente.
En los objetos software, el estado del mismo se
representa mediante uno o ms atributos, mientras
que el comportamiento se implementa mediante
mtodos. Tanto unos como otros reciben el nombre
de miembros.

Introduccin 2
En orientacin a objetos, cada concepto o entidad
del mundo real se traduce, a nivel de cdigo, en una
clase.

PROGRAMACIN

Cada objeto software es una instancia de una clase


particular.
Se pueden instanciar uno o varios objetos de una
clase dada, pudiento tener cada uno de ellos un
estado o valor de los atributos distinto.
Una clase podramos asimilarla a una plantilla o
molde que nos permite crear objetos de un tipo
particular.
Se definen los atributos que tendrn las instancias
y objetos, junto con los mtodos que manejaran los
mismos.

Introduccin 3

PROGRAMACIN

Al crear o instanciar un objeto, adems de darle un


identificador apropiado, se le darn valores a
determinados atributos del mismo.
Distintos objetos de una misma clase se
diferenciarn a travs del propio identificador de
cada objeto y por los valores que cada uno de ellos
tenga para sus atributos.
Una clase es un modelo de lo que representa del
mundo real y, por tanto, no es una copia fiel del
mismo, sino que se trata de una abstraccin.
Slo tomaremos aquellas caractersticas
comportamientos que sean pertinentes a
aplicacin que estemos desarrollando.

y
la

Introduccin 4

PROGRAMACIN

Por ejemplo, si en una aplicacin deseramos


modelizar los camiones de una empresa de
transportes, podramos crear una clase llamada
"Camin",
con
las
caractersticas
y
comportamientos que se muestran en el grfico.
Clase o modelo

Camin real

Objeto 1
Marca: Pegaso
Modelo: Ultima
Matrcula: SE-1089-BD
Velocidad: 20
Peso_carga: 8000

Objeto 2
Objeto 3

Marca: Renault
Modelo: Grand
Matrcula: 8990BDA
Velocidad: 10
Peso_carga: 10000

Marca: Ford
Modelo: Plymouth
Matrcula: M-2338-XM
Velocidad: 15
Peso_carga: 12000

Introduccin 5
El concepto de clase es sinnimo al de TAD o Tipo
Abstracto de Dato.

PROGRAMACIN

Un TAD permite encapsular en una misma unidad o


mdulo los datos y las operaciones que acceden a
los mismos.
En un TAD los datos internos no son accesibles
directamente sino que se tiene que usar lo que se
denomina interfaz del mismo, que se implementa
mediante determinadas operaciones bien definidas.
As, en un TAD los cambios en la representacin de
los datos internos no afecta al resto de la
aplicacin, slo al propio mdulo.
Una clase, por tanto, permite nuevos tipos de datos
y es la unidad modular bsica en al POO.

Introduccin 6

PROGRAMACIN

Encapsular atributos y mtodos en una clase,


permite ocultar su implementacin a otras clases, el
lo que se denomina ocultacin de la informacin.
En una aplicacin normalmente existirn objetos
pertenecientes a ms de una clase, entre las cuales
pueden establecerse determinadas relaciones.
Para ayudar a identificar las distintas clases que
pueden intervenir en un aplicacin dada, partiendo
del documento de requisitos de la misma, podremos
usar las siguientes reglas:
Las clusulas nominales pueden representar
bien clases o atributos de clases.
Los
verbos
pueden
representar
comportamientos o relaciones entre clases.

Lenguaje de Modelado Unificado

PROGRAMACIN

UML es un lenguaje que permite modelar, construir


y documentar los elementos integrantes de un
sistema software orientado a objetos.
Se ha convertido en el estndar de la industria,
sobre todo debido a que fu concebido por los
autores de los tres mtodos ms usados de
orientacin a objetos: Grady Booch, Ivar Jacobson
y Jim Rumbaugh.
El objetivo principal es posibilitar el intercambio de
modelos entre las distintas herramientas CASE
orientadas a objetos del mercado. Para ello era
necesario definir una notacin y semntica comn.
El estndar UML no define un proceso de
desarrollo especfico, tan solo es de una notacin.

Lenguaje de Modelado Unificado 2


Uml se compone de diversos elementos grficos
que, de acuerdo a una serie de reglas, se combinan
para conformar diagramas.

PROGRAMACIN

Los diagramas UML ms comunes son:


Diagrama de clases: Muestra las clases de
nuestra aplicacin junto a sus relaciones.
Diagrama de objetos: Muestra un conjunto de
objetos en un momento particular de la
ejecucin de la aplicacin.
Diagrama de casos de uso:Muestra las
posibles acciones de un sistema desde el punto
de vista del usuario.
Diagrama de estado: Representa la forma
como se comporta un sistema.

Lenguaje de Modelado Unificado 3


Diagrama de secuencias: Muestra la mecnica
de comportamiento temporal del sistema.

PROGRAMACIN

Diagrama de actividades: Muestra la secuencia


de actividades dentro de un caso de uso o en el
comportamiento de un objeto.
Diagrama de colaboracin: Muestra como
trabajan en conjunto los objetos de un sistema
para cumplir con los requerimientos.
Diagrama de componentes: Muestra los
componentes software de nuestra aplicacin.
Diagrama
de
distribucin: Muestra la
arquitectura fsica de un sistema informtico.
Nos centraremos,
diagramas de clase.

fundamentalmente

en

los

UML: Diagrama de clases 1


Una clase se representa mediante una caja dividida
en tres compartimientos:
El superior para el nombre de clase.
El intermedio para los atributos.
PROGRAMACIN

El inferior para las acciones o comportamientos.


Tambin podemos representar una clase de forma
resumida mostrando slo el nombre de la misma.
Clase completa

Clase abreviada

UML: Diagrama de clases 2


Tanto los atributos como los mtodos de una clase
pueden tener tres tipos de mbito o visibilidad.

PROGRAMACIN

Private: Slo est disponible o visible dentro de


la propia clase. Se antepone un signo "-".
Protected: Estar disponible dentro de la clase
y para todas las subclases de la misma. Se
antepone un signo "#".
Public: Estar disponibles para todas las clases
de nuestra aplicacin. Se antepone un signo "+".
Como regla general los miembros de una clase que
no vayan a ser usados desde el exterior de la misma
sern declarados como private.
Los atributos se declararn como private.

UML: Asociaciones 1
Las clases se pueden relacionar mediante
asociaciones, las cuales se representan mediante
lneas que las unen.

PROGRAMACIN

Las asociaciones pueden tener un nombre opcional y


ser dirigidas hacia donde podr leerse su nombre.

UML: Asociaciones 2
Las asociaciones pueden restringidas mediante la
multiplicidad, que limita el nmero de instancias de
una clase que pueden tener esa asociacin con una
instancia de la otra clase.
PROGRAMACIN

Puede expresarse de las siguientes formas:


Un nmero fijo.
Un intervalo o rango de valores, expresado por
dos nmeros separados por dos puntos "..".
Un rango de valores en el que uno de los
extremos es un "*", expresando desde el primer
nmero o ms.
Una combinacin de elementos separados por
comas.
Un "*", indicando cualquier valor.

UML: Asociaciones 2

PROGRAMACIN

Las multiplicidades se muestran en ambos extremos


de la asociacin, junto a cada clase de la misma.
Se puede indicar el papel que juega una clase en la
asociacin especificando un nombre de rol, que se
representa en el extremo de la asociacin junto a la
clase que desempee dicho rol.

UML: Asociaciones 4

PROGRAMACIN

Las asociaciones pueden tener, al igual que las


clases, atributos y operaciones. Si este es el caso,
tendremos lo que se denomina una Clase de
asociacin.
Las clases de asociacin se conectan con una
asociacin mediante una lnea discontnua y pueden
asociarse, a su vez, con otras clases.

UML: Agregacin

PROGRAMACIN

Se dice que una clase es agregada, cuando se


compone de otras clases.Las clases componentes y
la clase que constituyen son una asociacin que
forma un todo.
Se usa una lnea entre el componente y el todo con
un rombo sin relleno en el extremo del todo.

UML: Composicin
La composicin es un tipo especial de agregacin, en
la que el todo "posee" a las partes.

PROGRAMACIN

Las partes "viven" dentro del todo y se destruyen


junto con este.
Su smbolo es igual que el de la agregacin, pero el
rombo estar relleno.

UML: Dependencias
Se dice que se produce una relacin de depencia
entre dos clases si una de ellas utiliza a la otra.

PROGRAMACIN

Se simboliza por una flecha con lnea discontnua,


que va desde la clase que utiliza a la utilizada.

Programacin basada en objetos

PROGRAMACIN

Hasta ahora hemos visto varios conceptos


relacionados con la POO en Java, aunque slo hemos
usado una sla clase en nuestros programas.
Los programas Java suelen constar de ms de una
clase definida por el programador, as como hacer
uso de las clases predefininas en el API de Java.
Ya hemos usado algunas clases del API de Java,
como la clase BufferReader o las clases de
envoltura de tipos bsicos: Integer, Float, Double.
Ya hemos visto que para identificar las clases de
nuestras aplicaciones podremos usar:
Los nombres identifican a clase o atributos.
Los verbos identifican
comportamientos

relaciones

Creacin de clases

PROGRAMACIN

En una clase se declaran tanto los atributos, o


representacin interna los objetos de la misma,
como las operaciones que accedern a esos datos,
los mtodos.
Tanto atributos como mtodos constituyen los
miembros de una clase.
Para ilustrar la creacin de clases en Java,
definiremos una clase denominada Fecha, con los
atributos Dia, Mes y Anio todos ellos de tipo int. La
clase permitir la asignacin de datos a esos
atributos en el momento de la creacin, validndose
los mismos. Si no son correctos se asigna un valor
igual a 1 por defecto. La clase permitir devolver la
fecha contenida en formato "dd/mm/aaaa".

Creacin de clases 2
publicclassFecha{
privateintdia;//131enfuncindelMes
privateintmes;//112
privateintanio;//cualquierao
publicFecha(intdia_i,intmes_i,intanio_i){
// constructor:LlamaalmtodomodificadorsetFecha
setFecha(dia_i,mes_i,anio_i);
}//findelconstructordeFecha

PROGRAMACIN

publicintgetAnio(){
returnanio;
}
privateintcomprobarMes(intmes){
//mtodoutilitarioparaconfirmarelvalorapropiadodelMes
if(mes>0&&mes<=12)//validarMes
returnmes;
else{//Mesesinvlidoseestablecea1
return1;
}
}//findelmtodocomprobarMes
privateintcomprobarDia(intdia){
//mtodoparaconfirmarvalorapropiadodeDia,conbaseenMesyAnio
intdias_por_mes[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//comprobarsielDiaestdentrodelrangodelMes
if(dia>0&&dia<=dias_po_mes[mes])
returndia;
//comprobarsiesaobisiesto
if(mes==2&&dia==29&&(anio%400==0||
(anio%4==0&&anio%100!=0)))
returndia;
//Eldanoesvlidoyloponemosa1
return1;
}//findelmtodocomprobarDia

publicStringcadenaFecha(){
//devolverunStringdelaformada/mes/ao
returndia+"/"+mes+"/"+anio;
}//findelmtodocadenaFecha
publicvoidsetFecha(intdia_i,intmes_i,intanio_i){
//llamaacomprobarMesycomprobarDiaparaconfirmarelvalorapropiadodeMesyDia
mes=comprobarMes(mes_i);//validarMes
anio=anio_i;
dia=comprobarDia(dia_i);//validarDia
}
}

Creacin de clases 3
Detrs de la palabra clave class escribimos el
nombre de la clase y a continuacin entre llaves los
atributos y mtodos.

PROGRAMACIN

La clase de ejemplo tiene tres atributos: dia, mes y


anio, todos ellos de tipo entero.
Los atributos pueden ser de tipo primitivo o bsico
o bien referencias a otros tipos de objetos.
La clase Fecha tiene 5 mtodos.
Uno de ellos cadenaFecha() es un mtodo
consultor, ya que informa del estado del objeto
sobre el que acta, pero no modifica su estado.
Otro setFecha(...) es un mtodo modificador,
ya que permite modificar los atributos del
objeto actual.

Creacin de clases 4

PROGRAMACIN

Existen otros dos mtodos comprobarDia(...) y


comprobarMes(...) que sirven para tareas de
comprobacin de la validez de la fecha y se
denominan mtodos de utilidad.
El mtodo que queda por analizar es el
denominado constructor. El constructor no
tiene tipo de retorno y debe llamarse igual que
la clase a la "construye".
Los atributos deben definirse fuera de cualquier
mtodo de la clase.
No tiene ninguna importancia el orden en el que se
definan atributos y mtodos, pero es conveniente
comenzar
definiendo
los
atributos
y
posteriormente los mtodos.

Creacin de clases 5

PROGRAMACIN

Los mtodos, salvo el constructor, deben declarar


un valor de retorno y a continuacin del nombre se
declaran los parmetros formales, separados por
comas.
En Java podemos sobrecargar las operaciones o
mtodos, lo que significa que podremos declarar en
una misma clase dos o ms mtodos con el mismo
nombre y tipo de devolucin, pero con distintos
parmetros formales.
La clase y sus miembros pueden tener
determinados modificadores que afectan a su
funcionamiento: public, private, protected, static,
synchronized y final, algunas de las cuales veremos
ms adelante.

Referencias a objetos

PROGRAMACIN

Para definir una variable de referencia a una clase,


tendremos que especificar el nombre de la clase
seguido de un identificador o identificadores.
Un objeto es una zona de memoria donde se
guardan datos con una cierta estructura definida
por la clase del objeto.
En realidad las variables para tipos no primitivos no
son realmente objetos, sino referencias a objetos o
punteros.
Toda referencia a objeto es inicializada a null y no
apunta a ningn objeto hasta que le demos una valor
concreto mediante una asignacin.
Para desreferenciar una variable la igualaremos a
null.

Referencias a objetos e
instancias

PROGRAMACIN

Podemos igualar una variable de referencia a otra,


en cuyo caso ambas variables apuntaran al mismo
objeto.
Para instanciar un objeto al cual poder referenciar
usaremos el operador new, tras el cual aparecer el
constructor del objeto, con sus posibles
parmetros entre parntesis separados por comas.
Podremos inicializar a una variable referencial en el
momento de su declaracin o posteriormente.
ParalaclaseFechadefinidaanteriormente,crearemosvariasinstancias:
//Estaprimerareferenciaseinicializaenlamismadeclaracin.
Fechafecha_nacimiento=newFecha(10,12,1978);//llamamosalconstructor.
//DeclaramosunavariabledereferenciaaunobjetoFecha
Fechafecha_contrato;//Porahoravalenull
//Asignamosunnuevoobjetoalavariableanterior.
fecha_contrato=newFecha(03,10,1990);//llamamosalconstructor.

Acceso a miembros
Los modificadores public y private controlan el
acceso de los atributos y mtodos de una clase.

PROGRAMACIN

Un miembro public ser accesible desde cualquier


punto de nuestra aplicacin.
Un miembro private ser accesible slo dentro de
la propia clase.
El principal propsito de los mtodos public es
presentar a los clientes de una clase una visin de
los servicios que la clase proporciona, lo que se
denomina interfaz pblica de la clase.
El resto de mtodos de nuestra clase y los
atributos debern ser declarados como private, de
forma que ocultemos los detalles de implementacin
de la clase al exterior.

Acceso a miembros 2

PROGRAMACIN

Dentro de una clase podemos acceder a sus


miembros
dirctamente
a
travs
de
su
identificador, sin importar el modificador de
acceso utilizado.
Todo objeto puede hacer referencia a si mismo
usando la palabra clave this.
En los mtodos de una clase en los que se declaren
variables o parmetros con identificadores
idnticos a los de los atributos de la misma slo se
podr acceder a estos usando la referencia this. Es
conveniente evitar esta circunstancia.
Desde fuera de la clase podremos acceder slo a
los miembros pblicos a travs de una variable de
referencia a un objeto de la misma.

Acceso a miembros 3
La referencia a objeto podr ser la palabra clave
this o una variable referencial creada al efecto.
El formato de este tipo de acceso
referenciaAobjeto.identificadorMiembro.

sera

PROGRAMACIN

Ejemplo: Usando la clase Fecha definida anteriormente, el siguiente programa crea una
instanciadelamismayaccedealosmiembrospblicosdelobjetocreado,
publicclassPruebaFecha{
publicstaticvoidmain(String[]args){
Stringsalida;//Cadenaquecontendrlasalidadelprograma.
//Creamosunavariabledereferenciaafechaylaigualamos
//aunobjetoFechaquecreamosalefecto.
Fechanacimiento=newFecha(10,12,1976);
//AadimosalacadenadesalidalafechainvocandoelmtodopblicocadenaFecha()
salida="Lafechadenacimientoes:"+nacimiento.cadenaFecha()+"\n";
//Cambiamoslafechacontenidamediantelallamadaalmtodo
//modificadorsetFecha(...)
nacimiento.setFecha(23,5,1989);
//AadimosalacadenadesalidaelcontenidomodificadodelobjetodetipoFecha.
salida+="Lanuevafechaes:"+nacimiento.cadenaFecha()+"\n";
//Mostramoslacadenadesalidamedianteunaventanagrfica
JOptionPane.showMessageDialog(null,salida,"Ejemplodeaccesoamiembrosdeobjetos",
JoptionPane.WARNING_MESSAGE);
//Lasiguienteinstruccinprovocaraunerror,yaqueseintentaaccederaun
//miembroprivadodelobjeto.
nacimiento.dia=12;//Errordeaccesoaunmiembroprivadodelobjeto
}
}

Mtodos constructores

PROGRAMACIN

Toda clase tiene que tener al menos un mtodo


constructor, cuyo nombre sea igual de la propia
clase y sin valor de retorno. Suelen ser definidos
como public.
El cometido es inicializar cada atributo a un valor
determinado para cada objeto que se instancie.
Si no se especifica ningn constructor, se toma uno
por defecto definido en la clase Object, que no
tiene parmetros e inicializa los atributos
numricos a 0, los carcter a "\u0000", los
booleanos a false y los de tipo referencial a null.
Es conveniente definir de forma explcita un
mtodo constructor en el cuerpo de la clase, que
asigne a todos los atributos valores vlidos.

Mtodos constructores 2

PROGRAMACIN

Es muy habitual la sobrecarga en los mtodos


constructores, que permiten inicializar los objetos
de una clase de diferentes formas.
Tratar de declarar un valor de retorno para un
constructor o devolver un valor en un constructor
es un error.
Java permite que algunos mtodos tengan idntico
nombre que la clase y que los mismos puedan
devolver un valor determinado, pero dichos
mtodos no son constructores.
Slo podremos invocar a un constructor sin
argumentos si no hemos definido ningn
constructor para nuestra clase o si explcitamente
hemos definido uno sin parmetros.

Sobrecarga de constructores

PROGRAMACIN

Si sobrecargamos los constructores de una clase,


podremos usar this con una serie de parmetros en
la primera lnea de cada constructor, para invocar
aquel que posea el nmero y tipo de parmetros
especificados.
Este comportamiento del operador this slo puede
ser utilizado desde un constructor.
Un constructor puede llamar a otros mtodos de la
clase, pero se tiene que usar con prudencia, ya que
en un constructor el objeto est en estado de
inicializacin.
Veamos un ejemplo de mtodos sobrecargados para
la clase fecha dada anteriormente, donde se hace
uso de las caractersticas mencionadas.

Sobrecarga de constructores 2

PROGRAMACIN

Ejemplo:
UsandolaclaseFechadefinidaanteriormente,sobrecargaremoslosmtodos
constructorescreando,juntoalconstructorcontresargumentosoriginal,
tres versiones adicionales del mismo: una sin argumentos, otra con un
argumentoyotramscondosargumentos.
Estos nuevos constructores sobrecargados llaman al constructor de tres
argumentosusandolareferenciathisalaqueselepasan3parmetros.
publicFecha(intdia_i,intmes_i,intanio_i){
// constructor:LlamaalmtodomodificadorsetFecha
setFecha(dia_i,mes_i,anio_i);
}//findelconstructordeFechacontresparmetros
publicFecha(){
//Constructorsinargumentos
this(1,1,2005);//Sellamaalconstructorcon3argumentos
}
publicFecha(intdia_i){
//Constructoralqueselepasasloelda
this(dia_i,1,2005);//Sellamaalconstructorcon3argumentos
}
publicFecha(intdia_i,intmes_i){
//Constructoralqueselepasaeldayelmes
this(dia_i,mes_i,2005);//Sellamaalconstructorcon3argumentos
}

Asignacin y comparacin

PROGRAMACIN

Cuando realizamos asignaciones de tipos no


primitivos, en realidad estamos asignando punteros
o referencias a objetos, con lo que obtendremos
dos referencias al mismo objeto.
Cuando usamos el operador de comparacin == con
dos variables de tipo primitivo, estamos
comparando dos referencias a objeto, con lo que
dicha comparacin ser true slo si ambas variables
son referencias al mismo objeto.
Si deseramos poder comparar dos objetos de una
misma clase para ver si todos sus atributos son
idnticos, tendremos que redefinir el mtodo
equals de la clase Object para que realice
correctamente la comparacin.

Copia de objetos

PROGRAMACIN

Cuando pasamos una referencia a objeto como


parmetro a un mtodo, se crea una copia de la
misma que apunta al objeto original.
Si a travs de la nueva referencia se invoca algn
mtodo modificador del objeto, para modificar
alguno de los atributos del mismo, cambiaremos el
estado del objeto inicial.
Si queremos prevenir este posible efecto,
tendremos que crear una copia del objeto original y
pasar una referencia a esa copia en su lugar.
Para crear una copia podremos redefinir el mtodo
clone de la clase Object, para que cree un nuevo
objeto de la misma y le asigne a sus atributos los
valores del original.

Ejemplo de copia y comparacin


Ejemplo: Para la clase Fecha, redefiniremos los mtodos clone y equals para que realicen
correctamentesustareas.Paraelloaadiramoslossiguientesdosmtodos:
publicbooleanequals(Fechacomp){
//Mtodoquedevuelvetruesitodoslosatributosdedosobjetosfechasoniguales
if(this.dia==comp.dia&&this.mes==comp.mes&&this.anio==comp.anio)
returntrue;
else
returnfalse;
}

PROGRAMACIN

publicObjectclone(){
//Mtodoquerealizaunacopiadelobjetoactual.
returnnewFecha(this.dia,this.mes,this.anio);
}

ElsiguienteprogramautilizalasnuevasfuncionalidadesaadidasalaclaseFecha,creando
unacopiadeunobjetoycomparandoelmismoconeloriginal
publicclassPruebaFecha{
publicstaticvoidmain(String[]args){
Stringsalida;//Cadenaquecontendrlasalidadelprograma.
//Creamosunavariabledereferenciaafechaylaigualamos
//aunobjetoFechaquecreamosalefecto.
Fechacopia,nacimiento=newFecha(10,12,1976);
//AadimosalacadenadesalidalafechainvocandoelmtodopblicocadenaFecha()
salida="Lafechadenacimientoes:"+nacimiento.cadenaFecha()+"\n";
//Cambiamoslafechacontenidamediantelallamadaalmtodo
//modificadorsetFecha(...)
nacimiento.setFecha(23,5,1989);
//AadimosalacadenadesalidaelcontenidomodificadodelobjetodetipoFecha.
salida+="Lanuevafechaes:"+Nacimiento.cadenaFecha()+"\n";
//ClonamoselobjetoreferenciadoporNacimientoenCopia
copia=(Fecha)nacimiento.clone();
//AadimosalacadenadesalidaelcontenidodeCopiayelresultadodelallamadaaequals
Salida+="Lafechaclonadaes:"+copia.cadenaFecha()+"\n";
Salida+="Salidadelmtodoequals:"+copia.equals(nacimiento);
//Mostramoslacadenadesalidamedianteunaventanagrfica
JOptionPane.showMessageDialog(null,salida,"Ejemplodeaccesoamiembrosdeobjetos",
JOptionPane.WARNING_MESSAGE);
}
}

Destruccin de objetos

PROGRAMACIN

En la mayora de lenguajes debemos cuidarnos de


liberar los recursos que vamos reservando
dinmicamente durante de una ejecucin.
Para liberar los recursos se suele dotar al TAD,
clase en nuestro caso, de un mtodo destructor
que libere los recursos usados por el mismo una vez
estemos seguros que no vamos a volver a necesitar
el objeto.
En Java todo esto no es necesario ya que la JVM
lleva la cuenta de las referencias que apuntan a
cada objeto de nuestra aplicacin.
Cuando un objeto no es apuntado por ninguna
referencia ya no podremos acceder ms al mismo, la
JVM lo marca para eliminacin.

Destruccin de objetos 2

PROGRAMACIN

Cada cierto tiempo, los objetos marcados para


eliminacin son liberados de forma automtica por
la JVM por medio del recolector de basura.
La recoleccin automtica de basura ahorra tener
que preocuparnos por liberar la memoria que
reservamos dinmicamente y evita posibles errores
de programacin, as como un consumo intil de
memoria.
Pueden haber objetos que usen recursos que no son
memoria, por ejemplo un fichero. Esos recursos no
pueden ser "reciclados" de forma automtica y
debemos hacerlo de forma manual mediante el
mtodo finalize(), que se ejecutar cuando el
objeto sea reclamado por el recolector.

Miembros de clase estticos

PROGRAMACIN

En determinadas ocasiones es conveniente definir


atributos que no pertenezca a una instancia
particular de una clase.
Tambin puede ocurrir que para algunos mtodos no
dependa su comportamiento de la instancia sobre la
que se invoquen.
Son los que se denominan miembros de clase, en
contraposicin de los miembros de instancia que
hasta ahora se han visto.
Un atributo de clase es una propiedad de toda la
clase y no de un objeto en particular.
Una posible utilidad de un atributo de clase puede
ser para llevar la cuenta de las instancias de una
clase que se crean en la ejecucin de un programa.

Miembros de clase estticos 2

PROGRAMACIN

Se usar, por tanto, un atributo de clase cuando


todas las instancias de la misma deban compartir la
misma copia del atributo.
Para definir un atributo de clase, deberemos situar
la palabra clave static entre la declaracin de
visibilidad y el tipo del atributo.
Formato:
<visibilidad>static<tipo>nombre_atributo[=<Valorinicial>];
Ejemplo:
publicstaticintinstancias=0;//Atributodeclase

Un mtodo de clase o static ser aquel que no


opere sobre ninguna instancia de la clase. Esto
implica que no podr acceder a ningn atributo o
mtodo de instancia, slo a los static o a los
miembros de los objetos que se creen dentro del
propio mtodo o se pasen como parmetros.

Miembros de clase estticos 3

PROGRAMACIN

Para acceder a miembros de clase podremos usar la


misma forma usada para los miembros de instancia,
usando una referencia a objeto si lo intentamos
desde fuera de la clase.
Tambin pueden ser referenciados mediante el
nombre de la clase y no es necesario que se creen
instancias para estar disponibles.
Formatodeacceso:
Siexistenobjetosdeclase:
referencia_objeto.nombre_atributo_static;
referencia_objeto.nombreMetodoStatic(<listadeparmetros);
Siempresepuedeusarestetipodeacceso:
NombreClase.nombre_atributo_static;
nombreClase.nombreMetodoStatic(<listadeparmetros);

Un uso habitual de atributos static es para crear


constantes de clase en conjuncin con la palabra
clave final. En Java todas las constantes se definen
dentro de alguna clase como de tipo static.

Miembros de clase estticos 4

PROGRAMACIN

Cuando usemos atributos de clase de tipo contador


de instancias, los incrementaremos en una unidad
en el mtodo constructor de la clase y los
decrementaremos en el mtodo destructor o
finalize(), de forma que posea un valor consistente.
Ya hemos usado miembros de clase del API de
Java, como es el caso de las constantes y mtodos
static de la clase Math, como puede ser los
mtodos Math.pow(...) o Math.sqrt(...) y la
constante Math.PI.
Otro ejemplo de mtodos esttico es System.gc()
que invoca la ejecucin del recolector de basura del
sistema.

Paquetes de clases

PROGRAMACIN

Existe una forma en la que organizar el cdigo de


nuestros proyectos y componentes reutilizables: el
package o paquetes.
Las libreras de clases del API de Java se
encuentran organizadas en numerosos package. Por
ejemplo la clase Math se encuentra en el package
java.lang y la clase JoptionPane se encuentra en el
package javax.swing.
Los paquetes se organizan jerrquicamente, de
forma similar a los directorios de un sistema de
archivos.
La declaracin del paquete al que pertenece una
clase se realiza al inicio del fichero de cdigo
fuente de la misma

Paquetes de clases 2
Si para una clase no se declara un paquete se
supone que pertenece al paquete por defecto, que
se compone de todas las clase se que encuentren en
el directorio raz de la aplicacin.
PROGRAMACIN

Formatodedeclaracindepaqueteparaunaclase:
packagemiempresa[.proyecto[.subproyecto[...]]];
Se creara en el directorio raz de nuestra aplicacin una estructura de
directoriosdelaforma./miempresa/proyecto/subproyecto...
Las clases de ese paquete se almacenaran en el directorio final de la
jerarquadada.

Podremos usar clases de otros package siempre que


las califiquemos completamente con su camino en la
jerarqua
Tambin importandolas con la instruccin import,
que se situar tras la instruccin de definicin del
paquete, pudindose importar una sla clase o todas
las del paquete, lo que se indica terminado en "*".

Paquetes de clases 3
No es necesario importar el paquete java.lang ya
que est disponible siempre.

PROGRAMACIN

Los paquetes proporcionan un sistema de nombrado


nico de clases. No se permiten dos clases con el
mismo nombre dentro de un paquete.
Ejemplos:
//UsamoslaclaseJoptionPanecalificndolacompletamente.
javax.swing.JOptionPane.showMessageDialog(...);
//Importamostodoelpaquetejavax.swingyusamoslaclasesincalificador
importjavax.swing.*;
...
JoptionPane.showMessage(...);//usamodlaclasesintenerquecalicarla

Los miembros de una clase que no tengan una


visibilidad declarada, tendrn mbito de paquete,
por lo que para poder usar una clase desde fuera de
un paquete, tendr que ser declarada como public.
Los miembros protected de clases de un paquete
son accesibles al resto de clases del mismo.

Paquetes de clases 4
Una vez que una clase ha sido asignada a un paquete
y compilada, la misma puede ser importada en otros
proyectos.

PROGRAMACIN

Las clases de un mismo paquete no tienen que


importase.
La JVM usa el denominado cargador de clases para
localizar las clases que sean necesarias,
comenzando por las clases del API de Java.
Tambin buscar entre las clases que se
encuentren en las ubicaciones indicadas por la
variable
de
entorno
CLASSPATH
o
las
especificadas tras la opcin -classpath del comando
de ejecucin java.

También podría gustarte