La unidad fundamental de programacin en Java es la clase Un programa Java est formado por un conjunto de clases Una clase es una plantilla que describe un conjunto de objetos con atributos y comportamiento similares Un programa Java en ejecucin crea y manipula (mediante llamadas a mtodos) objetos concretos (ejemplares o instancias) Cada objeto es un ejemplar de una clase Cuando se invoca un mtodo de un objeto, se mira en el cdigo de su clase las acciones a ejecutar Un objeto puede usar otros para realizar su trabajo
1 Java Clases y objetos BFM 2
Java
Clases y objetos
BFM
Clases
Una definicin de clase comprende: Cabecera Campos o atributos:
Variables Constantes
Mtodos:
Funciones Constructores Bloques de inicializacin static Finalizador
Java
Clases y objetos
BFM
Java
Clases y objetos
BFM
Modificadores de clase
Modificadores: public class NombreClase class C extends superclase // visible fuera del paquete // la clase hereda de otra
Normalmente la clase se almacena en un fichero NombreClase.java En un fichero .java puede haber como mucho una clase public Slo herencia simple (una sla superclase) Si no aparece extends la clase definida hereda (es una subclase) de un objeto general del sistema llamada Object public class Rectangulo{ int x; int y; int ancho; int alto; // faltan los mtodos de Rectngulo }
Java Clases y objetos BFM
Object
Un objeto de una determinada clase proporciona Capacidad para almacenar diversos valores (atributos) Define su propio conjunto de mtodos para operar sobre las instancias o ejemplares de esa clase Cuando se declara un objeto de una clase se crea una referencia a una instancia de dicha clase
Incialmente toma el valor null porque no existe objeto al que referirse No son punteros con los que se pueda trabajar directamente
Rectangulo
num rect
5 null
6
Declaracin de mtodos
Funciones declaradas en la clase y que determinan su comportamiento Sintaxis tipoDevuelto nombreMetodo (listaParametros) {
//instrucciones del mtodo }
// calcula la superficie y la devuelve como un nmero entero int calcularSuperficie(){ int area; area = ancho * alto; return area; } // muestra los valores por pantalla pero no devuelve nada void mostrarValores(){ System.out.println( "x = " + x + " y = " + y ); System.out.println( "ancho = " + ancho + " alto = " + alto ); }
Java Clases y objetos BFM 9 Java
Nueva funcionalidad
public class Rectangulo { int x; .. int calcularSuperficie(){ .... } void mostrarValores(){.} void cambiarValores(int posx, int posy, int lar, int anc) { x= posx; y= posy; alto = lar; ancho = anc; } public static void main(String args[ ]) { Rectangulo rect; rect = new Rectangulo(); rect.x = 5; rect.y = 7; rect.ancho = 4; rect.alto = 3; int area = rect.calcularSuperficie(); rect.mostrarValores(); System.out.println( "Superficie: " + area ); rect.cambiarValores(3,5,8,9); rect.mostrarValores(); }
Java Clases y objetos BFM 11
Constructores
Mtodo que inicializa el objeto en su creacin Se llama automticamente cuando se crea un objeto Su nombre es igual que el de la clase y no tiene tipo de retorno Java proporciona un constructor sin parmetros por defecto que deja de estar disponible cuando se aade algn constructor
public static void main(String args[ ]) { Rectangulo rect; rect = new Rectangulo(5, 7, 4, 3); int area = rect.calcularSuperficie(); rect.mostrarValores(); System.out.println( "Superficie: " + area ); . } }
public class Rectangulo{ int x; .... // constructor public Rectangulo(int x1, int y1, int w, int h){ x=x1; y=y1; ancho=w; alto=h; } .....
Java
Clases y objetos
BFM
12
Constructores
Pueden sobrecargarse Una clase puede tener ms de un constructor (polimorfismo)
Si no se declara ninguno se hereda el de la superclase (o el de Object)
Se puede crear un objeto con distintos tipos de parmetros Pueden llamar al constructor del padre super(argumentos);
Debe ser la primera instruccin del constructor
Clases y objetos
BFM
14
Miembros estticos
Slo hay un miembro por clase
Se declaran con la palabra clave static Variables, constantes y mtodos nicos y comunes a toda la clase
Atributos de clase Hay exactamente una copia (aunque no exista ningn objeto) Se inicializan antes de usarse:
Se usan como variables finales para definir constantes de clase
public static final int MAXIMO = 12;
Java
public class Rectangulo{ int x; .. static int numRect=0; // constructor public Rectangulo(int x1, int y1, int w, int h){ numRect++; x=x1; y=y1; ancho=w; alto=h; }
Clases y objetos
public static void main(String args[ ]) { Rectangulo rect; rect = new Rectangulo(5, 7, 4, 3); rect.mostrarValores(); System.out.println(Num: + Rectangulo.numRect); }
BFM 15
16
Reutilizacin de cdigo
Composicin Utilizar objetos como miembros de otros objetos Herencia Especializacin o extensin de una clase para crear otra nueva
Java
Clases y objetos
BFM
17
Java
Clases y objetos
BFM
18
Clases y objetos
BFM
20
Persona
Trabajador
Clases y objetos
BFM
24
Ejemplo
Sobrecarga de mtodo
Sobrecarga parcial ampliando el mtodo heredado
El mtodo de la subclase puede llamar al mtodo de la superclase
public class Trabajador extends Persona { float sueldoHora; int numHoras; public Trabajador(String nom, int ed, float suel, int num) { super(nom, ed); // llamada al constructor de Persona sueldoHora = suel; numHoras = num;} // sobrecarga parcial de mostrar // nombre y edad son atributos heredados de Persona public void mostrar() { super.mostrar(); // llamada al mtodo de la clase padre System.out.println("Sueldo por hora: "+ sueldoHora); System.out.println("Horas trabajadas: "+ numHoras);} }
25 Java Clases y objetos BFM 26
Java
Clases y objetos
BFM
Vinculacin dinmica
El mtodo a ejecutarse se determina en ejecucin en funcin del objeto concreto (no del tipo de la referencia)
Una referencia a la superclase puede referir a un objeto de la subclase Los objetos Trabajador son tambin objetos Persona
public static void main(String args[]) { Persona per; Trabajador yo= new Trabajador("Balta", 99, 200.5f, 45);
Clases abstractas
Clases cuya descripcin es incompleta Se definen utilizando la palabra reservada abstract No proporcionan la implementacin de todos sus mtodos
Los mtodos no implementados se declaran como abstract
Una clase con un mtodo abstracto debe declararse como clase abstracta
Pero una clase puede declararse como abstracta aunque no tenga ningn mtodo abstracto
Persona
Trabajador
per = yo; // Asignacion legal // se ejecuta el mtodo mostrar de Trabajador y no el de Persona per.mostrar(); // per se trata como cualquier Trabajador pelas = per.sueldo(); // Ilegal (sueldo se define en Trabajador) boolean b1, b2; b1 = (per instanceof Persona); // True b2 = (per instanceof Trabajador); // True System.out.println("b1: "+ b1 + " b2: "+ b2);
}
Java Clases y objetos BFM 27 Java Clases y objetos BFM 28
Triangulo Cuadrado
Java
Clases y objetos
Mtodos finalizadores
Java tiene recolector de basura Un objeto se elimina cuando se deja de hacer referencia a l No hay que eliminar los objetos explcitamente Al destruir un objeto se invoca el mtodo finalize Para hacer limpieza de recursos no Java (recursos externos) Por ejemplo: cerrar conexiones, cerrar ficheros, registrar algn tipo de resultado, etc. Al acabar un programa, se ejecuta finalize para todos los objetos
protected void finalize() throws Throwable { super.finalize(); // conviene ponerlo siempre if ( archivo != null ) // si el archivo no se ha cerrado { archivo.close(); archivo = null; } }
Java Clases y objetos BFM 31
x y ancho alto
rect
x
rect
x y ancho alto
otroRect
otroRect
y ancho alto
Java
Clases y objetos
BFM
32
Interfaces
Slo declaran comportamiento Se utiliza la palabra clave interface Por defecto todos sus mtodos son pblicos y abstractos
No implementan el comportamiento
Declaracin de interfaces
Sintaxis
interface NombreInterfaz { tipo static final NOMBRECONSTANTE1 = valor; ... public tipoDevuelto nombreMetodo1(listaParmetros); ... }
Permite simular algunos aspectos de la herencia mltiple Define un tipo de datos Posibilita la vinculacin dinmica Otras clases pueden implementar un interfaz Cualquier clase que implemente un interfaz debe definir todos los mtodos de dicho interfaz
Debe proporcionar la implementacin de dichos mtodos
Implementacin del interfaz en una clase Una clase puede implementar varios interfaces
class NombreClase implements NombreInterfaz1 [, NombreInterfaz2 ..] { // declaracin atributos y mtodos de la clase ... }
Si la clase no proporciona la implementacin para todos los mtodos del interfaz debe ser declarada como abstracta
Java Clases y objetos BFM 33 Java
Clases y objetos
BFM
34
Ejemplo de interfaz
interface Nombrable { static final boolean CIERTO = true; public void mostrarNombre(); } public class Elemento implements Nombrable { String nombre; public Elemento(String nom) { nombre = nom; } // obligatorio implementar mtodo mostrarNombre porque se implementa // la interfaz Nombrable public void mostrarNombre(){ System.out.println("Nombre: "+nombre); if (CIERTO) System.out.println("Constante CIERTO del interfaz"); } }
Java Clases y objetos BFM 35 Java
Clases y objetos
BFM
36
Paquetes
Los paquetes permiten agrupar una coleccin de clases e interfaces funcionalmente relacionadas asignndole un nombre Todo nombre en Java est dentro de un paquete package nombrePaquete; // fichero como parte de un paquete El paquete default contiene todas las clases no definidas explcitamente en un paquete Definen contextos de denominacin Para evitar colisin de nombres Sirven para definir bibliotecas de clases e interfaces Reutilizacin: no volver a inventar la rueda Permiten organizar el cdigo de una gran aplicacin Un paquete determina un subdirectorio del disco
Java Clases y objetos BFM 37
Paquetes
Los paquetes pueden anidarse Define una jerarqua: paquete.subpaquete.subpaquete.clase
Ejemplo: java.lang.System.out
Java
Clases y objetos
BFM
38
Uso de paquetes
Utilizacin de nombres de un paquete: Usando un nombre completo:
class ImprimeFecha1 { public static void main () { java.util.Date ahora = new java.util.Date(); System.out.println(ahora); } }
Importacin de clases
No es necesario para el paquete java.lang
Por defecto: import java.lang.*
public
acceso desde cualquier lugar
protected
acceso en la clase, las subclases (en cualquier paquete) y desde las clases del mismo paquete
Java Clases y objetos BFM 41 Java
Clases y objetos
BFM
42