Está en la página 1de 11

Clases

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


www.fdi.ucm.es/profesor/balta

Java

Clases y objetos

BFM

Clases
Una definicin de clase comprende: Cabecera Campos o atributos:
Variables Constantes

Definicin de una clase


[Modificadores] class NombreClase [extends SuperClase] { // definicin de los atributos de la clase tipo1 identificador1; tipo2 identificador2; .. // definicin de los mtodos de la clase tipoDevuelto nombreMetodo1 (listaParametros) { //instrucciones del mtodo1 } tipoDevuelto nombreMetodo2 (listaParametros) { //instrucciones del mtodo2 } .. }

estado del objeto comportamiento

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

Variables, objetos y referencias


Una variable de un determinado tipo simple proporciona
Capacidad para almacenar un valor simple Un conjunto predifinido de operadores

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

int num = 5; Rectangulo rect;


5 Java Clases y objetos BFM

num rect

5 null
6

Creacin de instancias o ejemplares


Operador new Crea una instancia o ejemplar de la clase indicada y devuelve una referencia a dicho objeto Se reserva espacio de memoria para los datos del objeto
Un ejemplar es una copia individual de la plantilla de la clase que tiene su propio conjunto de datos num 5 int num = 5; // crea una referencia rect Rectangulo rect; x // reserva la memoria rect = new Rectangulo(); y otroRect Rectangulo otroRect; ancho otroRect = rect; // otroRect se refiere al mismo alto // rectangulo que rect
Java Clases y objetos BFM 7 Java

Acceso a los atributos de un objeto


Desde un objeto se puede acceder a los atributos o miembros con la siguiente sintaxis referenciaObjeto.atributo;
public class Rectangulo { int x; int y; int ancho; int alto; //faltan las funciones miembro public static void main(String args[ ]) { Rectangulo rect; rect = new Rectangulo(); rect.x = 5; rect.y = 7; rect.ancho = 4; rect.alto = 3; System.out.println( "x = " + rect.x + y = " + rect.y ); System.out.println( "ancho = " + rect.ancho + alto = " + rect.alto ); } }
Clases y objetos BFM 8

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

Llamada a los mtodos


La invocacin a los mtodos desde una instancia se hace mediante el operador de acceso ( . ) referenciaObjeto.nombreMetodo(listaArgumentos);
Los argumentos de tipos simples se pasan por valor Los objetos se pasan por referencia
public class Rectangulo { int x; .. int calcularSuperficie(){ .... } void mostrarValores(){.} 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 ); System.out.println( "x = " + rect.x + y = " + rect.y ); System.out.println( "ancho = " + rect.ancho + alto = " + rect.alto ); } }
Clases y objetos BFM 10

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)

Referencia a objeto this


