Podcast Z #2: Animalario con lenguajes dinámicos

34:58
 
Compartir
 

Manage episode 207895421 series 2332298
Por Jesús Cea and Pablo Lobariñas descubierto por Player FM y nuestra comunidad - los derechos de autor son propiedad de la editorial, no de Player FM, y el audio se transmite directamente desde sus servidores. Presiona el botón de suscripción para rastrear cambios en Player FM o pega el URL del feed en otras aplicaciones de podcast.
Monkey Patching, Duck Typing e Inyección de Dependencias. https://podcast.jcea.es/podcastz/2

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.

10 episodios