¿Cómo explicar los patrones de diseño a personas ajenas a Software World?

10

Quiero explicarle a mi sobrina patrones de diseño, pero siempre me cuesta hacerlo. En gran parte se debe a mi falta de comprensión clara de los patrones de diseño. ¿Cómo sugiere explicar patrones como MVC, Singleton, Factory, Repository, etc. en términos tan simples que incluso los niños de 10 años pueden entender?

Estoy buscando ejemplos que puedan facilitar la comprensión de los patrones. Ejemplos con juguetes, películas, música, etc.

gizgok
fuente
2
Los patrones de diseño son para el desarrollo de software lo que la teoría de categorías es para las matemáticas. . . al menos así es como se lo explicaría a un matemático.
Eric Wilson
Es como leer las secciones de respuestas de los libros de rompecabezas. No sabrás la respuesta a cada rompecabezas, pero lo sabrás para la mayoría y sabrás por dónde empezar para un rompecabezas para el que no has visto la respuesta.
StuperUser

Respuestas:

7

Creo que el comienzo del artículo de Wikipedia es probablemente un buen comienzo:

A design pattern is a general reusable solution to a commonly occurring problem.

¿O quieres explicar los detalles de esos patrones particulares?

Charlie
fuente
en busca de detalles
gizgok
1
También hay una wikipedia simple, secure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
Jeff Welling
2
@gizgok: "detalles"? Eso es ridículo. Especifique, en detalle, qué más podría desear. Querer "detalles" es vago.
S.Lott
5

Depende de por qué quieres explicarlo. Si solo quieres explicar la idea de los patrones, me basaría en ejemplos de arquitectura en A Pattern Language. Estos investigadores descubrieron que ciertos aspectos de un edificio o una habitación hacen que las personas disfruten de vivir o trabajar en ese edificio o habitación, en todo el mundo, en diferentes culturas, con diferentes materiales de construcción y en diferentes tipos de vecindarios. Como "Luz en dos lados", por ejemplo. Las habitaciones con ventanas en dos paredes son mucho más bonitas que las que tienen solo una (o ninguna). También hay patrones como ese en el software, incluso usando diferentes lenguajes de programación, algunos patrones se repiten. E incluso en un software muy diferente: un juego, algo para cálculos financieros, el motor dentro de Facebook, etc.

Luego, si desea hablar sobre un patrón en particular (no estoy seguro de por qué, a un niño de diez años), puede comenzar dando ejemplos de dónde se usa antes de intentar explicar cómo funciona. Por lo tanto, Composite le permite evitar la recurrencia explícita cuando calcula el peso de una maleta sumando el peso del contenedor y el total de todos los contenedores y cosas sueltas que contiene, pero también funciona para calcular la carga salarial en una corporación o capacidad en un complejo de fabricación. Si eso es incluso un poco interesante para el niño de diez años, podría intentar explicar cómo funciona.

Kate Gregory
fuente
1
coz de 10 años edad quiere convertirse en pirata informático
gizgok
2

Los patrones de diseño existen porque algunas personas se dieron cuenta de que había formas de lograr que los bits de software funcionen bien juntos, y quisieron compartir sus ideas.

Puede pensar en patrones de diseño de la misma manera que piensa en grupos de personas. Por ejemplo, a veces tenemos una persona que facilita todas nuestras reuniones. Eso es como un patrón de controlador, que facilita las interacciones entre los objetos.

O imagine una audiencia, donde alguien en el frente de la sala observa a las personas que levantan las manos, luego repite la pregunta para que todos los demás puedan escuchar, o tal vez reaccione al responderla. Eso sería similar a un patrón de sujeto / observador.

Hay patrones que se comportan como traductores (el patrón Adaptador), como guardias de seguridad (el Proxy), como expertos en un campo (Singletons) o como personas que comprueban que su automóvil está funcionando (Validadores).

La diferencia entre los objetos y las personas es que podemos crear tantos objetos como queramos y tener múltiples copias diferentes de ellos. Eso hace que sea importante comprender qué responsabilidades deben tener los objetos, mantener sus responsabilidades pequeñas y tratar de no duplicar lo que hacen, para que el software no se complique demasiado. Los expertos tienen una gran experiencia en esto, y nos han dado estos patrones de cómo el software efectivo interactúa para que podamos decidir qué tipo de rol es la mejor metáfora para el trabajo que estamos tratando de hacer, y obtener el piezas de software para colaborar de la manera más adecuada.

Lunivore
fuente
1

Dígale que se usan para desarrollar componentes individuales de un sistema, como las técnicas de cocción que se usan para construir una comida / plato. Imagina que estás preparando la cena con papas, carne y verduras. Decides que quieres hervir y hacer puré las papas, la carne a la parrilla y las verduras al vapor. Utiliza el patrón de diseño de la parrilla para cocinar los patrones de carne, hervir y hacer puré para las papas y el patrón de vapor para las verduras.

kett_chup
fuente
1

La mayoría de estos patrones de diseño son parte del diseño orientado a objetos. Realmente no puedes explicárselos a alguien que no comprende OOD. Podría describir el objetivo que logra con un patrón dado, pero no cómo funciona ni por qué lo necesita. A menos, por supuesto, que vayas a explicar todo el OOD.

