Diferença entre Padrão e Princípio

20

Qual é a diferença entre padrões e princípios de projeto orientado a objetos? Eles são coisas diferentes? Tanto quanto eu entendi, os dois tentam alcançar algum objetivo comum (por exemplo, flexibilidade). Então, posso dizer que um padrão é um princípio e vice-versa?

Princípio do Projeto = SÓLIDO (isto é, Princípio da Inversão da Dependência)

Design Pattern = Gof (ou seja, Abstract Factory Pattern)

Chandi Gorom
fonte

Respostas:

24

Não, eles não são os mesmos.

Padrões são soluções comuns para problemas de programação orientada a objetos . (Não conheço livros semelhantes para programação funcional ou declarativa.) A idéia foi cristalizada no famoso livro "Design Patterns" da Gang of Four em 1995.

Como Andre aponta, os padrões são comuns em todos os paradigmas. Vou reiterar a minha afirmação anterior: Eu sou não tem conhecimento de quaisquer livros semelhantes para programação funcional ou declarativa, mas Andre sanou minha ignorância com o link, ele fornecido abaixo. (Obrigado, Andre.)

Os princípios são menos sobre linguagens ou paradigmas específicos, mais gerais. "Não se repita" - princípio DRY - é verdadeiro para toda a programação.

duffymo
fonte
4
Padrões existem em todo paradigma. Jeremy Gibbons está escrevendo um livro chamado Patterns in Functional Programming (e blogando sobre isso aqui ). Padrões são exatamente o que o nome diz - designs recorrentes, que resolvem problemas semelhantes. Eles estão em toda parte ', embora você nem sempre os reconheça.
André Paramés
@ AndréParamés Uma rápida olhada leva-me a acreditar que Jeremy Gibbons está falando sobre idiomas , não padrões de design.
Izkata
@Izkata Non-OOP Design Patterns?
Roc Martí
19

Estes conceitos não são os mesmos:

* Princípio do design: * Os princípios de design do software representam um conjunto de diretrizes que nos ajudam a evitar um mau design. como: Abrir Fechar Princípio

* Design Pattern: * um Design Pattern é uma solução reutilizável geral para um problema comum dentro de um determinado contexto no design de software. Como: Singleton

Jennifer S
fonte
7

Padrões são para princípios, o que implementações são para padrões.

Um princípio seria "indireção", que poderia ser realizado por um padrão de "fábrica", que é implementado como uma classe com métodos de fábrica no final.

K ..
fonte
3

Bem, os princípios são regras, enquanto os padrões são seus exemplos concretos.

Ahmad
fonte
1
Voce pode dar alguns exemplos?
Por favor, diga-nos o princípio que exige Fábrica ou Cadeia de Responsabilidade ou Flyweight.
duffymo
2
@duffymo Well Factory, por exemplo, segue o Princípio de Inversão de Dependência (não a injeção); o cliente e a instância dependem da abstração - a interface. A Cadeia de Responsabilidade é baseada nos princípios do acoplamento e separação frouxos da utilização. Creio que o Flyweight tem apenas ganhos de desempenho.
M3th0dman
3

Padrões são coisas mais de alto nível, do que princípios. Os padrões resolvem problemas específicos. Os princípios podem ser aplicados em qualquer lugar, independentemente do contexto. Na verdade, padrões baseados em princípios (SRP, DRY, etc)

EG Vamos analisar o padrão de estratégia. Ele define uma família de algoritmos, encapsula cada um e os torna intercambiáveis. Então, você tem aqui o conceito de algoritmo de alto nível. Com padrão de estado, você tem um conceito de estado de alto nível. Com princípios, você não tem nenhum conceito de alto nível. Os princípios são os blocos de construção usados ​​pelos usuários para atingir a meta. Ao implementar o padrão de estratégia, você usa o SOLID:

  • SRP - você define o código, responsável pelo algoritmo e extrai-o de outro código.
  • OCP - você define abstração, que representa todos os algoritmos diferentes e o usa
  • LSP - você não usa classes de algoritmo concretas no código do cliente, apenas abstração
lazyberezovsky
fonte
5
Na verdade, os padrões são de nível inferior aos princípios. Ou seja, que um padrão está mais próximo da implementação real do que um princípio nesse contexto. Em outras palavras, os princípios são mais abstratos que os padrões, com princípios que significam diretrizes gerais de design e padrões que representam soluções adequadas para uma classe específica de problemas.
@Arkko veja meu exemplo. Quando falei sobre nível, quis dizer que os padrões são baseados em princípios, e não vice-versa. Tijolo não é coisa de alto nível, do que construir.
4
Eu posso ver o que você quis dizer com isso e entender o seu pensamento sobre o assunto. É, no entanto, contrário ao significado comum dos conceitos "alto nível" e "baixo nível" no contexto de software. (Por alguma razão eu não @ pode -tag você.)
1
"Padrões são coisas mais de alto nível, do que princípios". Eu imploro para diferir ==> Um padrão está próximo da realização (isto é, nível baixo), enquanto um princípio é regra de alto nível.
Raúl
2

Padrões onde originalmente documentados para Arquitetura. Na arquitetura, aplique a coisas que vão desde a colocação da porta em uma sala até o layout de uma vila.

O Gangue dos Quatro aplicou a idéia à Programação Orientada a Objetos. Pode haver mais de um padrão que pode ser usado para resolver um problema, mas cada padrão terá uma implementação específica. Existem padrões em outras abordagens de programação, mas não conheço nenhum livro aplicável. Como outros mencionaram, os padrões cobrem implementações específicas. Usar um padrão quando ele não se aplica é geralmente considerado um antipadrão.

Os princípios não cobrem a implementação, embora possa haver abordagens de implementação padrão. Os princípios são mais sobre a cobertura de questões gerais, em vez de problemas específicos. Para Inversão do Controle, conheço pelo menos três abordagens de implementação. Para DRY (não se repita), eu não conheço uma única abordagem de implementação específica, embora eu use várias.

Considerar

  • Você foi solicitado a usar um padrão como o Abstract Factory Pattern como a única abordagem para desenvolver um programa. Isso seria apropriado? Não, é mais provável que seja um padrão.
  • Você foi solicitado a aplicar DRY a todos os componentes? Isso seria apropriado? Sim, é mais provável que seja um Princípio.
BillThor
fonte
1

Princípio de Design OO—

O princípio OO é um conjunto de diretrizes que garantem o conceito de POO. Com base no conceito OOP, isso define maneiras de projetar de maneira melhor, um design melhor. O princípio básico do projeto OO é o SOLID.

Um padrão de design fornece uma solução geral para um problema de design. Observe que o "padrão de design" também pode ser aplicado à palavra orientada ao meio-dia. Portanto, os padrões de projeto OO (OODPs) são aqueles que fornecem uma solução geral para o princípio OO baseado em design orientado a objetos. Os padrões de design são descobertos, não inventados. Existem várias maneiras de definir OODPs e a mais famosa é a BSC [Behavioral Structural Creational].

A seguir, o link para uma explicação detalhada. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Tanzy
fonte