Diferencia entre patrón y principio

20

¿Cuál es la diferencia entre los patrones y principios de diseño orientado a objetos? ¿Son cosas diferentes? Hasta donde yo entiendo, ambos intentan alcanzar un objetivo común (por ejemplo, flexibilidad). Entonces, ¿puedo decir que un patrón es un principio y viceversa?

Principio de diseño = SÓLIDO (es decir, Principio de inversión de dependencia)

Patrón de diseño = Gof (es decir, patrón de fábrica abstracto)

Chandi Gorom
fuente

Respuestas:

24

No, no son lo mismo.

Los patrones son soluciones comunes a los problemas de programación orientada a objetos . (No conozco ningún libro similar para programación funcional o declarativa). La idea se cristalizó en el famoso libro "Design Patterns" de The Gang of Four en 1995.

Como Andre señala, los patrones son comunes en todos los paradigmas. Voy a reiterar mi declaración anterior: Estoy no tiene conocimiento de ningún libros similares para la programación funcional o declarativa, pero Andre ha remediado mi ignorancia con el enlace se proporciona a continuación. (Gracias Andre)

Los principios son menos sobre lenguajes o paradigmas particulares, más generales. "No te repitas" - principio DRY - es cierto para toda la programación.

duffymo
fuente
44
Los patrones existen en cada paradigma. Jeremy Gibbons está escribiendo un libro llamado Patrones en Programación Funcional (y blogueando sobre esto aquí ). Los patrones son justo lo que dice el nombre: diseños recurrentes que resuelven problemas similares. Están en todas partes, aunque no siempre los reconozca.
André Paramés
@ AndréParamés Un vistazo rápido me lleva a creer que Jeremy Gibbons está hablando de expresiones idiomáticas , no de patrones de diseño.
Izkata
19

Estos conceptos no son iguales:

* Principio de diseño: * Los principios de diseño de software representan un conjunto de pautas que nos ayudan a evitar tener un mal diseño. como: Abrir Cerrar Principio

* Patrón de diseño: * un Patrón de diseño es una solución reutilizable general a un problema común dentro de un contexto dado en el diseño de software. Me gusta: Singleton

Jennifer S
fuente
7

Los patrones son para principios, lo que las implementaciones son para patrones.

Un principio sería la "indirección", que podría lograrse mediante un patrón de "fábrica", que al final se implementa como una clase con métodos de fábrica.

K ..
fuente
3

Bueno, los Principios son reglas, mientras que los patrones son sus ejemplos concretos.

Ahmad
fuente
1
puedes dar algunos ejemplos?
Díganos el principio que exige Fábrica o Cadena de responsabilidad o Flyweight.
duffymo
2
@duffymo Well Factory, por ejemplo, sigue el principio de inversión de dependencia (no inyección); tanto el cliente como la instancia dependen de la abstracción: la interfaz. La cadena de responsabilidad se basa en los principios de acoplamiento flojo y separación de controles. Flyweight creo que solo tiene ganancias de rendimiento.
m3th0dman el
3

Los patrones son más cosas de alto nivel que principios. Los patrones resuelven problemas específicos. Los principios podrían aplicarse en cualquier lugar, independientemente del contexto. Realmente patrones basados ​​en principios (SRP, DRY, etc.)

Por ejemplo, veamos el patrón de estrategia. Define una familia de algoritmos, encapsula cada uno y los hace intercambiables. Entonces, tienes aquí un concepto de algoritmo de alto nivel. Con el patrón de estado tienes un concepto de estado de alto nivel. Con los principios no tienes conceptos de alto nivel. Los principios son bloques de construcción, que utilizan los patrones para lograr el objetivo. Cuando implementa el patrón de estrategia, usa SOLID:

  • SRP: usted define el código, que es responsable del algoritmo y lo extrae de otro código.
  • OCP: usted define la abstracción, que representa todos los algoritmos diferentes y la usa
  • LSP: no utiliza clases de algoritmos concretos en el código del cliente, solo abstracción
lazyberezovsky
fuente
55
En realidad, los patrones son de un nivel más bajo que los principios. Es decir, que un patrón está más cerca de la implementación real que un principio en este contexto. En otras palabras, los principios son más abstractos que los patrones con principios que significan pautas generales de diseño y patrones que representan soluciones adecuadas para una clase particular de problemas.
@Jarkko ve mi ejemplo. Cuando hablé sobre el nivel, quise decir que los patrones se basan en principios, no viceversa. El ladrillo no es más cosa de alto nivel que construir.
44
Puedo ver lo que quisiste decir con eso y entender tu opinión al respecto. Sin embargo, es contrario al significado común de los conceptos "alto nivel" y "bajo nivel" en el contexto del software. (Por alguna razón, no puedo @-etiquetarlo.)
1
"Los patrones son más cosas de alto nivel que principios". Ruego diferir ==> Un patrón está cerca de su realización (es decir, de bajo nivel), mientras que un principio es una regla de alto nivel.
Raúl
2

Patrones donde originalmente se documentaron para Arquitectura. En arquitectura, aplique a cosas que van desde la colocación de la puerta en una habitación hasta el diseño de un pueblo.

The Gang of Four aplicó la idea a la programación orientada a objetos. Puede haber más de un patrón que puede usarse para resolver un problema, pero cada patrón tendrá una implementación específica. Existen patrones en otros enfoques de programación, pero no conozco ningún libro aplicable. Como otros han mencionado, los patrones cubren implementaciones específicas. Usar un patrón cuando no se aplica a menudo se considera un antipatrón.

Los principios no cubren la implementación, aunque puede haber enfoques de implementación estándar. Los principios tratan más sobre temas generales que sobre problemas específicos. Para la Inversión de control, conozco al menos tres enfoques de implementación. Para DRY (No se repita) No conozco un enfoque de implementación específico, aunque uso varios.

Considerar

  • Se le ha pedido que use un patrón como el patrón abstracto de fábrica como el único enfoque para desarrollar un programa. ¿Sería esto apropiado? No, entonces es más probable que sea un patrón.
  • ¿Se le ha solicitado que aplique DRY a todos los componentes? ¿Sería esto apropiado? Sí, entonces es más probable que sea un Principio.
BillThor
fuente
1

Principio de diseño de OO:

El principio OO es un conjunto de pautas que garantiza el concepto OOP. Basado en el concepto OOP, esto define formas de diseñar una mejor manera, un mejor diseño. El principio de diseño básico de OO es SÓLIDO.

Un patrón de diseño proporciona una solución general a un problema de diseño. Tenga en cuenta que el "patrón de diseño" también se puede aplicar a las palabras orientadas a objetos del mediodía. Entonces, los patrones de diseño A OO (OODP) son aquellos que proporcionan una solución general al principio OO basado en el diseño orientado a objetos. Los patrones de diseño se descubren, no se inventan. Hay varias formas de definir OODP y la más famosa es BSC [Behavioral Structural Creational].

El siguiente es el enlace para una explicación detallada. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Tanzy
fuente