Objetos y Clases en JAVA 4 Declaración de una clase public class Punto { public int y = 0; public int x = 0; ....... } public class Rectangulo { public int ancho = 0; public int alto = 0; public Punto origen = new Punto(); ...... } 4 Instanciación de una clase new Rectangulo(); new Punto(); x y 0 0 ancho 0 Tipos Primitivos alto Tipo Referenciado 0 origen x y 0 0 Objetos y Clases en JAVA Objeto Corriente public class Punto { public int y = 0; public int x = 0; public class Rectangulo { public int ancho=0; public int alto=0; public Punto origen; Constructor public Punto (int x, int y) { this.x = x; this.y = y; } } new Punto(44,78); x 44 y 78 Constructores public Rectangulo() { origen=new Punto(0,0); } public Rectangulo(Punto p ) { origen=p; } public Rectangulo(int w, int h) { this(new Punto(0,0),w,h); } public Rectangulo(Punto p, int w, int h) { origen=p; ancho=w; alto=h; } public void mover(int x, int y) { origen.x=x; origen.y=y; Métodos de } Instancia public int area(int x, int y) { return ancho*alto; } protected void finalize() throws Throwable { origen = null; super.finalize(); } } El Ciclo de Vida de un Objeto El ciclo de vida de un objeto consiste en: Creación Uso Destrucción. 4Creación 4 Declaración: se le indica al compilador el nombre y tipo del objeto declarado. 4 Instanciación: se aloca memoria para el objeto mediante el operador new. 4 Inicialización: se inicializa el objeto invocando constructores. Una clase puede tener múltiples constructores, todos con el mismo nombre, pero diferente número y tipos de argumentos. Java provee un constructor de default, sin argumentos, que “no hace nada”. 4Uso Hay dos formas de manipular un objeto 4 Accediendo directamente a sus variables de instancia 4 Invocando métodos de instancia: objetoReferenciado.variableDeInstancia rect.origen = new Punto(15,37); alto = new Rectangulo().alto; int areaRect=rect.alto*rect.ancho; objetoReferenciado.metodo(lista de argumentos); rect.mover(15,37); alto = new Rectangulo().alto(); int areaRect= new Rectangulo(100,50).area(); Java provee un mecanismo de control de acceso, que permite que una clase pueda restringir o habilitar el acceso a sus variables miembro y métodos. El Ciclo de Vida de un Objeto El ciclo de vida de un objeto consiste en: Creación Uso Destrucción. 4Destrucción La plataforma JAVA provee un Garbage Collector que periódicamnte libera la memoria ocupada por objetos ya no usados. protected void finalize() throws Throwable { origen=null; super.finalize(); Libera variables y/o recursos alocados e invoca al método finalize } del padre para que éste libere los propios. 4 Antes que un objeto sea recolectado por el Garbage Collector, el sistema run-time invoca al método finalize() para liberar recursos del sistema como archivos y sockets abiertos. Este proceso se llama finalización. 4 El método finalize es heredado de la la clase Object. Toda clase debería sobreescribir el método finalize para realizar el proceso de finalización adecuado para los objetos de su clase. Creando Clases Cuerpo Declaración 4 Componentes de la declaración de una clase public la clase es accesible públicamente abstract la clase no puede instanciarse final la clase no puede subclasearse class NombreDeClase nombre de la clase extends Super Super es la superclase de la clase implements Interfaces interfaces implementadas por la clase { Constructures para la inicialización. Declaraciones de variables. Métodos que dan comportamiento. } Cuerpo de la Clase Componente oligatoria Los valores por default, asumidos por el compilador JAVA son: no public, no abstract, no final, subclase de Object y no se implementan interfaces. Clases Finales 4 Una clase final es una clase que no puede ser subclaseada. ¿Pórque crear clases finales? Seguridad Una subclase es “similar” a la superclase y, además puede implementar un comportamiento “peligroso”. Es posible a través de una subclase obtener información privada de la superclase. Por ejemplo: la clase String del paquete java.lang es una clase final ya que es vital para el funcionamiento del compilador y del intérprete. Al no poder subclasearse, cualquier clase que use String estará usando la clase java.lang.String. Diseño Por razones de diseño, una clase que está conceptualmente bien definida no tendría que ser subclaseada. Clases Abstractas 4 Una clase abstracta representa un concepto abstracto. 4 Una clase abstracta sólo puede ser subclaseada, pero nunca puede ser instanciada. 4 Una clase abstracta se declara anteponiendo el modificador abstract a la palabra clave class. abstract class Geometría2D { ..... } 4 Una clase abstracta puede contener métodos abstractos y métodos con implementación. ¿Para qué son útiles los métodos abstractos? Geometría2D Geometría2D Círculo Círculo Línea Línea abstract class Geometría2D { int x,y; ..... void mover(int nuevoX, int nuevoY) { ........... } abstract void dibujar(); } Rectángulo Rectángulo Todos estos objetos tienen estado -posición y área de dibujo- y comportamiento -mover, cambiar tamaño, dibujar- común. Por ejemplo: mover tiene implementación y dibujar es abtracto. Class Circulo extends Geometría2D { void dibujar() { ........... } } Class Linea extends Geometría2D { void dibujar() { ........... } } Creando Clases 4 Componentes de la declaración de Variables Miembro public|protected|package|private controla el nivel de acceso para esta variable static declara una variable de clase final declara una constante. El nombre de la misma debe estar en mayúscula. transient declara variables que no deben ser serializables. Se usan para denominar atributos que no forman parte del estado permanente de un objeto volatile este modificador evita que el compilador realice ciertas optimizaciones type name indica el tipo y el nombre de la variable. Primitivos (int, float, Especificador Private protected public package boolean) o Referenciados (array, object o nombres de interfaces) Clase 4 4 4 4 SubClase 4 4 Package Todos 4 4 4 4 Creando Clases 4 Cuerpo de una clase Es la implementación de la clase. Se definen: constructores, variables y métodos que determinan el comportamiento y el estado de los objetos. 3Constructores: cumplen la función de inicializar los nuevos objetos pertenecientes a la clase. public Pila () { items = new Vector(10); } public Pila (int tamaño) { items = new Vector(tamaño); } JAVA soporta sobrecarga de contructores. El compilador los identifica por el número y tipo de sus parámetros. Especificadores de acceso para constructores private ninguna clase puede crear instancias, excepto la misma clase a través de un método de clase protected solamente los objetos pertenecientes a las subclases pueden crear instancias public cualquier objeto puede crear instancias de la clase package solamente los objetos pertenecientes a clases del mismo package pueden crear instancias Creando Clases 3 Implementando Constructores a.- Invocando un constructor de la superclase class ThreadAnimacion extends Thread { int framesPorSegundo; int numImagenes; Image[] imagenes; Invocación del constructor de la super clase ThreadAnimacion (int fps, int num) { super(“ThreadAnimacion”); this. framesPorSegundo= fps; this.numImagenes=num; this.imagenes= new Image(numImagenes); for (int i=0; i<= numImagnes; i++) { ................. // se cargan las imágenes .................. } } ................... } b.- Invocando un constructor de la misma clase public class Punto { int x; int y; } public Punto () { this (0,0); } public Punto (int a, int b) { x=a; y=b; } Creando Clases public|protected|package|private controla el nivel de acceso para el método static método de clase abstract método no implementado final método no puede ser sobreescrito por las subclases native método implementado en otro lenguaje syncrhronized tipo_retornado NombreDelMetodo método que requiere de un monitor para ejecutarse devuelve un objeto del tipo tipo_retornado. Los tipos pueden ser: Primitivos (int, float, boolean) o Referenciados (array, object o nombres de interfaces) lista de argumentos (tipo nombre) separados por coma (“,”). Los tipos pueden ser: Primitivos (int, float, boolean) o Referenciados (array, object o nombres de interfaces) excepciones manejadas por el método (lista de parámetros) Cuerpo throws exceptions { } Componente obligatorio Declaración 4 Componentes de la declaración de Métodos Cuerpo del Método 4 Dentro del cuerpo del método se usa el operador return para devolver el valor. Todos los métodos deben contener la sentencia return, excepto aquellos declarados void. 4 La clase del objeto retornado debe coincidir exactamente con la clase del tipo declarado en el método o, ser subclase de la misma. 4 JAVA soporta sobrecarga de nombre de métodos. El compilador identifica a los métodos sobrecargados por el tipo y número de sus argumentos. 4 En JAVA los métodos pasan sus argumentos por valor. Clases Anidadas 4 Una clase anidada es una clase que es miembro de otra clase. 4 Una clase anidada se usa para reflejar relación entre dos clases y tiene sentido solamente para el funcionamiento de la clase que la anida. 4 Una clase anidada tiene acceso ilimitado a todos los miembros de la clase que la anida (variables de instancia, de clase, métodos de instancia y de clase) aunque fuesen privados. 4 Las clases anidades pueden ser: clases anidades estáticas (las que se declaran static) y, clases internas. class ClaseA{ int x; static class ClaseAnidadaEstatica { ....... } class ClaseInterna { ....... } } Clases Anidadas 4Una clase interna es una clase anidada cuya instancia existe dentro de la instancia de la clase que la anida y tiene acceso directo a todos los miembros de la clase que la anida. Instancia de la clase que anida Instancia de una clase interna Relación entre objetos. El paquete AWT hace uso extensivo de clases internas para manejar los eventos de usuario -mouse, teclado, etc.- 4La clase estática sólo puede acceder a los miembros de la clase que la anida, a través de un objeto de la clase. Es una relación sintáctica entre clases. Clases Anidadas public class Stack { private Vector items; .... constructores y métodos ( isEmpty(), push(unItem), pop() ... ) public Enumeration enumerator() { return new StackEnum(); } class StackEnum implements Enumeration { int itemActual = items .size() - 1; public boolean hasMoreElements() { return !( isEmpty() ); } public Object nextElement() { if ( isEmpty() ) throw new NoSuchElementException(); else return items.elementAt[itemActual--]; } } } Ejemplo ... Stack p = new Stack(); .... Enumeration e1= p.enumerator(); while (e1. hasMoreElements()) { e1. nextElements(); .... } ... Enumeration e2= p.enumerator(); while (e2. hasMoreElements()) { e2. nextElements(); .... } Paquetes 4 Un paquete JAVA es un conjunto de clases e interfaces relacionadas que proveen acceso protegido y administración de nombres. 4 Las clases e interfaces que son parte de la Plataforma Java están agrupadas en paquetes de acuerdo a su función: 4 java.applet : para manejo de Applets. 4 java.io: para manejo de entrada/salida. 4 java.awt: para manejo de la GUI. 4 El programador agrupa sus clases e interfaces en paquetes, anteponiendo la claúsula package NombreDel Paquete a las declaraciones de todas las clases e interfaces agrupadas. 4 La plataforma JAVA importa automáticamente los siguientes paquetes: el default package, el paquete java.lang y el paquete actual. Creando un paquete 4 Un paquete es creado simplemente incorporando una clase o una interfaz. Se requiere escribir la sentencia package como primer sentencia del archivo fuente en donde se está definiendo la clase o la interfaz. package graphics; class Circle extends Graphics implementes Draggable { ................................ } La clase Circle está definida en el paquete graphics 4 Se debe incluir la sentencia package como primer sentencia de todo archivo fuente que defina una clase o una interfaz que es miembro del paquete graficos: package graphics; class Rectangle extends Graphics implementes Draggable { ................................ } 4 El alcance de la sentencia package es todo el archivo fuente. Todas las clases e interfaces definidas en Circle.java y Rectangle.java son miembros del paquete graphics. 4 Si no se usa la sentencia package, las clases e interfaces se ubican en el paquete de default (default package), que es un paquete sin nombre. No se recomienda usar el default package. Pórque definir paquetes? 4 Evitar conflictos de nombres Es posible que dos programadores usen el mismo nombre para definir dos clases diferentes. graphics.Rectangle java.awt.Rectangle El nombre real de una clase incluye el nombre del paquete al que pertenece (nombre largo de la clase) Por convención se recomienda usar el nombre invertido del dominio de Internet de la compañía y si hace falta se le agrega la región, nombre del proyecto: com.compañia.nombreDelPaquete com.compañia.region.nombreDelPaquete 4 Controlar el acceso a las clases del paquete: una clase puede ser accedida por todo el mundo si es declarada public y sólo por las clases que componen el paquete si es declarada package. 4 Facilitar el reconocimiento y la búsqueda de clases e interfaces relacionadas de acuerdo a una funcionalidad específica. Cómo usar miembros de un paquete? Los miembros de un paquete declarados públicos pueden ser accedidos desde afuera del paquete, de alguna de las siguientes formas: 4 Refiriéndose a su nombre largo graphics.Rectangle miRect=new graphics.Rectangle(); 4 Importándolo import graphics.Circle; ........... Circle miCir=new Circle(); Nombre corto de la clase 4 Importando el paquete íntegro import graphics.*; Nombre corto de las clases ........... Circle miCir=new Circle(); Rectangle miRec=new Rectangle(); Manejo de archivos fuentes y archivos class El JDK (Java Development Kit) administra los archivos fuente y class de los programas JAVA, usando un sistema jerárquico de archivos. Esto no lo requiere la especificación del lenguaje. package graphics; class Rectangle { ....... } graphics Rectangle.java Pathname del archivo fuente: graphics\Rectangle.java package edu.linti.graphics; class Rectangle { ....... } edu linti graphics El archivo fuente de la clase o interface coincide con el nombre de la clase (corto) y tiene extensión .java. El archivo fuente reside en un un directorio cuyo nombre coincide con el del paquete Cada componente del nombre del paquete es un subdirectorio. Rectangle.java Pathname del archivo fuente: edu\linti\graphics\Rectangle.java Manejo de archivos fuentes y archivos class package edu.linti.graphics; class Rectangle { ....... } class Helper { ..... } Compilador Rectangle.class Helper.class 4 El compilador crea diferentes archivos de salida, uno para cada una de las clases o interfaces contenidas en el paquete. 4 El nombre del archivo compilado es el mismo que el de la clase o interface y tiene extensión .class. 4 Los archivos .java y .class deben guardarse en la serie de directorios dado por el nombre del paquete.
© Copyright 2025