You are on page 1of 12

Clases y Objetos (3)

2.
3.
4.

Presentacin basada en:


1.
Como Programar en Java. Deitel y Deitel. Ed. Prentice-Hall. 1988
Java 2., Curso de programacin. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003.
Apuntes del Curso Programacin Orientado a Objetos. Pablo Castells. Escuela Politcnica Superior,
Universidad Autonoma de Madrid.
Apuntes del Curso de java. Luis Hernndez y Carlos Cervign. Facultad de Informtica. Universidad
Catlica de Madrid.

Destruccin de objetos (I)

En Java es el sistema el que se encarga de destruir los objetos,


Liberando la memoria reservada para los objetos por medio del
Recolector de Basura (Garbage Collection)
GC libera la memoria de los objetos no referenciados en
ninguna parte

CuentaBancaria cuenta1 = new CuentaBancaria (5354,new


Cliente (Jaime Guzmn", 77666555),150000);
cuenta1.titular = new Cliente (Fernando Arango", 11222333);
Cliente
nombre Jaime Guzman
cedula
77666555

numero
titular
saldo

Cuenta1

CuentaBancaria
5354
150000

GC
Cliente
nombre Fernando Arango
cedula
11222333

Destruccin de objetos (II)

El GC acta cuando se suelta expresamente una referencia


cuenta1 = null;

numero
titular
saldo

CuentaBancaria
5354
150000

Cliente
nombre Fernando Arango
cedula
11222333

Cuenta1

Null

GC

Cuando ya no hay ninguna variable que haga referencia a un


objeto, bien directamente o bien mediante atributos de otros
objetos, entonces el recolector de basura sabe que puede
eliminar el objeto sin riesgos.

CuentaBancaria cuenta2 = cuenta1;


cuenta1 = null; // El objeto no se libera an

El Recolector de basura se puede solicitar explcitamente


mediante el comando: System.gc ();

Los Destructores
class Cliente {
...
protected void finalize () {
// Cdigo destructor aqu
}
}

Caractersticas

Se invocan automticamente antes de liberar la memoria de


los objetos
Permite liberar los recursos asociados a los objetos

Archivos abiertos, sockets, etc.

Asegura un estado consistente del programa tras


desaparecer un objeto
Limitacin en java

El programador no controla el instante en que se libera


memoria

Ejemplo (1)

Continua

Ejemplo (2)

Sin objetos
e1 y e2
Llamado
explcito del
gc

Ejemplo (3)

Por que?

Control de acceso(1)

Pblico y privado: las clases

Las clases por defecto son propias del paquete (package) en


el que estn definidas.

Para que se puedan usar en otros programas o paquetes se


deben declarar como pblicas, usando el modificador de acceso
public:

son conocidas en cualquier otra clase del mismo paquete, pero no se


podrn usar en otros programas o paquetes.

public class ...

Cada archivo fuente slo puede tener una clase pblica.

Lo normal es declarar cada clase en su propio archivo fuente.

Control de acceso(2)

Pblico y privado: Atributos y Mtodos (1)

Los atributos y los mtodos son, por defecto, conocidos en


todas las clases del paquete en el que se encuentra su
clase (tipo package).
A los atributos y los mtodos se les puede aplicar tanto el
modificador de acceso public como el modificador de
acceso private.
Un atributo o mtodo public se conocer en cualquier otro
programa o paquete, pudiendo ser entonces accedido por
medio de objetos de esa clase (con la notacin punto).
Un atributo o mtodo private slo se conoce en la propia
clase en la que est definido, pudiendo ser accedido tan
slo en ella.

Los mtodos sern pblicos si constituyen servicios que los


objetos proporcionan al exterior y privados si son funciones
auxiliares de la clase.

Control de acceso(3)

Ejemplo

Control de acceso(4)

Las directrices de la programacin


orientada a objetos nos aseguran un
menor riesgo de errores en los
programas si:

Los atributos se declaran siempre como


privados.
La manipulacin de los atributos se realiza,
consecuentemente, por medio de mtodos
(pblicos).

Control de acceso(5)

Como los atributos deben ser siempre privados, a


menudo necesitaremos ciertos mtodos que nos
permitan establecer u obtener los valores de los
atributos:

Accedente: mtodo que nos devuelve el valor de un


atributo.
Mutador: mtodo que nos permite ajustar el valor de un
atributo.
Nota: Normalmente tendremos un accedente y un mutador
por cada atributo. Aunque habr ocasiones en las que no
proceda que haya accedentes o (sobre todo) mutadores,
para evitar que el programador que use la clase pueda
alterar un valor que deba ser ajustado tan slo por la propia
clase.

La interfaz e Implementacin

La interfaz de la clase, est compuesto por todo lo


que puede ser utilizado en otras clases.

La interfaz viene dada por:

Todo lo que no es parte de la interfaz es parte de la


implementacin:

El nombre de la clase.
Las signaturas de los mtodos pblicos.

Los atributos.
Los mtodos privados.
Los cuerpos de todos los mtodos.

La implementacin no tiene por qu ser conocida


para poder utilizar la clase. Lo nico que
necesitamos conocer es la interfaz.

Ejemplo: Encapsulacin (1)

Ejemplo: Encapsulacin (2)

Un cdigo como este


no compilar:

Punto p;
p = new Punto();
p._x = 7; // ERROR

No se permite acceder
al atributo _x.

Hay que usar un


mutador:
p.x(7); // OK

Paquetes: empaquetado de clases

Son agrupaciones de clases, interfaces y otros paquetes


relacionados entre s, que favorecen la encapsulacin.

Todos los elementos contenidos en el archivo con la


declaracin anterior formarn parte del paquete
nombrePaquete.
Ejemplo

package nombrePaquete;

Se puede crear un paquete con la informacin relativa a la


matricula de alumnos, que incluyera alumnos, asignaturas, notas,
profesorado, horarios, etc.
Posteriormente se podran usar para diferentes aplicaciones de la
matricula: institutos, colegios, ...
package Matricula;

Paquete

class Alumno {}
class Asignatura {...}
...

Paquetes y directorios(1)

Nombre del package estructura de directorios


CLASSPATH: lista de directorios donde java busca packages

Packages importados automticamente:

java.lang
DefaultPackage
Package actual

Paquetes y directorios(2)

Para usar algn componente de un paquete hay que


aadir una declaracin de importacin, que puede
ser de un elemento o de todos los elementos.

Un solo elemento:
import Matricula.Alumno;
...
Alumno alumno1;
...

Se importa slo la clase Alumno

Todo el paquete sin cualificacin:


import Matricula.*;
...
Alumno alumno1;
...

Se importa todo y para usar los


elementos no es necesario
cualificarlos

Paquetes: ejemplo de
empaquetamiento

Se crea el directorio que va a contener clases (relacionadas):


cursojava
utils
teclado

Carpeta/package con utilidades


de lectura por teclado

En ese directorio se crean dos archivos, cada uno con una


clase til:
package cursojava.utils.teclado;
public class Clase01 {}

Archivo Clase01.java

package cursojava.utils.teclado;
public class Clase02 {}

Archivo Clase02.java

Al compilar dichos programa, se empaquetan dos clases .class


en el directorio teclado.

Paquetes: ejemplo

Si quiero usar dichas clases en cualquier otro


programa:
import cursojava.utils.teclado.*;
class PruebaPaq {
public static void main(String[] args){
Clase01 c= new Clase02();
Clase02 d=new Clase02()}
}

Puedo usar todas


las clases
pblicas del
package teclado

Cuando el compilador encuentra import, comienza a


buscar en los subdirectorio de CLASSPATH, y
encuentra \utils\teclado, porque

Ahora puedo utilizar las clases pblicas Clase01 y


Clase02.

CLASSPATH= C:\....

10

Paquetes predefinidos en java

java.applet
java.awt
java.awt.datatransfer
java.awt.event
java.awt.image
java.beans
java.io
java.lang
java.lang.reflect
java.math
java.net

java.rmi
java.rmi.dgc
java.rmi.registry
java.rmi.server
java.security
java.security.acl
java.security.interfaces
java.sql
java.text
java.util
java.util.zip

Paquetes:Control de acceso(1)

Pblico y privado: Atributos y Mtodos(1)

El ocultamiento dentro de clases y packages

11

Control de acceso(2)

Modalidades de ocultamiento de atributos


y mtodos de una clase
private
package
protected
public

Por
defecto
Por La
Herencia

Clase
X
X
X
X

Package

Subclase

Cualquiera

X
X
X

X
X

Modalidades de ocultamiento de clases:

public
package

Lecturas

Programacin basada en objetos.


Capitulo 6

Como Programar en Java. Deitel y Deitel.


Ed. Prentice-Hall. 1988

12

You might also like