Ha senso chiedere: "Qual è la differenza tra Design Pattern e Algorithm?"

5

Da Wikipedia:

In mathematics and computer science, an algorithm is an effective method expressed as a finite list of well-defined instructions for calculating a function.

In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design.

Per descrizione (supponendo che siano corretti su Wikipedia), sembra che Algorithm e Design Pattern siano in qualche modo simili / uguali. Entrambi raggiungono il compito di risolvere un problema ed entrambi sono certamente riutilizzabili se correttamente implementati.

Ha senso confrontarli per valutare le differenze tra loro?

    
posta Shamim Hafiz 12.07.2011 - 13:56
fonte

10 risposte

2

Una ricerca binaria è un modello di progettazione. È un problema che si apre continuamente e lo stesso schema (ricerca binaria) lo risolve.

Non c'è differenza tra schemi di progettazione e algoritmi a livello matematico. Ora, se stai parlando con un altro umano, probabilmente non dovresti dirlo perché non sono in grado di ridurre le idee ai componenti di base. Proprio come non dovresti dire a un ragazzo di matematica che tutta la matematica è solo un'aggiunta di base (anche se è vera).

    
risposta data 13.07.2011 - 03:34
fonte
10

Un design pattern è una linea guida generale su come scrivere e organizzare un pezzo di codice.

Un algoritmo è un insieme specifico di passaggi che possono essere utilizzati per risolvere un problema.

Detto in un altro modo, un modello di progettazione riguarda il modo in cui fai qualcosa senza preoccuparti di quale sia l'obiettivo reale. Considerando che, un algoritmo riguarda esattamente ciò che stai cercando di fare, ma può o no, includere informazioni su quale dovrebbe essere l'effettiva implementazione (nel codice).

    
risposta data 12.07.2011 - 14:07
fonte
4

È più sensato chiedere informazioni sulla differenza tra un'auto e un semiasse.

    
risposta data 12.07.2011 - 14:10
fonte
3

Risposta rapida - no, non ha senso.

Expanded: più utile potrebbe essere "trovare risposte" a queste domande (dovresti provare a rispondere da solo):

  • descrive / implementa un modello di progettazione, che ordina un array di numeri interi (solo per esempio);
  • quale modello di progettazione risolve il problema del percorso più breve del grafico?
  • descrive un algoritmo, che implementa una separazione dei dati (il modello) utilizzata nell'applicazione dalla sua presentazione all'utente.
  • ...

P. S. Se la risposta sembra troppo falsa, non esitare a commentarla.

    
risposta data 12.07.2011 - 21:30
fonte
3

Ti manca la distinzione critica. Uno è un 'progetto' e l'altro è una 'soluzione'.

Il motivo di progettazione viene utilizzato per progettare le tue classi, i metodi relativi l'uno all'altro. Pensala come un diagramma.

L'algoritmo viene utilizzato per risolvere un problema in un elenco di passaggi.

Prova a cercare il modello di progettazione di fabbrica e l'algoritmo divide and conquer. Guarda le differenze tra i due e vedrai che sono cose completamente separate.

    
risposta data 12.07.2011 - 14:00
fonte
1

Un algoritmo è una soluzione matematica a un problema. Descrive i passaggi matematici necessari per ottenere dal set di dati problematico la soluzione. Pensalo come una prova.

Molte prove matematiche seguono temi simili. Prova per induzione, prova per composizione, reductio ad absurdum, ecc. Questi possono essere paragonati a modelli di design. Questi schemi di prova non sono sufficienti a dimostrare un concetto da soli, ma forniscono un buon piano di attacco per risolvere il problema, e allo stesso modo un modello di progettazione può fornire un buon piano di attacco per lo sviluppo di un algoritmo di lavoro.

    
risposta data 12.07.2011 - 16:21
fonte
1

Gli schemi di progettazione riguardano la progettazione in grande, ignorando molti dei dettagli più piccoli.

Gli algoritmi riguardano il design nel piccolo, spesso all'interno di un'unica funzione. Le strutture dati non sono molto più grandi, generalmente richiedono alcuni algoritmi per implementarle, ma non richiedono un modello di progettazione.

Gli elementi costitutivi che sono uniti da un motivo di progettazione sono oggetti, e i loro metodi di solito implementano algoritmi e strutture dati. Sempre veramente, ma questo include molti algoritmi che normalmente non chiameremmo algoritmi.

    
risposta data 12.07.2011 - 21:17
fonte
1

Un algoritmo è un costrutto di codice che esegue un certo lavoro. Un modello di progettazione è un concetto o una regola di codifica che è una "best practice" riconosciuta da seguire nei casi in cui si applica, mentre si costruiscono algoritmi. Ognuno può essere la base dell'altro.

Facciamo un'analogia con l'architettura attuale. Gli architetti possono progettare case con forme e dimensioni praticamente illimitate. Possono incorporare idee estetiche o strutturali praticamente ovunque. Tuttavia, ci sono alcune regole e "migliori pratiche" che gli architetti dovrebbero seguire riguardo alla struttura dei loro progetti. Le porte devono avere un'altezza di almeno 7 piedi e una larghezza di almeno 30 "Ciò consente alle persone di attraversarle: la stufa e il frigorifero dovrebbero probabilmente trovarsi nella stessa stanza del forno, e non ci dovrebbero essere tappeti stanza, che chiamiamo la "cucina", alcuni modelli sono opzionali, un architetto può progettare un grande "concetto aperto" che incorpori spazi secondari progettati per vari usi, oppure l'architetto può separare tutti questi spazi con le pareti. è lo schema, non deve essere seguito, in quanto vi sono altri schemi che realizzeranno lo stesso obiettivo di fornire vari spazi, e non far collassare la casa o bruciarla.

