template strategy patrones patron orientado observer objetos method diseño algorithm design-patterns semantics

algorithm - strategy - Cuál es la diferencia entre un algoritmo y un patrón de diseño



patrones de diseño java (12)

Estaba buscando "Deshacer / Rehacer algoritmos" y encontré algo marcado como duplicado, pero el duplicado era una solicitud de "Deshacer patrón de diseño". Realmente me gustaría un algoritmo para esto. No creo que necesariamente necesite un patrón de diseño.

¿Hay una diferencia fundamental entre "Patrón de diseño" y "Algoritmo" o está bien que alguien los use indistintamente?

Colgaré y sacaré mi respuesta del aire.

Ok, perdónenme por pensar que los patrones de diseño son solo abstracciones de algoritmos. Aquí hay una pequeña tabla de mis hallazgos de las respuestas que fueron todas muy buenas.

Design Pattern | Algorithm ---------------------------------------------- Abstract |Concrete Control Structure |Set of Actions Template | OOP |Structured / OO Programming Flexible |Deterministic Architecture(blueprint)|Recipe


Sí, hay una diferencia.

Un algoritmo es una receta para realizar alguna tarea: un conjunto finito inequívoco de instrucciones que logra algún objetivo operando en una entrada y produciendo una salida. Por lo general, un algoritmo se expresa en un pseudocódigo independiente del idioma, que luego puede implementarse en el idioma de su elección.

Un patrón de diseño es una forma de estructurar su código para expresar elegantemente una relación entre los componentes funcionales. Puede usar patrones de diseño dentro de la implementación de un algoritmo. Por ejemplo, puede usar un algoritmo para un recorrido ordenado de un árbol para asegurarse de visitar todos los nodos de una estructura de datos de árbol en un orden determinado. También puede implementar un patrón de diseño de visitante para expresar cómo su implementación devuelve el control al contexto de llamada para indicar que se ha visitado un nodo. Esto no forma parte del algoritmo, sino que forma parte del diseño del software y de cómo se estructuran las interfaces que puede utilizar cada componente de su software.

Los algoritmos y patrones de diseño son ortogonales, aunque bien pueden ser utilizados al mismo tiempo.


Un algoritmo es un conjunto de pasos / acciones / comandos / instrucciones que funcionan en un orden / manera especificada en todas las circunstancias o cambios de estado. En el caso de deshacer / rehacer, implicaría almacenar el estado anterior en cada punto y luego reproducirlo (a través de cualquier medio que tenga la aplicación) al comando. Pero como esta definición es muy difusa y cada caso particular es diferente, nos gusta crear un patrón de diseño más general en el que se pueda conectar la funcionalidad de una aplicación específica.

Un patrón de diseño es un concepto más abstracto que existe dentro de la programación orientada a objetos como resultado de la encapsulación de objetos de sus valores internos y funcionamiento y polimorfismo que permite comportamientos potencialmente diferentes de las llamadas a la "misma" función. Todo esto hace posible construir una estructura de control en la interacción de los objetos más que en una estructura algorítmica como un condicional o un bucle, y puede ser mucho más simple ya que no necesita conocer los detalles de un objeto para hacerlo funcionar: usted solo necesito saber que el objeto funciona En el caso de deshacer / rehacer, podría haber objetos para recordar el estado, para reproducir el estado y para administrar el control. Se comunicaban entre ellos llamando a métodos / funciones, que cada uno manejaría su propia parte de la funcionalidad.

Los términos no son intercambiables porque se refieren a diferentes niveles de diseño, y los DP en particular son solo una parte de la programación orientada a objetos.


Un algoritmo es un conjunto específico de pasos para realizar una tarea. La decodificación de un archivo de audio o video usaría un algoritmo.

Un patrón de diseño es más una plantilla para diseñar un sistema con ciertas características.


Un patrón de diseño es una descripción relativamente vaga de cómo resolver un problema a nivel arquitectónico, con énfasis en la flexibilidad y la mantenibilidad. Un algoritmo es una descripción precisa de cómo calcular algo específico, con énfasis en la corrección y la eficiencia.


