Objetos y Clases en JAVA

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.