patrones de diseño: polimorfismo

Post on 08-Jul-2015

1.183 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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

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"

Programar para la interfaz no la implementación se hace posible usando los distintos tipos de 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.

Tipos de 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) { ... }

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){ ...}

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); }

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.

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

// vs

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

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

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

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)

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

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

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 )

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 )

¿Preguntas?

top related