SlideShare una empresa de Scribd logo
Estados Imposibles
(Y como evitarlos)
Juan Ignacio Rodrígue de León
@jileon
De que va
 Qué son los estados imposibles y
por qué deberíamos evitarlos
 Ejemplos de estados imposibles y
como evitarlos
 Enlaces y resumen
 Make Invalid States
Unrepresentable
Art by Maomi - https://www.pinterest.com/pin/565905509422569311/
Principio de diseño
 Suele usarse para los tipos de datos, pero
se aplica a Estructuras, bases de datos, etc.
 La idea es reducir o eliminar los estados en
los que pueden estar los datos, idealmente
haciendo imposible representar estados
inválidos
Para campos estado
Obviamente es aplicable cuando tenemos codificado un
estado directamente.
Por ejemplo, supongamos un sistema de publicaciones
con tres estados posibles:
🔘 En preparación
🔘 En borrador
🔘 Publicado
Estas cosas pasan
¿Es un borrador?
Disclaimer
Solo Estados excluyentes
Una posible solución
No, es broma
 El estado no se refiere solo a estos
estados especificos, cualquier
configuración de datos tiene un
estado
 Vamos a ver otro ejemplo en que
no hay un estado explicito, pero
nuestra elección de la estructura de
datos implica un estado
Periodos contiguos de tiempo
 Vamos a representar una serie de
periodos contiguos en el tiempo
 Por ejemplo, en una aplicación que
me permita monitorizar en todo
momento lo que estoy haciendo (o
dejndo de hacer)
¡Fácil!
Pero...
Permite representar estados
imposibles (En este caso, no
deseados)
...Huecos
...Solapamiento
Eliminar redundacia
 Podemos hacer que sea imposible
representar periodos con huecos
y/o que se superpongan
 Similar a normalizar una base de
datos: Eliminar la redundacia
Eliminar fecha final
 La marca de final de un periodo es
redundante con la de inicio del
siguiente
 Así que solo necesitamos una única
fecha, la de inicio. El final está
definido por el inicio del siguiente
periodo
Menos es más
Ventajas
Podemos ver algunas ventajas de
esta representación analizando
algunas de las operaciones que
podríamos hacer
Dividir un periodo
 Primer caso:
 Hacer ajustes en el periodo anterior
 Insertar un nuevo periodo (posiblemente consultando
el periodo siguiente)
 Verificar las restricciones impuestas
 Segundo caso:
 añadir una fecha el conjunto
Vale, pero ...
 Yo sigo necesitando trabajar con periodos, con su inicio y final
(Por ejemplo, porque tengo código ya funcionando que usa ese
convenio)
 Resulta trivial proyectar la secuencia de fechas a esta forma
 Mientras la representación subyacente siga siendo una lista de
fechas, las restricciones de los periodos siempre se cumplirán
Algo así...
Ya casi estamos
Clases y Objetos
Vamos a representar un
semáforo en un cruce
Primera aproximación
My work here is done
¿Qué podría salir mal..?
Segunda versión¹
Segunda versión¹
Segunda versión²
Resumen
 Conviene echar una pensada sobre los estados y ver si podemos
representar estados imposibles, y en ese caso, intentar eliminar
esa posibilidad
 Cualquier conjunto de datos interrelacionados son un estado
 La representación de un objeto “real” no tiene por que seguir su
estructura “fisica”
Enlaces
 Charla en YouTube Making Impossible States
Impossible por Richard Feldman
https://www.youtube.com/watch?v=IcgmSRJHu_8
 Artículo de Kevin Mahoney Applying "Make
Invalid States Unrepresentable"
https://kevinmahoney.co.uk/articles/applying-misu
Estados imposibles y como evitarlos

Más contenido relacionado

Más de Juan Rodríguez

Charla introducción a RaspberryPI
Charla introducción a RaspberryPICharla introducción a RaspberryPI
Charla introducción a RaspberryPI
Juan Rodríguez
 
Guia (breve) de supervivencia a python 3
Guia (breve) de supervivencia a python 3Guia (breve) de supervivencia a python 3
Guia (breve) de supervivencia a python 3
Juan Rodríguez
 
¡A todo Kanban! ~ Introducción a kanban
¡A todo Kanban! ~ Introducción a kanban¡A todo Kanban! ~ Introducción a kanban
¡A todo Kanban! ~ Introducción a kanban
Juan Rodríguez
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
Juan Rodríguez
 