Un patrón de diseño no se puede traducir directamente al código. Es una "estrategia" que puede ser útil para el diseño de una aplicación. El origen del término es externo a la informática. Lea acerca de Christopher Alexander para obtener más información.

Un algoritmo en el otro lado se puede expresar en código. Es una secuencia de operaciones que resuelve un problema específico para cualquier entrada.


Yo diría que un patrón de diseño define la estructura, mientras que un algoritmo define el comportamiento.

Por ejemplo, puede usar varios algoritmos diferentes junto con el patrón de diseño de Estrategia .


Un patrón de diseño determinaría cómo diseñar un algoritmo (o puede no tener nada que ver con algoritmos, pero digamos que estamos tratando con uno que sí lo haga), mientras que un algoritmo será un conjunto de pasos sólidos, repetibles e implementables para hacer alguna cosa. Entonces no, no los llamaría intercambiables.


Cuando estudié el concepto de patrón de diseño por primera vez, también me sorprendió por qué se introdujeron los patrones de diseño en presencia de algoritmo. A medida que mi conocimiento ha ido aumentando con los patrones de diseño, estoy llegando a este punto que el algoritmo es un enfoque completamente diferente para resolver los problemas y el patrón de diseño es diferente.

El patrón de diseño es básicamente una solución recurrente del mismo problema para una aplicación de software en un contexto particular que de alguna manera no está relacionado con algo, porque el algoritmo es las instrucciones paso a paso para resolver el problema.


Cómo organizar tipos de características en lugar de características específicas puede ser clave para separar ''patrones de diseño'' de ''algoritmos'' ...

Los patrones de diseño describen soluciones genéricas para problemas de diseño comunes. "Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, y luego describe el núcleo de la solución a ese problema, de tal forma que puede usar esta solución un millón de veces, sin hacerlo nunca de la misma manera. dos veces "( Christopher Alexander ) En la programación, esto se hace mediante la descripción de conjuntos específicos de relaciones entre los objetos de software (incluidos los objetos conceptuales o del mundo real). Se debe evitar la descripción de la implementación específica, ya que hace que el patrón de diseño sea menos genérico.

Un algoritmo es un conjunto de pasos que definen cómo se realiza una tarea. La ejecución de cada paso en un algoritmo no requiere habilidades creativas. Por el contrario, solo requiere la capacidad de seguir instrucciones. (advertencia: algoritmos no deterministas, no se ajustan a esta restricción y son un tema importante de investigación)

Entonces, creo que una descripción de la relación podría ser separar las funciones de las funciones. Sin embargo, la colección de características de un objeto determinará su función ya que cada sub-función tiene funciones encapsuladas en ella. Cuando unes muchos objetos pequeños en un objeto más grande (por ejemplo, instancias de diferentes clases en un programa), algunos de ellos trabajarán juntos para crear nuevas funciones que no tenían por sí mismos (el conjunto es mayor que la suma de sus partes). ) Puedes decir que este es solo un nuevo algoritmo, pero también es un nuevo objeto. Las características y funciones son dos caras de la misma moneda, por lo que es imposible separarlas por completo. Pero cómo organizar tipos de características en lugar de características específicas puede ser clave para separar ''patrones de diseño'' de ''algoritmos'', ya que si los patrones de diseño son sobre la organización de características específicas, es decir, instancias de clases específicas, entonces el algoritmo ya se habría presentado y el la implementación sería exactamente la misma siempre, es decir, no sería genérica y no se puede "usar esta solución un millón de veces, sin hacerlo nunca de la misma manera dos veces".


Patrones de diseño: una solución a un problema común pero genérico. - solución general al problema general. - a menudo tienen que implementarse cada vez que se usa.

Algoritmo: - conjunto específico de pasos que puede seguir para responder un problema en particular. - Implementado directamente para resolver un problema específico.


Un algoritmo es como una receta: un proceso paso a paso para realizar alguna actividad.

Un patrón de diseño es como un plano: una colección estructurada de objetos y asociaciones y acciones para lograr algún objetivo.