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