Download - Patrones de diseño: Polimorfismo
![Page 1: Patrones de diseño: Polimorfismo](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/1.jpg)
Patrones de Diseño:Polimorfismo
![Page 2: Patrones de diseño: Polimorfismo](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/2.jpg)
¿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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/3.jpg)
Programar para la interfaz no la implementación se hace posible usando los distintos tipos de polimorfismo.
![Page 4: Patrones de diseño: Polimorfismo](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/4.jpg)
¿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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/5.jpg)
Tipos de polimorfismo
![Page 6: Patrones de diseño: Polimorfismo](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/13.jpg)
public void executePayment(Payment paymentMode){ paymentMode.executePayment();}
![Page 14: Patrones de diseño: Polimorfismo](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042516/559ce00b1a28ab7e288b45cd/html5/thumbnails/16.jpg)
¿Preguntas?