Escolar Documentos
Profissional Documentos
Cultura Documentos
10
4. Jerarquías de clases
p
dir.edad = 45; edad
Directivo
emp
dir.sueldoBruto = 700; dir sueldo
dir.jefe = null; jefe
dir.categoria = 3;
categoría
System.out.println (dir.asString ());
5 6
La ligadura respecto a
// Bloque main los argumentos es estática
Directivo dir = new Directivo (); class A {
Empleado emp = new Empleado (); void f (Persona p) {
Empleado z = dir; System.out.println ("Clase Persona");
Persona p = new Persona (); }
Persona x = emp; void f (Empleado emp) {
Persona y = z; System.out.println ("Clase Empleado");
}
p.asString (); // asString de Persona } // Bloque main
emp.asString (); // asString de Empleado A a = new A ();
dir.asString (); // asString de Directivo Se ejecuta la definición Directivo dir = new Directivo (...);
x.asString (); // asString de Empleado compatible más específica Persona p = dir;
y.asString (); // asString de Directivo a.f (dir); Suponiendo que Persona
z.asString (); // asString de Directivo a.f (p); es subclase de Animal
y.promocionar (); // ERROR Animal x = p;
a.f (x); // ERROR
13 14
15 16
package p2;
Motivación
// Algoritmo de ordenacion
32
// Generalizacion
interface Ordenable {
boolean menor (Ordenable valor);
public class Algoritmos { }
public static void ordenar (Ordenable valores[]) {
int i, j; class Directivo extends Empleado implements Ordenable {
...
for (i = 0; i < valores.length; i++)
public boolean menor (Ordenable dir) {
for (j = valores.length-1; j > i; j--) return categoria < ((Directivo) dir).categoria;
if (valores[j]
(valores[j].menor
menor (valores[j
(valores[j-1]))
1])) }
intercambiar (valores, j, j-1); }
}
class Figura implements Ordenable {
}
...
Se necesita: public boolean menor (Ordenable fig) {
return area () < ((Figura) fig).area ();
Una forma genérica de referirse a datos ordenables }
Una definición de la relación de orden para cada tipo de datos ordenables }
33 34
35 36
Si Ordenable es una clase abstracta: Ordenable Una interfaz puede derivar de varias otras interfaces con extends
Obliga a derivar desde la cima de la jerarquía Las interfaces también pertenecen a un package
Declara f ( ) Implementa f ( )
Obliga a definir el método menor a nivel de Figura Persona Las interfaces pueden ser public o del package
interface I class A
Persona y de Empleado (si no, clases abstractas) Los métodos implementados deben ser public
Problema si Persona y Directivo son clases Polígono Empleado en las clases que implementan las interfaces
definidas por distintos programadores class B
Al implementar una interfaz, la clase pierde las
Triángulo Rectángulo Hexágono Directivo definiciones de los métodos que coincidan con Se pierde la definición
de f ( ) dada en A
métodos definidos en sus superclases
En general, siempre que sea posible y
tenga sentido, mejor interfaz que clase
41 42
Arquitectura para representar y manipular colecciones de datos Set AbstractCollection List Queue
43 44
Map
Colección genérica
Insertar,
Insertar eliminar
eliminar, pertenencia,
pertenencia iterar
SortedMap AbstractMap Dictionary
45 46
49 50
list1.equals (Object list2) puede devolver true aunque list2 no sea // Search
del mismo tipo de implementación que list1 int indexOf(Object o);
Implementaciones int lastIndexOf(Object o);
– ArrayList: encapsula un array dinámico (acceso cte., inserción/eliminación lineal)
// Backward iteration
– LinkedList: encapsula una lista enlazada (acceso lineal, inserción/eliminación cte.) ListIterator<E> listIterator();
addFirst (Object obj) addLast (Object obj) ListIterator<E> listIterator(int index);
getFirst () getLast () Sublista que comparte
// Range-view memoria con la lista original
removeFirst () removeLast ()
List<E> subList(int from, int to); Si la original cambia,
51
} resultado impredecible 52
Interfaz java.util.Map
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next(); Pares clave / elemento
void remove();
Las claves no se repiten
boolean hasPrevious();
E previous(); map1.equals (Object map2) puede devolver true aunque map2 no
sea del mismo tipo de implementación que map1
int nextIndex();
int previousIndex(); Implementaciones
void set (E e); – HashMap: tabla hash, máxima eficiencia
void add (E e);
} – TreeMap: árbol red-black, asegura orden de iteración
53 54
Interfaz java.util.SortedMap
public interface SortedMap<V,K> extends Map<V,K> {
Comparator<? super K> comparator();
Map ordenado por clave
Implementaciones: TreeMap
57 58
Saltarse
S lt la
l relación
l ió d de orden
d natural
t ld de un Comparable
– En colecciones ordenadas SortedSet ó SortedMap
Byte Character Short Integer Long Float Double
– Para algoritmos de búsqueda y ordenación
63 64
65
67 68