Documente Academic
Documente Profesional
Documente Cultură
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
1. Introduccin
Un programador debe encontrar soluciones implementables en un ordenador para problemas del mundo real
Un cerdo es 10111100 Producir leche se define como 11011000 11000001 00110000
1. Introduccin
La abstraccin permite al programador reducir la diferencia entre el modelo del mundo real y el modelo entendible por el computador. Abstraccin de datos: proceso por el que la definicin de los datos tiende un parecerse un los objetos del mundo real.
Abstraccin procedimiental: proceso por el que la definicin de funciones tiende un parecerse un tareas de alto nivel del mundo real.
5
A B S T R A C C I N O P E R A C I O N A L
A B S T R A C C I N D E D A T O S
PASCAL
public class QueHago { static final int MAX_SIZE = 50; public static void main (String [] args){ Scanner sc; double [] sequence = new double [MAX_SIZE]; int tam = 0; System.out.println (Introduzca secuencia de nmeros (acaba en 0):\n"); sc = new Scanner(System.in); do { sequence[tam] = sc.nextDouble(); tam++; }while (tam < MAX_SIZE && sequence[tam-1] != 0); for(int i = 1; i<tam; i++) for (int j = i; j>0; j--) de (sequence[j] < sequence[j-1]){ double aux = sequence[j]; sequence[j]=sequence[j-1]; sequence[j-1] = aux; } for(int i = 0; i<tam; i++) System.out.println(sequence[i]); } }
9
public class QueHago { public static void main (String [] args){ List<Double> sequence = new ArrayList<>();
}
private static void leerSecuencia(List<Double> seq){ double number; Scanner sc = new Scanner(System.in); do { number = sc.nextDouble(); seq.add(number); }while (number != 0); } private static void mostrarSecuencia(List<Double> seq){ for(Double number : seq) System.out.println(number); } }
10
1. Introduccin
Java es un Lenguaje de Programacin Orientado un Objetos
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
12
2. Clases y objetos
Qu es una clase? Una descripcin de un grupo de objetos del mundo real que tienen similar
Apariencia: Qu caractersticas utilizamos para describir un objeto? Comportamiento: Qu puede hacer un objeto?
2. Clases y Objetos
VEHCULO ANIMAL
PUNTO
(1, 3)
FIGURA (2, 2) (5, 2.5)
(2, 1)
14
Detectando clases
Queremos desarrollar una aplicacin para gestionar las notas de los alumnos matriculados en una determinada asignatura. La asignatura se imparte en distintos grados (INFORMATICA, SW y COMPUTADORES), cada uno de los cuales tiene diferentes grupos de alumnos (A, B y C). Cada alumno tiene un nombre y dos notas: una obtenida en el examen terico (notaTeora) y otra obtenida en el examen prctico (notaLab). Las posibles calificaciones son MH, SOBRESALIENTE, NOTABLE, APROBADO y SUSPENSO.
15
trasladar(a, b) distancia(pto)
mensaje(obj, args) ?
16
trasladar(a, b) distancia(pto)
mensaje(obj, args) ?
obj.mensaje(args)
pto
17
trasladar(0,3) dibujar()
19
Tipos de mtodos
Punto x, y: double Punto(a,b) numPuntos() : int trasladar(a, b) distancia(pto)
Constructores
Mtodos de clase No tienen sentido para objetos en particular (global) Mensaje enviado a la clase
Clases en Java
Estructuras que encapsulan datos y mtodos
class Punto { CONSTRUCTORES private double x, y; public Punto() { x = y = 0; } public Punto(double a, double b) { x = a; y = b;} public double abscisa() {return x;} public double ordenada() {return y;} public void abscisa(double a){x = a;} class <Nombre> public void ordinada(double b){y = b;} { public void trasladar(double a, double b){ <Attributos> x += a; y += b; <Mtodos> } public double distancia(Punto pto) { } return Math.sqrt(Math.pow(x - pto.x, 2) + Math.pow(y - pto.y, 2)); } } 21 MTODOS VARIABLES DE ESTADO
Point.java
Java
Punto x y
1 4 1 0
pto
public Punto(double a, double b) { x = a; y = b; } public void move(double a, double b) { x += a; y += b; } public double distancia(Punto p) { }
};
pto.trasladar(3,-1);
22
new Punto(2,2)
23
referencia a un objeto.
Mtodos de clase
Enviados a las clases (se necesita informacin global). No pueden utilizar variables de instancia.
} ExUser.java
26
+ ~
# protected
Ejemplo
public class Vuelo {
28
2.5 Objetos
Qu es un objeto? La instancia de una clase. Durante la ejecucin de un programa
Se crean objetos que interaccionan y cooperan (a travs de mensajes)
Los objetos innecesarios se destruyen automticamente (recolector de basura)
29
30
new <constructor>(<argumentos>)
new devuelve una referencia al objeto creado, el cual
Se puede asignar a una variable
pto = new Punto(3, 4); Se puede usar en una expresin pto.distancia(new Punto(2,3));
31
2.5.2 Constructores
Mtodos para crear objetos. No tienen tipo de salida y su nombre coincide con el de la clase.
Si una clase no define ningn constructor, Java asume uno por defecto (constructor sin argumentos)
Si uno o ms constructores existen, el constructor por defecto no se crea.
32
Si el mtodo o variable no es visible no se puede utilizar. Si lo hacemos, obtendremos un error en tiempo de compilacin.
34
definirse
Segmento
trasladar(a, b) longitud()
(3,2)
1,41421 longitud()
(1,1)
trasladar(2,1)
(2,1)
(0,0)
41
Ejemplo. Asignacin
public class Segmento { private Punto origen, extremo; public Segmento(Punto pto1, Punto pto2) { origen = pto1; extremo = pto2; } ... // Otros mtodos public double longitud() { return origen.distancia(extremo); } }
42
Ejemplo. Duplicacin
public class Segmento { private Punto origen, extremo; public Segmento(Punto pto1, Punto pto2) { origen = new Punto(pto1.x(), pto1.y()); extremo = new Punto(pto2.x(), pto2.y()); } ... // Otros mtodos public double longitud() { return origen.distancia(extremo); } }
Solo se utiliza en caso de no querer que los objetos componentes sean accesibles desde otros objetos. En este caso hay que asegurarse de que ninguno de los mtodos de acceso van a proporcionar referencias a estos componentes.
43
o Entidad dinmica (creada en ejecucin) o Cada objeto tiene su propio estado(identidad) o Objetos de una clase comparten su comportamiento
45
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
46
Segmento
48
Cada fichero .java puede contener varias clases, pero slo una clase pblica.
49
Win32
Bytecodes HelloWorld.class
java
MacOS
javac
Se Precompila
y se Interpreta
Solaris
50
FirstClass.class SecondClass.class
Ejecucin de un programa (conjunto de fiehcros .class): Pasar el fichero .class que contiene la clase con el mtodo main a la mquina virtual de Java.
java FirstClass.class
51
3.4 Paquetes
Las clases se organizan en paquetes. estructuras lgicas que contienen todas las clases relacionadas (biblioteca de clases).
Clases pertenencientes al mismo paquete se deben localizar en la misma carpeta del disco duro.
52
3.4 Paquetes
Los paquetes del sistema se pueden encontrar en carpetas especficas:
.../java .../javax
La variable CLASSPATH contiene una lista con todos caminos de bsqueda de los dems paquetes.
53
java.io
Paquetes
54
...
55
Ejemplo
Programa para calcular el valor medio de un milln de nmeros generados aleatoriamente, usando las clases
Random del paquete java.util System del paquete java.lang
public class TestAleatorio { public static void main(String[] args) { java.util.Random rnd = new java.util.Random(); double sum = 0.0; for (int i = 0; i < 1000000; i++) { sum += rnd.nextDouble(); } System.out.println(media = + sum / 1000000.0); } }
58
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
59
60
61
Java
pto
62
Java
1 3
pto
Punto pt1 = new Punto(1, 3); Punto pt2 = new Punto(2, 5); Segmento sg = new Segmento(pt1, pt2);
Punto Segmento origen destino
x
y
1 3
Punto
pt1
sg
x y
2 5
pt2
63
Se permiten conversiones explcitas en sentido contrario mediante la construccin: (<tipo/clase>) <expresin> Slo se comprueban durante la ejecucin.
64
4.2 Constantes
Una variable se puede declarar como constante precediendo su declaracin con la etiqueta final: final int NUM_BARCOS = 10; La inicializacin de una variable final se puede hacer en cualquier momento posterior a su declaracin. Cualquier intento de cambiar el valor de una variable final despus de su inicializacin produce un error en tiempo de compilacin.
66
4.3 Identificadores
Un identificador (nombre) es una secuencia arbitraria de caracteres Unicode: letras, dgitos, subrayado o smbolos de monedas. No debe comenzar por dgito ni coincidir con alguna palabra reservada.
int nmero;
Por convenio:
Nombres de variables y mtodos en minsculas. Si son compuestos, las palabras no se separan y comienzan con mayscula.
long valorMximo;
Nombres de clase igual, pero comenzando con mayscula.
67
4.4 mbitos
class MiClase { ...
Variables de clase
{... }
catch(...) {
Parmetros catch
} }
}
69
71
4.6 Expresiones
Una expresin es una combinacin de
literales, variables, operadores y mensajes,
!=
^=)
73
75
Ejemplos de expresiones:
3 + 4 / 2 x = y = 3 x > 3 && y 3 * (x = 5) x = ++y / 2 x = y++ / 2
76
4.8 Instrucciones/sentencias
Existen tres clases de instrucciones o sentencias:
Sentencias de expresin Se obtienen terminando en ; alguna de las expresiones siguientes:
asignaciones incrementos/decrementos ++/-mensajes creaciones de objeto
Las sentencias de declaracin pueden agruparse con las de asignacin a las mismas variables:
int x = 5, y = 12, z = 213;
78
79
80
82
Ejemplo:
int mes; ... switch (mes) { case 1: System.out.println(Enero); break; case 2: System.out.println(Febrero); break; ... case 12: System.out.println(Diciembre); break; }
83
84
4.9 Bloques
Grupo de cero o ms sentencias, encerradas entre llaves, dando lugar a una sentencia compuesta.
{ <sentencia1> ... <sentenciaN> }
Un bloque se puede usar en cualquier parte donde se necesite una sentencia simple.
85
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
86
87
5. Mtodo toString()
Devuelve una cadena que representa el estado actual del objeto
class Punto { private double x, y; public String toString() { return ( + x + , + y + ); } }
88
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
90
Objetos que representan estructuras de datos de longitud fija con componentes de un mismo tipo o clase. Con una sintaxis particular: Declaracin int [] listaEnteros; Punto [] listaPuntos; componentes Inicializacin tamao listaEnteros = new int[10]; listaPuntos = new Punto[23]; char[] vocales = {a, e, i, o, u}; array literal Punto p = new Punto(1, 1); Punto[] ap = {new Punto(2, 2), p, null}; La longitud se guarda en la constante length.
91
92
93
Ejercicio
Cul es el contenido del array creado con el siguiente trozo de cdigo?
int [][] array1 = new int[2][3];
for (int row = 0; row< array1.length; row++) for(int column =0; column < array1[row].length; column++) array1[row][column] = row;
94
Ejercicio
Cul es el contenido del array creado con el siguiente trozo de cdigo?
int [][] array1 = new int[2][]; array1[0] = new int[5]; for (int i = 0; i< array1[0].length; i++) array1[0][i] = i-3; array1[1] = new int[2]; array1[1][0] = 500; array1[1][1] = -500;
95
96
97
98
para aprender la funcin de los mtodos: copyOf (T[] original, int newLength) copyOfRange (T[] original, int from, int to) de la clase java.util.Arrays
99
Recorridos en arrays
char[] arrayOrigen = {d,e,s,c,a,f,e,i,n,a,d,o};
for (int i = 0; i < arrayOrigen.length; i++){ System.out.println(arrayOrigen[i]); }
100
Mostrar un array
El siguiente segmento de cdigo
int[] ar = {1, 3, 5, 7, 9}; System.out.println(java.util.Arrays.toString(ar));
La clase Arrays est en java.util y se estudiar ms adelante. Tiene muchas ms funcionalidades como algoritmos de bsqueda, ordenacin, etc.
101
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
102
Los valores son identificadores que se utillizan como constantes de clase (<Clase>.<ValorEnumerado>) Una variable de tipo enumerado puede recibir cualquiera de los valores enumerados del tipo.
Cardsuit favourite = Cardsuit.Diamonds;
103
clase Example { public static void main(String [] args) { Week s = Week.Mon; Week t = Week.valueOf(Wed);// Week.Wed
for(Week se : Week.values()) { System.out.print(se + ); } }
Clases anidadas
Clases definidas dentro del cuerpo de otra clase. Se pueden distinguir diversos tipos (internas, locales, annimas), dependiendo del mbito en el que se declaren. Estudiaremos las clases internas estticas Se definen como las variables de clase de la clase externa (static). Para acceder a ellas debe cualificarse con el nombre de la clase externa (si es visible).
105
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
107
8.1 Composicin
Mecanismo que permite la creacin de nuevos objetos a partir de otros ya implementados. Responde a una relacin de tipo tiene o est compuesto por.
Segmento
108
8.1 Composicin
public class Segmento { private Punto origen, extremo; public Segmento(double x1, double y1, double x2, double y2) { origen = new Punto(x1, y1); extremo = new Punto(x2, y2); } ... // Otros mtodos public double longitud() { return origen.distancia(extremo); } }
109
Una recta podra implementarse con un vector y un punto. El punto es uno cualquiera de la recta y el vector proporciona la direccin de la misma.
La recta tiene o est definida por un punto y un vector
Vector(5, 2)
Punto(-3, 4)
110
111
8.2 Herencia
Nueva posibilidad para reutilizar cdigo.
Algo ms que:
incluir ficheros, o importar mdulos
Polgono
Elipse
FiguraCerrada
Pentgono
Cuadriltero
Crculo
Rectngulo
Rombo
112
8.2 Herencia
Padres / Ascendientes / Superclase
Punto
Una subclase dispone de los atributos y mtodos de la superclase, y puede aadir otros nuevos.
La subclase puede modificar el comportamiento heredado (por ejemplo, redefiniendo algn mtodo heredado) .
Partcula
La herencia es transitiva. Los objetos de una clase que hereda de otra pueden verse como objetos de esta ltima.
113
public class Partcula extends Punto { protected double masa; final static double G = 6.67e-11; public Partcula(double m) { Se refiere a this(0, 0, m); Partcula(double, double, } double) public Partcula(double a, double b, double m) { super(a, b); Se refiere a masa = m; Punto(double, double) } public void masa(double m) { masa = m; } public double masa() { return masa; } public double atraccin(Partcula part) { double d = this.distancia(part); return G * masa * part.masa() / (d * d); } }
114
Polgono
permetro( ): double
Resultado = 4 * lado
permetro( ): double
Punto
x, y: double
origen
Segmento
trasladar(a, b) longitud()
116
118
119
El mtodo redefinido queda oculto en la subclase por el nuevo mtodo. Una redefinicin puede ampliar la visibilidad de un mtodo.
120
121
El compilador rechazar cualquier intento de definir una subclase para una clase etiquetada con final. Tambin se pueden etiquetar con final:
mtodos, para evitar su redefinicin en alguna posible subclase. variables, para mantener constantes sus valores o referencias.
122
8.6.1 Polimorfismo sobre los datos Un lenguaje tiene capacidad polimrfica sobre los datos si
una variable declarada de un tipo (o clase) determinado tipo esttico puede hacer referencia en tiempo de ejecucin a valores (objetos) de tipo (clase) distinto tipo dinmico .
La capacidad polimrfica de un lenguaje no suele ser ilimitada, y en los LOOs est habitualmente restringida por la relacin de herencia:
El tipo dinmico debe ser descendiente del tipo esttico.
La restriccin dada por la herencia permite construir estructuras con elementos de naturaleza distinta, pero con un comportamiento comn:
124
Java
part
pto
(Partcula)
(Partcula)
x=0 y=0 m=2
x=0 y = 0 m = ??
125
La invocacin del mtodo que ha de resolver un mensaje se retrasa al tiempo de ejecucin, y se hace depender del tipo dinmico del objeto receptor.
Qu significa vinculacin esttica? La invocacin de un mtodo que resuelve el mensaje queda fijada en tiempo de compilacin. En este caso, el compilador selecciona el mtodo adecuado consultando la clase que se utiliz en la declaracin del objeto.
126
Square
permetro{^4*side}
Cmo traduce el compilador la expresin obj.permetro() ? (1) Comprueba que el tipo esttico de obj (la clase Polgono) acepta el mensaje permetro(), (i.e. se asegura de que existe al menos una definicin para el mtodo) (2) Se utiliza la vinculacin dinmica para, en tiempo de ejecucin, elegir la versin del mtodo a ejecutar (en el ejemplo permetro() de la clase Cuadrado)
127
public class PuntoAcotado extends Punto { private Punto esquinaI, esquinaD; public public public public public PuntoAcotado() { } PuntoAcotado(Punto eI, Punto eD) { } double ancho() { } double alto() { } void trasladar(double a, double b) {
super.trasladar(a, b); if (abscisa() < esquinaI.abscisa()) abscisa(esquinaI.abscisa()) if (abscisa() > esquinaD.abscisa()) abscisa(esquinaD.abscisa()) if (ordenada() < esquinaI.ordenada()) ordenada(esquinaI.ordenada()) if (ordenada() > esquinaD.ordenada()) ordenada(esquinaD.ordenada())
}
}
128
pac PuntoAcotado PuntoAcotado V public class Punto { x =0 2 x= I private double x, y; y =0 5 y= N public Punto() { } pto C U public void trasladar(double a, double b) { L x += a; y += b; A } C public double distancia(Punto p) { } I } N Punto eI = new Punto(0, 0);
D I N M I C A
Punto eD = new Punto(5, 5); Punto pto; PuntoAcotado pac = new PuntoAcotado(eI, eD); pto = pac; pto.trasladar(2, 7);
129
130
SALIDA: Ejemplo1.java clase A { char c = 'A'; } clase B extends A { char c = 'B'; } public clase Ejemplo1 { public static void main(String[] args) { A p = new A(); B s = new B(); A t = s; System.out.println(p.c); System.out.println(s.c); System.out.println(t.c); } }
A B A
131
public class Uno { public int test() { return 1; } public int resultado1() { return this.test(); } } public class Dos extends Uno { public int test() { return 2; } }
public class Tres extends Dos { public int resultado2() { return this.resultado1(); } public int resultado3() { return super.test(); } }
public class Cuatro extends Tres { public int test() { return 4; } } public class Prueba { public static void main(String[] args) { Tres obj3 = new Tres(); Cuatro obj4 = new Cuatro(); System.out.println("obj3.test() System.out.println("obj3.resultado2() System.out.println("obj3.resultado3() System.out.println("obj4.resultado1() System.out.println("obj4.resultado2() System.out.println("obj4.resultado3() } }
= = = = = =
+ + + + + +
public class Uno { public int test() { return 1; } public int resultado1() { return this.test(); } } public class Dos extends Uno { public int test() { return 2; } }
public class Tres extends Dos { public int resultado2() { return this.resultado1(); } public int resultado3() { return super.test(); } public int test() { return 3; } } class Cuatro extends Tres { public int test() { return 4; } } public class Prueba { public static void main(String[] args) { Tres obj3 = new Tres(); Cuatro obj4 = new Cuatro(); System.out.println("obj3.test() System.out.println("obj3.resultado2() System.out.println("obj3.resultado3() System.out.println("obj4.resultado1() System.out.println("obj4.resultado2() System.out.println("obj4.resultado3() } }
= = = = = =
+ + + + + +
public class Uno { public int test() { return 1; } public int resultado1() { return this.test(); } } public class Dos extends Uno { public int test() { return 2; } }
public class Tres extends Dos { public int resultado2() { return this.resultado1(); } public int resultado3() { return super.test(); } public int test() { return 3; } } public class Cuatro extends Tres { public int test() { return 4; } } public class Prueba { public static void main(String [] args) { Uno obj3 = new Tres(); Tres obj4 = new Cuatro(); System.out.println("obj3.test() = System.out.println("obj3.resultado2() = System.out.println("obj3.resultado3() = System.out.println("obj4.resultado1() = System.out.println("obj4.resultado2() = System.out.println("obj4.resultado3() = } }
+ + + + + +
C.java clase A { SALIDA: static void f() { System.out.println(A); } void g() { this.f(); } } clase B extends A { static void f() { System.out.println(B); } } public clase C { public static void main(String[] args) { A un = new B(); a.g(); a.f(); } }
A A
135
Contenido
1. 2. 3. 4. 5. 6. 7. 8. 9. Introduccin Clases y objetos Programas y paquetes Elementos bsicos Cadenas de caracteres Arrays Clases anidadas Composicin y herencia Clases abstractas e interfaces
136
Se pueden declarar variables cuyo tipo esttico sea una clase abstracta. Con ello podrn referirse a objetos de las diversas clases descendientes
137
Java
CLASE ABSTRACTA
abstract public class Polgono { private Punto vrtices[]; public void trasladar(double a, double b){ for (int i = 0; i < vrtices.length; i++) vrtices[i].trasladar(a, b); } public double permetro() { double per = 0; for (int i = 1; i < vrtices.length; i++) per = per + vrtices[i - 1].distancia(vrtices[i]); return per + vrtices[0].distancia(vrtices[vrtices.length]); } abstract public double rea(); } MTODO ABSTRACTO
Clases abstractas
Las clases abstractas definen un protocolo comn en una jerarqua de clases. Obligan a sus subclases a implementar los mtodos que se declararon como abstractos.
De lo contrario, esas subclases se siguen considerando abstractas.
En Java, adems de clases abstractas se pueden definir interfaces (que se pueden considerar clases completamente abstractas).
139
public abstract class Polgono { protected Punto[] vrt; public Polgono(Punto[] vs) { vrt = vs; } public void trasladar(double a, double b) { for (Punto pto : vrt) pto.trasladar(a,b); } public double permetro() { Punto ant = vrt[vrt.length]; double res = 0; for (Punto pto : vrt) { res + = pto.distancia(ant); ant = pto; } return res; } abstract public double rea(); // No sabemos calcularla } public class Cuadrado extends Polgono { public class Rectngulo extends Polgono { public Cuadrado() {} public double rea() { return lado() * lado(); } public double lado() { return vrt[0].distancia(vrt[1]); } public String toString() {}
public Rectngulo() {} public double rea() { return base() * altura(); } public double base() { return vrt[0].distancia(vrt[1]); } public double altura() { return vrt[1].distancia(vrt[2]); } } public String toString() {}
140
9.2 Interfaces
Define un protocolo de comportamiento, es decir un contrato que las clases debern respetar.
Las clases pueden implementar la interfaz respetando el contrato. Se utilizarn cuando se demande el contrato.
Una interfaz slo puede ser extendida por otra interfaz. Una interfaz puede heredar de varias interfaces. Una clase puede implementar varias interfaces.
142
Definicin de interfaces
En una interfaz slo se permiten constantes y mtodos abstractos.
public static final package, en caso de omisin
public interface miInterfaz extends interfaz1, interfaz2 { String CAD1 = SUN; String CAD2 = PC; void valorCambiado(String producto, int val); ... }
public abstract
143
Implementacin de interfaces
Cuando una clase implementa una interfaz,
se adhiere al contrato definido en la interfaz y en sus superinterfaces, hereda todas las constantes definidas en la jerarqua, Adherirse al contrato quiere decir que debe implementar todos los mtodos
(salvo que sea una clase que se quiera mantener abstracta en cuyo caso, los mtodos no implementados aparecern como abstract).
public class MiClase extends Superclase1 implements Interfaz1, Interfaz2,... { ... }
144
public interface SecuenciaEnteros { void insertar(int pos, int elem); void eliminar(int pos); int mximo(); boolean pertenece(int elem); boolean esVaca(); int tamao(); }
implements SecuenciaEnteros { private numElementos = 0; int[] secuencia; public SecuenciaEntEsttica(int tam) { secuencia = new int[tam]; numElementos = 0; } public public public public public public public void insertar(int p, int e) {} void eliminar(int p) {} int mximo() {} boolean pertenece(int e) {} boolean esVaca() {} int tamao() {} String toString() {}
implements SecuenciaEnteros { static protected class Nodo { int dato; Nodo siguiente; } private Nodo primero; public SecuenciaEntDinmica() {} public public public public public public public void insertar(int p, int e) {} void eliminar(int p) {} int mximo() {} boolean pertenece(int e) {} boolean esVaca() {} int tamao() {} void aadir(SecuenciaEnteros sec)
{} }
145
Uso de interfaces
Se pueden declarar variables y parmetros de tipo una interfaz. Se requieren instancias de clases que implementen la interfaz.
Interfaz SecuenciaEnteros sec; sec = new SecuenciaEntEsttica(100); // Inserciones mltiples sobre la secuencia Objeto de clase que implementa la interfaz
if (sec.tamao() == 100) { SecuenciaEnterosDinmica sec1; sec1 = new SecuenciaEnterosDinmica(); sec1.aadir(sec); sec = sec1; } // Nuevas inserciones
146
Qu debera saber?
1. La diferencia entre
a) b) c) d) e) Clase y objeto Mtodo y mensaje Composicin y herencia Vinculacin esttica y dinmica Clase abstracta e interfaz
2. Para qu se utiliza la herencia? 3. Qu significa polimorfismo sobre los datos? 4. Utilizar el lenguaje Java para escribir programas sencillos que utilicen los elementos y mecanismos de la programacin orientada a objetos.
147