Java Cap 2
Java Cap 2
Java Cap 2
CAPTULO 2:
CONTENIDOS
TEMA 2: Sintaxis POO en Java.
1. CLASES 2. ATRIBUTOS Y MTODOS 3. ATRIBUTOS Y MTODOS ESTTICOS 4. CREACIN DE OBJETOS 5. HERENCIA 6. CLASES ABSTRACTAS 7. THIS Y SUPER 8. INTERFACES 9. PAQUETES
POO - CLASES
La clase es la unidad fundamental de programacin en Java. La clase define el interfaz y la implementacin de los objetos de esa clase. Todo objeto es instancia de alguna clase. La declaracin de una clase tiene la forma bsica:
[public] [final] [abstract] class NombreClase {
... }
public es visible desde otros paquetes final esta clase no puede tener subclases abstract clase abstracta
3
POO - CLASES
Modificadores de clase:
Los modificadores de clase son palabras reservadas que se anteponen al nombre de las clases con el fin de definirles un comportamiento concreto. Los tipos de modificadores de clase que podemos definir son:
Una clase abstracta tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia. Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas. Si no se especifica ningn tipo de modificador, se entiende que cualquier objeto que se encuentre en el mismo paquete que esta clase podr hacer uso de ella.
4
i = 21
mc1
i = 16
mc2
acceso: public | private | protected | tipo: es cualquier tipo primitivo o clase o array de ellos
final: significa que el valor de ese campo no puede ser modificado (constante) static: significa que todas las instancias comparten la misma variable
Accesible desde cualquier lugar en que sea accesible la clase Accesible por las subclases y clases del mismo paquete Slo accesible por la propia clase
Valor Inicial
0 \u0000 0 +0.0f +0.0d
referencia a objeto
null
Sin embargo, no asigna ningn valor por defecto inicial a las variables locales de mtodos o constructores. Debemos asignar algn valor a una variable local antes de usarla.
significa que el mtodo no puede ser sobrecargado por las clases que hereden de esta significa que es un mtodo de clase slo se proporciona la signatura del mtodo. Slo es posible en clases abstractas y no puede coincidir con los modificadores
final, static, private
acceso: es igual que para campos tipo: el tipo de retorno del mtodo. Puede ser cualquier tipo primitivo, clase, array o void args: lista de 0 o ms argumentos separados por comas, donde cada argumento tiene la forma: tipo identificador
10
11
...
Si queremos crear una clase en la que el valor de un atributo sea el mismo para todos los objetos instanciados a partir de esa clase debemos utilizar la palabra clave static. Para manejar este tipo de atributos necesitamos mtodos estticos.
class Documento { static int version = 10; int numero_de_capitulos; void aade_un_capitulo() { numero_de_capitulos++; } static void modifica_version( int i ) { version = i; } } doc1 doc2 doc3 doc1.aade_un_capitulo(); Documento.modifica_version(11);
NC = 5 NC = 7 NC = 15
V = 10
14
a1 Objeto real a2
15
abc
abc
def
16
POO - HERENCIA
La Herencia es el mecanismo por el que se crean nuevos objetos definidos en trmino de objetos ya existentes. Para heredar de una clase utilizamos la palabra clave extends:
class Empleado extends Persona {
. . .
}
La clase Empleado hereda todos los atributos y mtodos (la interfaz y la implementacin) de Persona. A partir de aqu, podemos: Extender la clase Persona aadiendo nuevos mtodos a la clase Empleado. Aumentamos el interfaz. Anular mtodos de Persona con la propia implementacin de Empleado.
POO - HERENCIA
public class MiClase { int i; public MiClase() { i = 10; } public void suma_a_i( int j ) { i = i + j; } } public class MiNuevaClase extends MiClase { public void suma_a_i( int j ) { i = i + ( j/2 ); } }
Ahora cuando se crea una instancia de MiNuevaClase, el valor de i tambin se inicializa a 10 porque los constructores tambin se heredan. Pero la llamada al mtodo suma_a_i() produce un resultado diferente.
18
19
This:
La referencia this se usa para referirse al propio objeto y se usa explcitamente para referirse tanto a las variables de instancia como a los mtodos de un objeto. Dentro de los mtodos no estticos, podemos utilizar el identificador especial this para referirnos a la instancia que est recibiendo el mensaje. Algunos usos habituales son: Evitar conflictos de nombres con los argumentos de mtodos.
class Persona { String nombre; public void setNombre(String nombre) { this.nombre = nombre; ...
Super:
Super se usa para referirse a mtodos de la clase padre.
import MiClase; public class MiNuevaClase extends MiClase { public void suma_a_i( int j ) { i = i + ( j/2 ); } public void suma_a_i_padre( int j ) { super.suma_a_i( j ) } }
Cuando extendemos una clase, los constructores de la subclase deben invocar algn constructor de la superclase como primera sentencia.
public Circulo(double radio) { super(); this.radio = radio; }
Si no se invoca explcitamente un constructor de la superclase con la palabra reservada super, debe existir un constructor sin parmetros en la superclase o no debe haber ningn constructor (el compilador genera uno por defecto sin parmetros).
22
23
POO - INTERFACES
Constituyen un mecanismo para separar la interfaz de la implementacin. Un interface contiene mtodos y atributos constantes. Las clases que implementen el interface estn obligadas a codificar todos los mtodos definidos en el interface. Se declaran de forma similar a las clases:
interface Nombre { atributos mtodos }
Cuerpo del interfaz. Slo puede contener signaturas de mtodos (no la implementacin o cuerpo) y atributos
Los atributos de un interfaz son implcitamente public, static y final, y deben ser inicializados en la declaracin. Los mtodos de un interfaz son implcitamente public, abstract y no pueden ser static.
24
POO - INTERFACES
Ejemplo:
public interface VideoClip { int version = 1; //atributo constante void play(); //comienza la reproduccin del video void bucle(); //reproduce el video en un bucle void stop(); //detiene la reproduccin } class DivX implements VideoClip { void play() { <cdigo> } void bucle() { <cdigo> } void stop() { <cdigo> } }
25
POO - PAQUETES
Un package es un mecanismo para organizar clases e interfaces relacionadas. La propia librera estndar de Java est organizada en forma de paquetes. Adems, todas las clases de un paquete tienen acceso friendly, por defecto unas a otras. La sentencia package, si existe, debe ir al principio del fichero fuente y debe ser la primera sentencia de ste:
package identificador[.identificador] ...;
Todas las clases declaradas en esa unidad de compilacin pertenecern al mismo paquete. Ejemplo:
package Matematicas.Estadistica;
Por defecto todas las clases que se encuentren en un mismo directorio pertenecen al mismo paquete. 26
POO - PAQUETES
El nombre completo de una clase es la suma del nombre del paquete ms el nombre de la clase. As, para declarar una referencia de la clase Varianza del paquete Matematicas.Estadistica utilizaramos la sentencia:
Matematicas.Estadistica.Varianza var;
Para evitar tener que utilizar nombres tan largos, podemos utilizar la sentencia import:
import Matematicas.Estadistica.Varianza;
o bien
// todas las clases del paquete
import Matematicas.Estadistica.*;
Nota: Cuando se utiliza este tipo de importacin solo se importan las clases del paquete Estadstica no los subpaquetes.