Podcast Z #2: Animalario con lenguajes dinámicos

34:58
 
Compartir
 

Fetch error

Hmmm there seems to be a problem fetching this series right now. Last successful fetch was on April 07, 2020 17:00 (7M ago)

What now? This series will be checked again in the next day. If you believe it should be working, please verify the publisher's feed link below is valid and includes actual episode links. You can contact support to request the feed be immediately fetched.

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. http://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