Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría Soledad Páez Valverde Modificado hace 6 años
1
Diseño y Programación Orientada a Objetos
Conferencia # 9 Clases genéricas TEMA # 3: Herencia y Polimorfimo Facultad Ing. Informática ISPJAE
2
Contenido Clases y funciones genéricas.
Implementación de funciones miembros de clases parametrizadas. Instanciación de clases parametrizadas. Clase genérica ArrayList
3
Introducción Uno: a, b, c Dos: a, d, e ¿Abstracta o concreta? Tres
int b; int c; Dos int d; int e; Tres int a; Uno: a, b, c Dos: a, d, e ¿Abstracta o concreta?
4
Uno Dos resp1 a2+b+c a2*d*e resp2 b*c d+a a[i].resp1(); Tres[] a;
int b; int c; Dos int d; int e; Tres int a; Uno Dos resp1 a2+b+c a2*d*e resp2 b*c d+a a[i].resp1(); a[i].resp2(); Tres[] a;
5
Tres #int a; +resp1(){return a*a;} +abstract resp2(); Uno -int b; -int c; +resp1(){return super.resp1()+b+c;} +resp2(){return b*c;} Dos -int d; -int e; resp1(){return super.resp1()+d*e;} resp2(){return d+a;}
6
Clases genéricas Necesarias cuando al momento de implementar el código no se conocen algunos de los tipo de datos que se deben procesar. Colecciones Juan Ana Eva
7
Clases genéricas Mayor nivel de abstracción.
Especifican un parámetro en la definición, que representa un tipo de dato durante la ejecución. clases parametrizadas plantillas en C++ (template)
8
En Java Existen clases genéricas predefinidas desde las primeras versiones. A partir de la versión 1.5 se introduce la posibilidad de declarar clases genéricas. Generador de código parametrizado
9
Métodos genéricos El tipo de algunos de los datos que recibe o que se utilizan internamente, se especifican cuando se invoca al método.
10
Declaración Clase o interfaz
Clases genéricas public class C <T1,…,Tn> { ... } Métodos genéricos public <T1,…, Tn> void m(T1 p1, …, Tn pn) { Tipos de datos (clases) que se especifican al crear objetos Clase o interfaz
11
Ejemplo public class MYClass<A,B> { … }
12
Instanciando clases genéricas
por defecto heredan de Object Igual cantidad No permite primitivos: int, float, … public class MYClass<A,B> { … } MYClass <String, Integer> myclass= new MyClass<String, Integer>(); MYClass <String, Person> myclass; MYClass <String, MYClass <OtherClass,String>> myclass;
13
Contenedoras genéricas
Variante 1: public class GenericCollection<T>{ private Objetc[] data; … } Variante 2: private T[] data; …
14
Implementación (Var 1) public class GenericCollection<T> {
private Object[] data; private int count; private static final int DEFAULT_CAPACITY =10; public GenericCollection() { this(DEFAULT_CAPACITY); }
15
Implementación (Var 1) public GenericCollection(int cap) {
if(cap > 0) data= new Object[cap]; else data= new Object[DEFAULT_CAPACITY]; count = 0; }
16
Implementación (Var 1) private void ensureCapacity(int minCapacity) {
… Object[] newData= new Object[ …]; }
17
Implementación (Var 1) public void add(T t) {
if (count == data.length) ensureCapacity(count + 1); data[count++] = t; } public T get(int i){ if(inRange(i)) return (T)data[i]; else return null;
18
Implementación (Var 1) private boolean inRange(int index) {
boolean result= false; if(index >=0 && index < count) result= true; return result; }
19
Implementación (Var 1) public T remove(int index) { T oldValue= null;
if(inRange(index)) { oldValue = (T)data[index]; int num = count - index - 1; if(num > 0) System.arraycopy(data, index+1, data, index, num); data[--count] = null; } return oldValue; } }
20
Implementación (Var 2) public class GenericCollection<T> {
private T[] data; private int count; private static final int DEFAULT_CAPACITY=10;
21
Implementación (Var 2) public GenericCollection(T[] t, int count) {
data = t; this.count = count; }
22
Implementación (Var 2) public GenericCollection() { count = 0;
data = (T[]) new Object[DEFAULT_CAPACITY]; }
23
Implementación (Var 2) public T get(int i) { T result= null;
if (inRange(i)) result= data[i]; return result; }
24
Implementación (Var 2) public T remove(int index) { T oldValue= null;
if (inRange(index)) { oldValue = data[index]; … result= oldValue; } return result;
25
Clases genéricas con parámetros restringidos
Puede ser Person o cualquiera de sus derivadas public class GenericCollection<T extends Person> {…} Ejemplos: GenericCollection<Teacher> myCollection = new GenericCollection<Teacher>(); GenericCollection<Worker> myCollection = new GenericCollection<Worker>();
26
Utilidad ¿Si no se especifica?
public class GenericCollection<T extends Person> {… public T findById(String id){ int i= 0; while (i < count && !((T)data[i]).getID().equalsIgnoreCase(id)) i++; return i < count? (T)data[i] : null; } ¿Si no se especifica? ¿Qué pasa?
27
Jerarquía de clases genéricas
public class NumberCollection<T> extends GenericCollection<T> { … public T sum() { (T)s= 0; for(int i=0; i , count; i++) s+= (T)data[i]; return s; } …}
28
Clase genérica ArrayList
AbstractList<E> ArrayList<E>
29
Clase genérica ArrayList
public class ArrayList<E> extends AbstractList<E> …{ … private Object[] elementData; private int size;
30
Algunos métodos de ArrayList
ArrayList(): Construye lista vacía para 10 elementos ArrayList(int capacity): Construye lista vacía para capacity elementos. boolean add(E o): Agrega o al final de la lista E get(int index): devuelve elemento en index. E remove(int index): Elimina elemento en index.
31
Ejemplo de uso de ArrayList
ArrayList<Person> store = new ArrayList<Person>(20); Person item = new Person(); store.add(item);
32
Modificando CheesCollection
public class CheesCollection{ private ArrayList<Cheese> cheeses; public CheesCollection() { cheeses = new ArrayList<Cheese>(); } …
33
//Obtener importe total de la factura public float amount() { float sum = 0; for(int i = 0; i < cheeses.size(); i++) sum += cheeses.get(i).price(); return sum; }
34
//Obtener todos los quesos esféricos: public ArrayList<SphereCheese> sphereCheeseColl() { ArrayList<SphereCheese> sphChe = new ArrayList<SphereCheese>(); for(int i = 0; i < cheeses.size(); i++) if(cheeses.get(i) instanceof SphereCheese) sphChe.add((SphereCheese) cheeses.get(i)); return sphChe; }
35
Estudio Independiente
Caso de estudio: Escalafón para Técnicos Medio de Informática. Motivación Caso de estudio Integradores. Patrón Singleton
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.