Download Destrucción de objetos (I)

Document related concepts
no text concepts found
Transcript
Clases y Objetos (3)
2.
3.
4.
Presentación basada en:
1.
Como Programar en Java. Deitel y Deitel. Ed. Prentice-Hall. 1988
Java 2., Curso de programación. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003.
Apuntes del Curso Programación Orientado a Objetos. Pablo Castells. Escuela Politécnica Superior,
Universidad Autonoma de Madrid.
Apuntes del Curso de java. Luis Hernández y Carlos Cervigón. Facultad de Informática. Universidad
Católica de Madrid.
Destrucción 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 Guzmán", 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
1
Destrucción de objetos (II)
„
El GC actúa 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 aún
El Recolector de basura se puede solicitar explícitamente
mediante el comando: System.gc ();
Los Destructores
class Cliente {
...
protected void finalize () {
// Código destructor aquí
}
}
„
Características
„
„
Se invocan automáticamente 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
Limitación en java
„
El programador no controla el instante en que se libera
memoria
2
Ejemplo (1)
Continua…
Ejemplo (2)
Sin objetos
e1 y e2
Llamado
explícito del
gc
3
Ejemplo (3)
Por que?
Control de acceso(1)
„
Público y privado: las clases
„
Las clases por defecto son “propias” del paquete (package) en
el que están definidas.
„
„
Para que se puedan usar en otros programas o paquetes se
deben declarar como “públicas”, usando el modificador de acceso
public:
„
„
son conocidas en cualquier otra clase del mismo paquete, pero no se
podrán usar en otros programas o paquetes.
public class ...
Cada archivo fuente sólo puede tener una clase pública.
„
Lo normal es declarar cada clase en su propio archivo fuente.
4
Control de acceso(2)
„
Público y privado: Atributos y Métodos (1)
„
„
„
„
Los atributos y los métodos son, por defecto, conocidos en
todas las clases del paquete en el que se encuentra su
clase (tipo package).
A los atributos y los métodos se les puede aplicar tanto el
modificador de acceso public como el modificador de
acceso private.
Un atributo o método public se conocerá en cualquier otro
programa o paquete, pudiendo ser entonces accedido por
medio de objetos de esa clase (con la notación punto).
Un atributo o método private sólo se conoce en la propia
clase en la que está definido, pudiendo ser accedido tan
sólo en ella.
„
Los métodos serán públicos si constituyen servicios que los
objetos proporcionan al exterior y privados si son funciones
auxiliares de la clase.
Control de acceso(3)
„
Ejemplo
5
Control de acceso(4)
„
Las directrices de la programación
orientada a objetos nos aseguran un
menor riesgo de errores en los
programas si:
„
„
Los atributos se declaran siempre como
privados.
La manipulación de los atributos se realiza,
consecuentemente, por medio de métodos
(públicos).
Control de acceso(5)
„
Como los atributos deben ser siempre privados, a
menudo necesitaremos ciertos métodos que nos
permitan establecer u obtener los valores de los
atributos:
„
„
„
Accedente: método que nos devuelve el valor de un
atributo.
Mutador: método 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 sólo por la propia
clase.
6
La interfaz e Implementación
„
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
implementación:
„
„
„
„
El nombre de la clase.
Las signaturas de los métodos públicos.
Los atributos.
Los métodos privados.
Los cuerpos de todos los métodos.
La implementación no tiene por qué ser conocida
para poder utilizar la clase. Lo único que
necesitamos conocer es la interfaz.
Ejemplo: Encapsulación (1)
7
Ejemplo: Encapsulación (2)
„
Un código 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 encapsulación.
„
Todos los elementos contenidos en el archivo con la
declaración anterior formarán parte del paquete
nombrePaquete.
Ejemplo
„
„
„
„
package nombrePaquete;
Se puede crear un paquete con la información relativa a la
matricula de alumnos, que incluyera alumnos, asignaturas, notas,
profesorado, horarios, etc.
Posteriormente se podrían usar para diferentes aplicaciones de la
matricula: institutos, colegios, ...
package Matricula;
Paquete
class Alumno {…}
class Asignatura {...}
...
8
Paquetes y directorios(1)
„
Nombre del package Æestructura de directorios
CLASSPATH: lista de directorios donde java busca packages
„
Packages importados automáticamente:
„
„
„
„
java.lang
DefaultPackage
Package actual
Paquetes y directorios(2)
„
Para usar algún componente de un paquete hay que
añadir una declaración de importación, que puede
ser de un elemento o de todos los elementos.
„
Un solo elemento:
import Matricula.Alumno;
...
Alumno alumno1;
...
„
Se importa sólo la clase Alumno
Todo el paquete sin cualificación:
import Matricula.*;
...
Alumno alumno1;
...
Se importa todo y para usar los
elementos no es necesario
cualificarlos
9
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
públicas 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 públicas 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)
„
Público y privado: Atributos y Métodos(1)
„
El ocultamiento dentro de clases y packages
11
Control de acceso(2)
„
Modalidades de ocultamiento de atributos
y métodos 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
X
Modalidades de ocultamiento de clases:
„
„
public
package
Lecturas
„
Programación basada en objetos.
Capitulo 6
„
Como Programar en Java. Deitel y Deitel.
Ed. Prentice-Hall. 1988
12