2. ¿Qué es?
"El polimorfismo es la propiedad que permite que una
misma operación sea aplicada a varios objetos de
distintos tipos"
3. Programar para la interfaz no la implementación se
hace posible usando los distintos tipos de polimorfismo.
4. ¿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.
6. 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) {
...
}
7. Polimorfismo dinámico ó Parametric
Polymorphism
En Java se ha implementado mediante Generics:
ArrayList<String> strings = new ArrayList<String>();
// Gson.java
public <T> T fromJson(String json, Type typeOfT){
...
}
8. 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);
}
9. Subtyping
Es 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.
11. Detectar cuando puede ser interesante
usar el polimorfismo
4 Buscar clases o tipos que tengan comportamientos
muy parecidos
4 Buscar metodos que usen if's
4 Asignar esa responsabilidad a distintos tipos
(clases)
12. public void executePayment(String paymentMode){
if (paymentMode.equals(“Cash”)){
...
}else if(paymentsMode.equals("Card")){
...
}else if(paymentsMode.equals("Check")){
...
}
}
14. Pros
4 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 )
15. Contras
4 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 )