Podcast Z #2: Animalario con lenguajes dinámicos
MP3
OGG (Vorbis)
OPUS
Síguenos en Twitter
Suscríbete por Apple Podcast
Donación BitCoin:
1GNbTi1tL2TakGs9S9o1n6p7AVJWtBhi33
Monkey Patching, Duck Typing e Inyección de Dependencias.
Autor: Jesús Cea & Pablo Lobariñas - Contacto: python2016@podcast.jcea.es
Fecha de grabación: 2011/03/20 - Duración: 34:58
Fecha de publicación: 2011/03/22
Palabras clave: Python
Descarga el audio: MP3 (11624576 bytes) - OGG (6913188 bytes)
Notas:
- 00:50: Se utiliza un caso real para explicar estas técnicas con más facilidad.
- 01:50: La librería estándar para el envío de correo electrónico en Python, la
SMTPlib, se nos queda pequeña (para este proyecto en concreto).
- 02:01: ¡Sí!, ¡por supuesto que usamos Python!.
- 02:12: Pero estas técnicas son aplicables también a otros lenguajes dinámicos.
- 02:48: Los motivos por los que la
SMTPlib se me quedaba pequeña: Quiero
"timeouts" dinámicos, quiero limitar el número de conexiones simultaneas por servidor de correo,
y quiero controlar la IP de origen de la conexión saliente.
- 05:52: ¿Por qué no modificamos el código directamente o utilizamos los mecanismos
de herencia normales?. Por mantenimiento de código y porque lo que queremos modificar no es
fácilmente accesible por herencia porque está muy "profundo" en la clase original.
- 09:04: Por fin entramos en materia. Empezamos con
Monkey Patching. Modificación
de código, clases y objetos en memoria.
- 12:44: ¿Cuándo es preferible utilizar
Monkey Patching en vez
de mecanismos más habituales?.
- 13:30: Otro ejemplo de
Monkey Patching: Los
"hot fixes"
tradicionales de ZOPE.
- 16:29: Por supuesto, esta técnica es compleja y delicada, y tiene sus riesgos.
- 18:17: Pasamos a hablar de
Duck Typing. Polimorfismo sin
herencia. Frase del día: "Es un pato a efectos prácticos". O su corolario posterior:
"Si parece un pato, es un pato. Aunque no lo sea" :-).
- 20:25: En lenguajes estáticos como Java, se utiliza el concepto de
"interfaces abstractos",
verificados en tiempo de compilación. Con Python no se realiza ninguna comprobación, y la compatibilidad
de tipos se decide en tiempo de ejecución, cuando se invocan métodos concretos con parámetros concretos.
- 22:19: Los interfaces abstractos te permite definir dos objetos como compatibles, aunque no
hereden de las mismas clases.
- 22:28: Un ejemplo de interfaces es la abstracción de ficheros en Python (o, por ejemplo, en
la filosofía UNIX de que todo es un fichero).
- 22:54: El Duck Typing
también tiene sus problemas.
- 25:09: Hay dos escuelas de pensamiento en casi todo, dicotomías por doquier.
- 26:00: Una forma de estar tranquilos es tener una buena
batería de test.
- 26:45: Hablamos ahora de
inyección de dependencias.
Recapitulamos y, ahora, todo encaja.
- 28:41: Desvinculamos la dependencia implícita interna que tiene una librería, y
la hacemos explícita y manipulable.
- 29:00: La inyección de dependencias te facilita mucho la vida a la hora de probar el código.
- 30:40: Bueno, en realidad el programa de ejemplo que he usado para ilustrar la descripción
de estas técnicas no funciona como se ha descrito :-). Se emplea también Monkey Patching,
pero de forma diferente y más estable
ante actualizaciones python. Lo detallé en mi web en 2007.
- 31:40: Fé de erratas.