01 el lenguaje Python
01 el lenguaje Python01 el lenguaje Python
01 el lenguaje Python
Juan Rodríguez
 
00 introducción a Python
00 introducción a Python00 introducción a Python
00 introducción a Python
Juan Rodríguez
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
Juan Rodríguez
 
Presentación appy/pod
Presentación appy/podPresentación appy/pod
Presentación appy/pod
Juan Rodríguez
 
Presentacion Google Mini Adeje 16 Oct 2008
Presentacion Google Mini Adeje 16 Oct 2008Presentacion Google Mini Adeje 16 Oct 2008
Presentacion Google Mini Adeje 16 Oct 2008
Juan Rodríguez
 
Algunos recursos para desarrollo Web
Algunos recursos para desarrollo WebAlgunos recursos para desarrollo Web
Algunos recursos para desarrollo Web
Juan Rodríguez
 
Hojas de estilo CSS (Cascade Style Sheets)
Hojas de estilo CSS (Cascade Style Sheets)Hojas de estilo CSS (Cascade Style Sheets)
Hojas de estilo CSS (Cascade Style Sheets)
Juan Rodríguez
 
Extranet Parlamento
Extranet ParlamentoExtranet Parlamento
Extranet Parlamento
Juan Rodríguez
 

Más de Juan Rodríguez (12)

Charla introducción a RaspberryPI
Charla introducción a RaspberryPICharla introducción a RaspberryPI
Charla introducción a RaspberryPI
 
Guia (breve) de supervivencia a python 3
Guia (breve) de supervivencia a python 3Guia (breve) de supervivencia a python 3
Guia (breve) de supervivencia a python 3
 
¡A todo Kanban! ~ Introducción a kanban
¡A todo Kanban! ~ Introducción a kanban¡A todo Kanban! ~ Introducción a kanban
¡A todo Kanban! ~ Introducción a kanban
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
01 el lenguaje Python
01 el lenguaje Python01 el lenguaje Python
01 el lenguaje Python
 
00 introducción a Python
00 introducción a Python00 introducción a Python
00 introducción a Python
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
Presentación appy/pod
Presentación appy/podPresentación appy/pod
Presentación appy/pod
 
Presentacion Google Mini Adeje 16 Oct 2008
Presentacion Google Mini Adeje 16 Oct 2008Presentacion Google Mini Adeje 16 Oct 2008
Presentacion Google Mini Adeje 16 Oct 2008
 
Algunos recursos para desarrollo Web
Algunos recursos para desarrollo WebAlgunos recursos para desarrollo Web
Algunos recursos para desarrollo Web
 
Hojas de estilo CSS (Cascade Style Sheets)
Hojas de estilo CSS (Cascade Style Sheets)Hojas de estilo CSS (Cascade Style Sheets)
Hojas de estilo CSS (Cascade Style Sheets)
 
Extranet Parlamento
Extranet ParlamentoExtranet Parlamento
Extranet Parlamento
 

Último

REPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdf
REPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdfREPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdf
REPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdf
IrapuatoCmovamos
 
Presentación simple corporativa degradado en violeta blanco.pptx
Presentación simple corporativa degradado en violeta blanco.pptxPresentación simple corporativa degradado en violeta blanco.pptx
Presentación simple corporativa degradado en violeta blanco.pptx
eleandroth
 
INTELIGENCIA ARTIFICIAL monografia02.pdf
INTELIGENCIA ARTIFICIAL monografia02.pdfINTELIGENCIA ARTIFICIAL monografia02.pdf
INTELIGENCIA ARTIFICIAL monografia02.pdf
YulEz1
 
UGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptx
UGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptxUGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptx
UGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptx
Mayra798665
 
Informe fina mini bibliotecacomunitaria .docx
Informe fina mini bibliotecacomunitaria .docxInforme fina mini bibliotecacomunitaria .docx
Informe fina mini bibliotecacomunitaria .docx
mirimerlos5
 
Plan Emergencia solicitado en obras de construccion
Plan Emergencia  solicitado en obras de construccionPlan Emergencia  solicitado en obras de construccion
Plan Emergencia solicitado en obras de construccion
christianllacchasand
 