Referencia especial que utilizada dentro de un mtodo de cualquier clase se refiere a la instancia actual
Permite parmetros con igual nombre que atributos Posibilita la llamada a otros constructores
class Rectangulo{ int x; .... // constructor Rectangulo(int x1, int y1, int w, int h){ x=x1; y=y1; ancho=w; alto=h; } // otro constructor polimorfico Rectangulo(int ancho, int alto){ x=0; y=0; this.ancho= ancho; this.alto= alto; } ..... public static void main(String args[ ]) { Rectangulo rect; rect = new Rectangulo(5, 7, 4, 3); rect.mostrarValores(); Rectangulo nuevo; nuevo = new Rectangulo(6, 9); rect.mostrarValores(); . } }

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

o a otros constructores de la misma clase this(argumentosPorDefecto); // constructor polimorfico


// sin parmetros public Rectangulo() { x=0; y=0; alto=0; ancho=0;}
Java Clases y objetos BFM 13 Java

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

Mtodos de clase o estticos


Se invocan en nombre de la clase Slo pueden acceder a variables de clase Para realizar funciones de utilidad (que slo actan sobre sus parmetros o que no necesitan parmetros):
double numero = Math.sqrt(234.0); public static void main() {/*codigo programa prin. Que debe crearse antes de que exista ningn objeto*/};

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;

Declaracin de mtodo de clase en Rectngulo:


public static int obtNumRect() { return this.numRect;} Llamada desde main: int num= Rectangulo.obtNumRect();

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

Bloques de inicializacin esttica


Para inicializar campos estticos u otros estados necesarios cuando es necesario realizar algn tipo de clculo
static {
Java Clases y objetos

for (int i = 0; i < primos.length; i++) primos[i] = i; }


BFM

16

Reutilizacin de cdigo
Composicin Utilizar objetos como miembros de otros objetos Herencia Especializacin o extensin de una clase para crear otra nueva

Composicin: clase Punto


public class Punto { int x; int y; public Punto(int x, int y) { this.x = x; this.y = y; } public Punto() { // llamada al otro constructor this(-1, -1); } public void mostrar(){ System.out.println(x = + x + y = + y); } }

Java

Clases y objetos

BFM

17

Java

Clases y objetos

BFM

18

Composicin: prueba de la clase Punto


public class Punto { int x; int y; public Punto(int x, int y) { this.x = x; this.y = y; } public Punto() { // llamada al otro constructor this(-1, -1); } public void mostrar(){ System.out.println(x = + x + y = + y); } public static void main(String args[]) { Punto pun1 = new Punto(); Punto pun2 = new Punto(2,3); System.out.println( "visualizar datos del punto" ); pun1.mostrar(); pun2.mostrar();}}
Java Clases y objetos BFM 19 Java

Composicin: clase Crculo


public class Circulo { Punto origen; int radio; public Circulo(int x, int y, int radio) { origen = new Punto(x,y); this.radio = radio; } public void mostrar() { origen.mostrar(); System.out.println("radio = " + radio); } public static void main(String args[]) { Circulo cir = new Circulo(5, 5, 9); System.out.println( "visualizar datos del circulo" ); cir.mostrar(); }}

Clases y objetos

BFM

20

La clase genrica Object


Todas las clases en Java heredan implcitamente de la clase Object. De esta forma, Object es la raiz de la jerarqua de herencia (de implementacin) en Java. Object define un conjunto de mtodos tiles, que pueden ser redefinidos en cada clase. En particular: public boolean equals(Object o): Permite definir el criterio de igualdad utilizado para los objetos de una determinada clase (el operador == nicamente chequea la igualdad de referencias). En Object, equals se define directamente como la identidad de referencias. public String toString(): Permite decidir la representacin externa de un objeto. Por defecto es el valor de su referencia, etiquetada con el nombre de la clase.
Java Clases y objetos BFM 21 Java

Herencia: clase Persona


public class Persona { String nombre = ""; int edad; public Persona(String nom, int ed) { nombre = nom; edad = ed; } public void mostrar() { System.out.println("Nombre: "+ nombre); System.out.println("Edad: "+ edad); } public static void main(String args[]) { Persona yo= new Persona("Balta", 99); yo.mostrar(); } }
Clases y objetos BFM 22

Persona

Trabajador

Herencia: clase Trabajador


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;} public double sueldo() { return sueldoHora * numHoras; } public static void main(String args[]) { Trabajador yo= new Trabajador("Balta", 99, 200.5f, 45); yo.mostrar(); // se invoca al metodo heredado mostrar double pelas = yo.sueldo(); System.out.println("Cobra: " + pelas); } }
Java Clases y objetos BFM 23 Java

Sobrecarga o reescritura de un mtodo y polimorfismo


La signatura de un mtodo viene dada por su nombre y el tipo y nmero de los parmetros
El tipo devuelto no forma parte de la signatura

Cuando se reescribe un mtodo en una clase derivada


La signatura debe ser la misma que el mtodo de la clase base El tipo devuelto debe ser el mismo que el del mtodo de la clase base El atributo de acceso del mtodo de la clase derivada tiene que ser igual o mas general que el de la clase base (NO puede ser mas restrictivo)

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

//En Persona redefinimos el mtodo mostrar()


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 completa de mostrar // nombre y edad son atributos heredados de Persona public void mostrar() { System.out.println("Nombre: "+ nombre); System.out.println("Edad: "+ edad); System.out.println("Sueldo por hora: "+ sueldoHora); System.out.println("Horas trabajadas: "+ numHoras);}}

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);

Las subclases de una clase abstracta deben:


Sobreescribir todos los mtodos abstractos de la superclase, o bien Ser declaradas como clases abstractas

Una clase abstracta no puede instanciarse


No se pueden crear objetos de una clase abstracta

}
Java Clases y objetos BFM 27 Java Clases y objetos BFM 28

Ejemplo clase abstracta


Figura
public abstract class Figura { int x, y; public void mostrarOrigen() { System.out.println("x= "+x+" y= "+y);} public abstract double area(); // No tiene implementacin public abstract double mostrarNombre(); } public class Triangulo extends Figura { protected int base, altura; public Triangulo (int ba, int al) { base=ba; altura=al; } public double area() { return base*altura/2; } public void mostrarNombre() { System.out.println(triangulo); } } public class Cuadrado extends Figura { protected int lado; public Cuadrado (int lado) { this.lado=lado; } public double area() { return lado*lado; } public void mostrarNombre() { System.out.println(cuadrado);}}
BFM 29 Java

Prueba clase abstracta


public class PruebaClaseAbstracta { public static void main(String args[]) { Figura fig; Triangulo tri; Cuadrado cua; fig = new Figura(); // error no se puede instanciar una clase abstracta tri = new Triangulo(4,3); tri.mostrarOrigen(); tri.mostrarNombre(); fig = tri; fig.mostrarNombre(); System.out.println("Area triangulo: "+fig.area()); cua = new Cuadrado(5); fig = cua; System.out.println("Area cuadrado: "+fig.area()); } }
Clases y objetos BFM 30

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

Recoleccin automtica de memoria


Rectangulo rect = new Rectangulo(); Rectangulo otroRect =new Rectangulo(); // se pierde la referencia al primer rectngulo otroRect = rect; // este primer rectngulo pasa a ser candidato a recoleccin automtica
x y ancho alto

Memoria que ser recuperada por el recolector automtico

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); ... }

Por defecto todos sus atributos son pblicos, constantes y de clase


Por legibilidad normalmente los declaramos static y final

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

Uso del interfaz en vinculacin dinmica


public class PruebaInterfaz { public static void main(String args[]) { Elemento elem; Nombrable inter; elem = new Elemento("Balta"); elem.mostrarNombre(); // una referencia a interfaz puede utilizarse con una instancia de // una clase que lo implemente inter = elem; inter.mostrarNombre(); } }

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

Convencin para el nombrado de paquetes (para conseguir nombres nicos): dominio.empresa.departamento.proyecto


Autor del paquete (nombre de dominio Internet al revs) Ejemplo: es.ucm.sip.cursoJava

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.*

* permite referirse a todas las clases e interfaces de un paquete


import java.*; // ERROR: no vale para paquetes

Ejemplo: Para importar la clase Applet:


import java.applet.Applet; // directamente la clase import java.applet.*; // todos los nombres del paquete

Usando la clusula import:


import java.util.Date; class ImprimeFecha2 { public static void main () { Date ahora = new Date(); System.out.println(ahora); } }
Java Clases y objetos BFM 39 Java

El compilador busca en classes/java/applet/*


En los entornos de programacin existen funcionalidades que simplifican la gestin del proyecto. Normalmente se busca dentro de los ficheros de clases del proyecto
Clases y objetos BFM 40

Control de acceso a miembros de una clase


Hay cuatro niveles de proteccin en funcin de los atributos de acceso y de la organizacin en paquetes Publico, paquete, protegido y privado Atributos de acceso Si no se indica nada un miembro es accesible desde todo el paquete private
acceso slo dentro de la clase

Ejemplo control de acceso


El control de acceso se aplica tanto a atributos como a mtodos
// redefinicin de la clase rectngulo con control de acceso public class Rectangulo { // accesible slo dentro de la clase private int x; int y; // accesible dentro del paquete (opcin por defecto) // accesible desde todos los sitios public int ancho; // accesible desde el paquete y desde las subclases protected int alto; private int calcularSuperficie() // accesible slo dentro de la clase { .... } ... }

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

También podría gustarte