Differenza tra modello e principio


20

Qual è la differenza tra modelli e principi di progettazione orientata agli oggetti? Sono cose diverse? Per quanto ho capito, entrambi cercano di raggiungere un obiettivo comune (ad es. Flessibilità). Quindi posso dire che uno schema è un principio e viceversa?

Principio di progettazione = SOLID (ovvero principio di inversione di dipendenza)

Design Pattern = Gof (ovvero modello astratto di fabbrica)

Risposte:


24

No, non sono gli stessi.

I pattern sono soluzioni comuni ai problemi di programmazione orientata agli oggetti . (Non sono a conoscenza di libri simili per la programmazione funzionale o dichiarativa.) L'idea è stata cristallizzata nel famoso libro "Design Patterns" della Gang of Four nel 1995.

Come sottolinea Andre, i modelli sono comuni in ogni paradigma. Ribadirò la mia precedente dichiarazione: non sono a conoscenza di libri simili per la programmazione funzionale o dichiarativa, ma Andre ha posto rimedio alla mia ignoranza con il link che forniva di seguito. (Grazie, Andre.)

I principi riguardano meno linguaggi o paradigmi particolari, più generali. "Non ripetere te stesso" - principio DRY - vale per tutta la programmazione.


4
I modelli esistono in ogni paradigma. Jeremy Gibbons sta scrivendo un libro intitolato Patterns in Functional Programming (e scrivendo qui dei blog ). I motivi sono esattamente ciò che dice il nome: disegni ricorrenti, che risolvono problemi simili. Sono ovunque ", anche se potresti non riconoscerli sempre.
André Paramés,

@ AndréParamés Una rapida occhiata mi porta a credere che Jeremy Gibbons stia parlando di linguaggi linguistici , non di schemi di progettazione.
Izkata,


19

Questi concetti non sono gli stessi:

* Principio di progettazione: * I principi di progettazione del software rappresentano una serie di linee guida che ci aiutano a evitare una cattiva progettazione. come: Apri Chiudi Principio

* Design Pattern: * un Design Pattern è una soluzione riutilizzabile generale a un problema che si verifica comunemente in un determinato contesto nella progettazione del software. Mi piace: Singleton


7

I modelli sono per i principi, quali sono le implementazioni per i modelli.

Un principio sarebbe "indiretto", che potrebbe essere realizzato da un modello "factory", che alla fine verrà implementato come una classe con metodi factory.


3

Bene, i principi sono regole mentre i modelli sono i loro esempi concreti.


1
puoi fare qualche esempio?

Ti preghiamo di comunicarci il principio che richiede Factory o Chain of Responsibility o Flyweight.
duffymo,

2
@duffymo Well Factory ad esempio segue il principio di inversione di dipendenza (non iniezione); sia il client che l'istanza dipendono dall'astrazione: l'interfaccia. La catena di responsabilità si basa sui principi di accoppiamento lento e separazione dei controlli. Flyweight Credo che abbia solo miglioramenti delle prestazioni.
m3th0dman,

3

I modelli sono più cose di alto livello, che principi. I pattern risolvono problemi specifici. I principi potrebbero essere applicati ovunque, indipendentemente dal contesto. In realtà modelli basati su principi (SRP, DRY, ecc.)

EG Vediamo il modello di strategia. Definisce una famiglia di algoritmi, li incapsula e li rende intercambiabili. Quindi, qui hai un concetto di algoritmo di alto livello. Con il modello di stato hai un concetto di stato di alto livello. Con i principi non hai concetti di alto livello. I principi sono elementi costitutivi, utilizzati dagli schemi per raggiungere l'obiettivo. Quando si implementa il modello di strategia, si utilizza SOLID:

  • SRP: si definisce il codice, che è responsabile dell'algoritmo e lo estrae da un altro codice.
  • OCP: definisci l'astrazione, che rappresenta tutti i diversi algoritmi e la usi
  • LSP: non usi classi di algoritmi concreti nel codice client, ma solo astrazione

5
In realtà i modelli hanno un livello inferiore rispetto ai principi. Vale a dire che un modello è più vicino all'attuazione effettiva di un principio in questo contesto. In altre parole, i principi sono più astratti dei modelli con principi che significano linee guida generali e modelli che rappresentano soluzioni adatte a una particolare classe di problemi.

@Jarkko vedi il mio esempio. Quando ho parlato di livello, intendevo che i modelli sono basati su principi, non viceversa. Il mattone non è più una cosa di alto livello, che costruire.

4
Posso capire cosa intendevi con questo e capire il tuo pensiero in merito. È, tuttavia, contrario al significato comune dei concetti "alto livello" e "basso livello" nel contesto del software. (Per qualche motivo non posso @ -tag te.)

1
"I modelli sono più cose di alto livello, che principi". Mi permetto di dissentire ==> Un modello è vicino alla realizzazione (cioè a basso livello), mentre un principio è una regola di alto livello.
Raúl,

2

I modelli sono stati originariamente documentati per Architecture. In architettura, applica a cose che vanno dal posizionamento della porta in una stanza alla disposizione di un villaggio.

The Gang of Four ha applicato l'idea alla programmazione orientata agli oggetti. Potrebbe esserci più di un modello che può essere utilizzato per risolvere un problema, ma ogni modello avrà un'implementazione specifica. Esistono schemi in altri approcci di programmazione, ma non sono a conoscenza di libri applicabili. Come altri hanno già detto, i pattern coprono implementazioni specifiche. L'uso di un pattern quando non si applica è spesso considerato un anti-pattern.

I principi non riguardano l'implementazione, sebbene possano esserci approcci di implementazione standard. I principi riguardano più la copertura di questioni generali piuttosto che problemi specifici. Per Inversion of Control, sono a conoscenza di almeno tre approcci di implementazione. Per DRY (Don't Repeat Yourself) non conosco un singolo approccio di implementazione specifico, anche se ne uso diversi.

Ritenere

  • Ti è stato richiesto di utilizzare un modello come Abstract Factory Pattern come unico approccio per sviluppare un programma. Sarebbe appropriato? No, allora è più probabile un modello.
  • Ti è stato chiesto di applicare DRY a tutti i componenti? Sarebbe appropriato? Sì, allora è più probabile che sia un Principio.

1

Principio di progettazione OO—

Il principio OO è un insieme di linee guida che garantisce il concetto OOP. Basato sul concetto OOP, questo definisce i modi per progettare un modo migliore, un design migliore. Il principio di base della progettazione OO è SOLID.

Un modello di progettazione fornisce una soluzione generale a un problema di progettazione. Si noti che il "modello di progettazione" può essere applicato anche a mezzogiorno parola orientata agli oggetti. Quindi i modelli di progettazione A OO (OODP) sono quelli che forniscono una soluzione generale al principio OO basato sulla progettazione orientata agli oggetti. I modelli di progettazione vengono scoperti, non inventati. Esistono diversi modi per definire gli OODP e il più famoso è BSC [Behavioral Structural Creational].

Di seguito è riportato il link per una spiegazione dettagliata. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.