resumen de manual de organizacion y funciones de TI
resumen de manual de organizacion y funciones de TIresumen de manual de organizacion y funciones de TI
resumen de manual de organizacion y funciones de TI
riveroarlett5b
 
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIO
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIOLINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIO
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIO
AaronPleitez
 
10 colonias - Análisis socio-demográfico 2024.pdf
10 colonias - Análisis socio-demográfico 2024.pdf10 colonias - Análisis socio-demográfico 2024.pdf
10 colonias - Análisis socio-demográfico 2024.pdf
IrapuatoCmovamos
 
Plan de Compensación Dxn Internacional peru pdf
Plan de Compensación Dxn Internacional peru pdfPlan de Compensación Dxn Internacional peru pdf
Plan de Compensación Dxn Internacional peru pdf
agustincarranza11
 
vivienda segura concreto, construcción y métodos
vivienda segura concreto, construcción y métodosvivienda segura concreto, construcción y métodos
vivienda segura concreto, construcción y métodos
DilmerCarranza
 
04 capital interes simple.pdf de la clase métodos cuantitativos
04 capital interes simple.pdf de la clase métodos cuantitativos04 capital interes simple.pdf de la clase métodos cuantitativos
04 capital interes simple.pdf de la clase métodos cuantitativos
MarcoPolo545324
 
ANA0003227-lagunas.pdfñlñlñlñlñññlñlllll
ANA0003227-lagunas.pdfñlñlñlñlñññlñlllllANA0003227-lagunas.pdfñlñlñlñlñññlñlllll
ANA0003227-lagunas.pdfñlñlñlñlñññlñlllll
eliassalascolonia43
 
MI CECTOR POSTE BLANCO - Paián .pdf
MI  CECTOR  POSTE  BLANCO - Paián   .pdfMI  CECTOR  POSTE  BLANCO - Paián   .pdf
MI CECTOR POSTE BLANCO - Paián .pdf
GustavoTello19
 

Último (14)

REPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdf
REPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdfREPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdf
REPORTE-HEMEROGRÁFICO-MAYO 2024-IRAPUATO.pdf
 
Presentación simple corporativa degradado en violeta blanco.pptx
Presentación simple corporativa degradado en violeta blanco.pptxPresentación simple corporativa degradado en violeta blanco.pptx
Presentación simple corporativa degradado en violeta blanco.pptx
 
INTELIGENCIA ARTIFICIAL monografia02.pdf
INTELIGENCIA ARTIFICIAL monografia02.pdfINTELIGENCIA ARTIFICIAL monografia02.pdf
INTELIGENCIA ARTIFICIAL monografia02.pdf
 
UGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptx
UGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptxUGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptx
UGEL SAN MIGUEL SACALE TARJETA ROJA A LA VIOLENCIA.pptx
 
Informe fina mini bibliotecacomunitaria .docx
Informe fina mini bibliotecacomunitaria .docxInforme fina mini bibliotecacomunitaria .docx
Informe fina mini bibliotecacomunitaria .docx
 
Plan Emergencia solicitado en obras de construccion
Plan Emergencia  solicitado en obras de construccionPlan Emergencia  solicitado en obras de construccion
Plan Emergencia solicitado en obras de construccion
 
resumen de manual de organizacion y funciones de TI
resumen de manual de organizacion y funciones de TIresumen de manual de organizacion y funciones de TI
resumen de manual de organizacion y funciones de TI
 
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIO
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIOLINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIO
LINEA DE TIEMPO Y PERIODO INTERTESTAMENTARIO
 
10 colonias - Análisis socio-demográfico 2024.pdf
10 colonias - Análisis socio-demográfico 2024.pdf10 colonias - Análisis socio-demográfico 2024.pdf
10 colonias - Análisis socio-demográfico 2024.pdf
 
Plan de Compensación Dxn Internacional peru pdf
Plan de Compensación Dxn Internacional peru pdfPlan de Compensación Dxn Internacional peru pdf
Plan de Compensación Dxn Internacional peru pdf
 
vivienda segura concreto, construcción y métodos
vivienda segura concreto, construcción y métodosvivienda segura concreto, construcción y métodos
vivienda segura concreto, construcción y métodos
 
04 capital interes simple.pdf de la clase métodos cuantitativos
04 capital interes simple.pdf de la clase métodos cuantitativos04 capital interes simple.pdf de la clase métodos cuantitativos
04 capital interes simple.pdf de la clase métodos cuantitativos
 