Più specificamente, ci sono "schemi" di progettazione strutturale che dovrebbero seguire i carpentieri. I travetti del pavimento dovrebbero essere distanti 12 pollici e dovrebbero avere un rinforzo trasversale ogni quattro piedi. I pavimenti in aree che probabilmente hanno un sacco di contatto con l'acqua dovrebbero avere un underlayment impermeabile sotto un materiale superficiale tollerante all'acqua. Le piastrelle posate su un pavimento in legno dovrebbero avere una forma di supporto per ridurre al minimo il flex che causa screpolature. Le pareti dovrebbero avere borchie ogni 16 pollici. Le pareti che corrono perpendicolarmente ai travetti del soffitto sono "portanti" e dovrebbero avere doppie piastre superiori. Windows dovrebbe essere incorniciato con un'intestazione tra due borchie "re", con borchie aggiuntive "jack" all'interno delle borchie re che supportano l'intestazione da sotto. È certamente possibile inquadrare una finestra all'interno di un muro senza seguire queste regole, ma queste regole creano una cornice di finestra più solida che non si piegherà o affonderà nel muro nel tempo sotto il peso di tutti i materiali che il muro sostiene. Sono la "migliore pratica", e nel mondo reale sono richieste dalla legge per essere seguite nell'interesse della sicurezza strutturale. Queste sono regole che devi semplicemente seguire a livello di grana fine per costruire una solida casa. Altri sono opzionali, o "o-o": puoi "perforare i perni di un muro per pescare fili elettrici, oppure" puoi "invece far passare il filo attraverso e poi attraverso la piastra superiore del muro. Ci sono raccomandazioni e cose che sono più facili da fare in un caso piuttosto che in un altro, ma va bene se lo si desidera. Ci sono anche linee guida "minime": puoi "usare" un cavo elettrico da 12 o 14 g per un circuito da 120 V 15 A nella tua casa. Tuttavia, 230 V o 20 A + devono essere 12 g. Potresti, se lo avessi, usare 10g per tutto questo, ma potrebbe essere considerato un eccesso di ingegneria.

Quindi, nella nostra analogia, l'inquadratura "modello di progettazione" è la migliore pratica per creare un "algoritmo" di finestra che permetta alle persone di vedere dall'altra parte dell'algoritmo "muro" più grande che ha schemi simili per la sua costruzione, e supporta un pezzo del programma "casa", e lo divide anche in sottofunzioni "stanza" che seguono i propri schemi di progettazione e hanno algoritmi "piani" progettati per specifiche caratteristiche desiderabili.

La programmazione è molto simile sotto molti aspetti; ci sono alcune regole che i buoni sviluppatori seguono per creare codice robusto che può essere facilmente mantenuto (DRY, SOLID, YAGNI), che porta a note "migliori pratiche" per seguire tali regole (Strategia, Fabbrica, Scheda). Poi ci sono altre regole che creano algoritmi performanti che vengono altamente raccomandati, ma non sono richiesti SE sono soddisfatte determinate condizioni (questo SelectionSort vedrà solo liste di 10 elementi, quindi anche nel peggiore dei casi soddisferà le aspettative di performance). E infine, ci sono casi opzionali o "o-o" in cui più schemi seguiranno tutte le regole, e dipende da te che è più semplice (Strategia o Metodo modello per questo algoritmo ETL? Dipende da quanto è comune, e preferenza del programmatore )

    
risposta data 12.07.2011 - 22:19
fonte
1

Utilizzando un'analogia costruttiva, l'algoritmo rappresenta i progetti architettonici dettagliati per una casa, mentre i modelli di progettazione sono i componenti di pareti, porte e finestre che entrano nei progetti architettonici dettagliati.

    
risposta data 12.07.2011 - 14:04
fonte
1

... problema: stampa una tabella di moltiplicazione, per tutti i numeri 1-10.

Algoritmo:

loop 1-10 sulla prima variabile di controllo. Per ogni ciclo di ripetizione 1-10 sulla seconda variabile di controllo. Per ognuna di queste iterazioni, in ordine, stampa il prodotto delle due variabili.

Ora, usando modelli di design. In particolare,

Motivo di progettazione - Ciclo a doppio nidificazione:

intervallo dato dal ciclo sulla prima variabile di controllo. Per ciascun ciclo di iterazione assegnato al secondo intervallo rispetto alla seconda variabile di controllo. Per ciascuna di queste iterazioni eseguire operazioni specifiche su variabili di controllo.

Ora riscrivi l'algoritmo usando i modelli di design:

Algoritmo:

Applica loop a doppio nidificato negli intervalli 1-10, 1-10, stampando i prodotti delle variabili di controllo.

    
risposta data 12.07.2011 - 14:40
fonte

Leggi altre domande sui tag