Podcast Z

Podcast Z #2: Animalario con lenguajes dinámicos


Listen Later

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.
  • ...more
    View all episodesView all episodes
    Download on the App Store

    Podcast ZBy Jesús Cea & Pablo Lobariñas