ANA0003227-lagunas.pdfñlñlñlñlñññlñlllll
ANA0003227-lagunas.pdfñlñlñlñlñññlñlllllANA0003227-lagunas.pdfñlñlñlñlñññlñlllll
ANA0003227-lagunas.pdfñlñlñlñlñññlñlllll
 
MI CECTOR POSTE BLANCO - Paián .pdf
MI  CECTOR  POSTE  BLANCO - Paián   .pdfMI  CECTOR  POSTE  BLANCO - Paián   .pdf
MI CECTOR POSTE BLANCO - Paián .pdf
 

Estados imposibles y como evitarlos

  • 1. Estados Imposibles (Y como evitarlos) Juan Ignacio Rodrígue de León @jileon
  • 2.
  • 3.
  • 4.
  • 5. De que va  Qué son los estados imposibles y por qué deberíamos evitarlos  Ejemplos de estados imposibles y como evitarlos  Enlaces y resumen
  • 6.  Make Invalid States Unrepresentable Art by Maomi - https://www.pinterest.com/pin/565905509422569311/
  • 7. Principio de diseño  Suele usarse para los tipos de datos, pero se aplica a Estructuras, bases de datos, etc.  La idea es reducir o eliminar los estados en los que pueden estar los datos, idealmente haciendo imposible representar estados inválidos
  • 8. Para campos estado Obviamente es aplicable cuando tenemos codificado un estado directamente. Por ejemplo, supongamos un sistema de publicaciones con tres estados posibles: 🔘 En preparación 🔘 En borrador 🔘 Publicado
  • 13.
  • 14. No, es broma  El estado no se refiere solo a estos estados especificos, cualquier configuración de datos tiene un estado  Vamos a ver otro ejemplo en que no hay un estado explicito, pero nuestra elección de la estructura de datos implica un estado
  • 15. Periodos contiguos de tiempo  Vamos a representar una serie de periodos contiguos en el tiempo  Por ejemplo, en una aplicación que me permita monitorizar en todo momento lo que estoy haciendo (o dejndo de hacer)
  • 17. Pero... Permite representar estados imposibles (En este caso, no deseados)
  • 20. Eliminar redundacia  Podemos hacer que sea imposible representar periodos con huecos y/o que se superpongan  Similar a normalizar una base de datos: Eliminar la redundacia
  • 21. Eliminar fecha final  La marca de final de un periodo es redundante con la de inicio del siguiente  Así que solo necesitamos una única fecha, la de inicio. El final está definido por el inicio del siguiente periodo
  • 23. Ventajas Podemos ver algunas ventajas de esta representación analizando algunas de las operaciones que podríamos hacer
  • 24. Dividir un periodo  Primer caso:  Hacer ajustes en el periodo anterior  Insertar un nuevo periodo (posiblemente consultando el periodo siguiente)  Verificar las restricciones impuestas  Segundo caso:  añadir una fecha el conjunto
  • 25. Vale, pero ...  Yo sigo necesitando trabajar con periodos, con su inicio y final (Por ejemplo, porque tengo código ya funcionando que usa ese convenio)  Resulta trivial proyectar la secuencia de fechas a esta forma  Mientras la representación subyacente siga siendo una lista de fechas, las restricciones de los periodos siempre se cumplirán
  • 28. Clases y Objetos Vamos a representar un semáforo en un cruce
  • 30. My work here is done
  • 35. Resumen  Conviene echar una pensada sobre los estados y ver si podemos representar estados imposibles, y en ese caso, intentar eliminar esa posibilidad  Cualquier conjunto de datos interrelacionados son un estado  La representación de un objeto “real” no tiene por que seguir su estructura “fisica”
  • 36. Enlaces  Charla en YouTube Making Impossible States Impossible por Richard Feldman https://www.youtube.com/watch?v=IcgmSRJHu_8  Artículo de Kevin Mahoney Applying "Make Invalid States Unrepresentable" https://kevinmahoney.co.uk/articles/applying-misu

Notas del editor

  1. Suponiemos que los estados son excluyentes
  2. Si, claro, esto no deberia pasar nunca, bla, bla, bla...
  3. No váłido para estados superpuestos ni estados cuanticos no colapsados. Consulte con su médico para posibles contraindicaciones y tratamiento. Solo con receta médica,