vartec
fuente
1
La mayoría de los patrones de diseño son instrucciones sobre cómo usar las abstracciones adecuadas para resolver un problema en particular. No son realmente parte del diseño orientado a objetos por decir.
Pemdas
@Pemdas: tome Factory por ejemplo. ¿Qué sentido tiene fuera de OOP?
vartec
OOP es donde más se habla de patrones, pero Otros idiomas y tienen sus propios conjuntos de patrones. Por ejemplo, las mónadas (a menudo se encuentran en lenguajes funcionales, a veces se pueden hacer en OOP) son un patrón en sí mismas y permiten otros patrones. Además, como se ha mencionado aquí, los patrones de diseño llegaron a la programación desde Arquitectura.
Charlie
Los patrones de diseño no tienen nada que ver con OOP. Los patrones de diseño tratan sobre problemas que surgen una y otra vez, y estrategias que se han desarrollado para manejar los problemas. Si una estrategia se desarrolla repetidamente, entonces tiene un patrón. Si una estrategia funciona repetidamente, entonces lo llama un patrón de diseño; si falla repetidamente, lo llama un antipatrón. Aprender sobre patrones de diseño significa aprender estrategias que han funcionado en el pasado repetidamente. ¿Ves cómo no mencioné la programación en absoluto, mucho menos OOP?
gnasher729
0

Los patrones de diseño se describieron por primera vez para la arquitectura. Cosas como la ubicación de la plaza, los edificios y otros diseños generalmente repetidos. Podrías comenzar por ahí. Cosas como la entrada principal da a la calle, la puerta hacia la esquina de la habitación y cualquier otra cosa que se te ocurra. Los patrones del autor original no fueron ampliamente utilizados. Se informa que ahora declara que los patrones en sí mismos no son suficientes.

Discuta moviendo cosas por la habitación. Pon una silla frente a la puerta. ¿Tendría sentido mover las ventanas o la puerta a otra parte? ¿Por qué o por qué no?

Pruebe algo como poner un lugar en la mesa. Intenta organizar las cosas por tamaño alejándote de ti. No es el patrón normal y es difícil trabajar con él. Configúralo normalmente. ¿Es este un diseño adecuado para un vaso de jugo rápido? Los patrones no siempre son apropiados.

Vivimos con patrones todo el tiempo. Tome tres o cuatro libros y comience a hojearlos. Hay un patrón obvio en el diseño; página de título, tabla de contenido, contenido e índice. No se requieren todos los componentes, pero sería confuso verlos fuera de lugar.

BillThor
fuente
0

Los patrones de diseño son para el desarrollo de software lo que las plantillas son para la carpintería. Es una herramienta con la que puede hacer 'cortes' bien conocidos para usar en proyectos más grandes.

Tenga en cuenta que no necesita la plantilla para hacer el corte, simplemente es más fácil en algunas circunstancias.

Steven Evers
fuente
0

Siento que mi otra respuesta representa el caso general, pero el OP comentó pidiendo detalles (por lo que sentí que merecía una respuesta separada). Lamentablemente, no estoy familiarizado con el patrón de repositorio, pero voy a apuñalar a los demás. Como regla, creo que la mejor manera de explicar esto es a través del problema que desea resolver, por qué desea resolverlo y cómo lo logra.

único

Este patrón se utiliza cuando queremos garantizar que solo haya uno de algo. El patrón se logra evitando que otros creen nuestro objeto.

Wikipedia

MVC

Este patrón se utiliza para ayudar a mantener las cosas modulares con todos los beneficios que conlleva. La Vista es la "interfaz de usuario", el Modelo son los datos (incluida la lógica de negocios) y el Controlador es cómo las acciones del usuario manipulan el modelo. Con esta modularidad, nada me impide tener múltiples vistas / controladores para trabajar con el mismo modelo. Para un ejemplo demasiado simplificado, puedo interactuar con mi correo electrónico ("modelo") a través de un sitio web, una aplicación de escritorio y mi iPhone ("vistas + controladores"). Si tengo un buzón de grupo compartido, podría crear un controlador que no envíe correos electrónicos y reutilizar la misma vista de aplicación y correo electrónico. (sí, demasiado simplista, pero espero que sea comprensible :))

Además, con esta separación de preocupaciones bien definida, los cambios en uno (idealmente) no requieren cambios en otro. Ejemplo concreto, si necesito soportar la lectura / escritura en una base de datos MySQL en lugar de una base de datos Oracle, solo necesitaría cambiar mi modelo, y mi vista / controlador no cambia.

Wikipedia

Fábrica

Hay que tener cuidado aquí, ya que hay muchos patrones similares llamados Factory ... Hablaré de Abstract Factory , pero debes saber que también hay un patrón de Factory Method .

Básicamente, usaría una Fábrica abstracta cuando sepa qué pasos quiero realizar, pero los pasos sobre cómo realizar estos pasos individuales podrían variar. Por ejemplo, podría estar creando una aplicación donde necesito crear un cuadro de diálogo con un botón. Al hacer que mi código use una fábrica de IU hipotética, si necesito mi código en Mac o Linux en lugar de Windows, solo proporciono una fábrica diferente, y el resto de mi código no cambia. Para un ejemplo potencialmente más salvaje, podría tener una Web Factory y, de repente, la mayoría del código que respalda mi aplicación de escritorio ahora también está impulsando un sitio web rico :) (ok poco práctico por otras razones, pero en teoría :))

Charlie
fuente
0

Para un niño de 10 años que quiere ser un hacker, yo diría.

Imagínese si pudiera tener a algunos de los mejores hackers del mundo sentados a su lado cuando estaba pirateando ... y de vez en cuando decían ... "ya sabes si lo haces así ... [insertar patrón] ... entonces su código será [más rápido / más seguro / más fácil de mantener / etc.] "qué bueno sería eso.

Ahora que asumo que está interesada en la idea, no perdería mi tiempo explicando cada patrón, establecería su "tarea de pirateo" ... y luego aplicaría un patrón de diseño y explicaría el valor ... luego solo apunte a algunos buenos recursos y ver a dónde va.

Pero sobre todo necesitará aprenderlos a través de la tutoría.

Stephen Bailey
fuente