La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Diseño y Programación Orientada a Objetos"— Transcripción de la presentación:

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


Descargar ppt "Diseño y Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google