patrones de diseño: polimorfismo

16
Pa tr ones de Diseño: P olimor smo

Upload: autentia

Post on 08-Jul-2015

1.182 views

Category:

Technology


3 download

DESCRIPTION

Daniel Díaz, Consultor Tecnológico de Autentia habla sobre el ppolimorfismo, dentro de los workshops de Patrones de Diseño de Autentia.

TRANSCRIPT

Page 1: Patrones de diseño: Polimorfismo

Patrones de Diseño:Polimorfismo

Page 2: Patrones de diseño: Polimorfismo

¿Qué es?"El polimorfismo es la propiedad que permite que una misma operación sea aplicada a varios objetos de distintos tipos"

Page 3: Patrones de diseño: Polimorfismo

Programar para la interfaz no la implementación se hace posible usando los distintos tipos de polimorfismo.

Page 4: Patrones de diseño: Polimorfismo

¿Qué no es?"El polimorfismo te permite llamar métodos de una clase sin saber el tipo exacto de la clase"

"La herencia permite a clases derivadas de una compartir parte de la interfaz y compartir código"

Aunque se usen de maneras iguales ( extend ) no son lo mismo.

Page 5: Patrones de diseño: Polimorfismo

Tipos de polimorfismo

Page 6: Patrones de diseño: Polimorfismo

Polimorfismo estático ó Ad-Hoc

También conocido cómo function overloading ó sobrecarga de métodos en el mundo Java.

public Employee getEmployee(int id) { ... }

public Employee getEmployee(String name) { ... }

Page 7: Patrones de diseño: Polimorfismo

Polimorfismo dinámico ó Parametric Polymorphism

En Java se ha implementado mediante Generics:

ArrayList<String> strings = new ArrayList<String>();

// Gson.javapublic <T> T fromJson(String json, Type typeOfT){ ...}

Page 8: Patrones de diseño: Polimorfismo

En algunas Api's más antiguas se puede ver como se implementó aceptando un Objeto del tipo Object, cómo todos los objetos en Java extienden de Object se consigue el mismo funcionamiento: private JsonElement createJsonElement(Object value) { return value == null ? JsonNull.INSTANCE : new JsonPrimitive(value); }

Page 9: Patrones de diseño: Polimorfismo

SubtypingEs un tipo de polimorfismo en el que el subtipo (el pato por ejemplo), está relacionado con el supertipo (el pájaro) permitiendo usarlos indistintamente y sustituirlos sin problema.

Page 10: Patrones de diseño: Polimorfismo

private void feed(Bird aBird) { ... }

// vs

private void feed(Cuckoo aCuckoo) { ... }

private void feed(Duck aDuck) { ... }

private void feed(Ostrich aOstrich) { ... }

Page 11: Patrones de diseño: Polimorfismo

Detectar cuando puede ser interesante usar el polimorfismo4 Buscar clases o tipos que tengan comportamientos muy parecidos

4 Buscar metodos que usen if's

4 Asignar esa responsabilidad a distintos tipos (clases)

Page 12: Patrones de diseño: Polimorfismo

public void executePayment(String paymentMode){ if (paymentMode.equals(“Cash”)){ ... }else if(paymentsMode.equals("Card")){ ... }else if(paymentsMode.equals("Check")){ ... }}

Page 13: Patrones de diseño: Polimorfismo

public void executePayment(Payment paymentMode){ paymentMode.executePayment();}

Page 14: Patrones de diseño: Polimorfismo

Pros4 Permite hacer clases más genéricas, permitiendo

cambiar en el futuro la implementación.

4 Permite programar hacía la interfaz, ayuda mucho cuando la implementación no está clara todavía.

4 Facilita el testing ( black box testing )

Page 15: Patrones de diseño: Polimorfismo

Contras4 Es facil caer en la tentación de hacer las cosas

demasiado genéricas, aún habiendo muchas posibilidades de que no vayan a cambiar en el futuro ( YAGNI )

Page 16: Patrones de diseño: Polimorfismo

¿Preguntas?