Come dovresti spiegare i modelli di progettazione a persone esterne a Software World


10

Voglio spiegare i motivi di design a mia nipote, ma faccio sempre fatica a farlo. Ciò è in gran parte dovuto alla mia mancanza di una chiara comprensione dei modelli di progettazione. Come suggerisci di spiegare schemi come MVC, Singleton, Factory, Repository ecc. In termini così semplici che anche i bambini di 10 anni possono capire.

Sto cercando esempi che possano facilitare la comprensione dei modelli. Esempi con giocattoli, film, musica ecc.


2
I modelli di progettazione sono per lo sviluppo del software quale teoria della categoria è per la matematica. . . almeno è così che lo spiegherei a un matematico.
Eric Wilson,

È come leggere le sezioni di risposta dei libri di puzzle. Non conoscerai la risposta ad ogni enigma, ma lo farai per la maggior parte e saprai da dove iniziare un enigma per cui non hai visto la risposta.
Stuper:

Risposte:


7

Penso che l'inizio dell'articolo di Wikipedia sia probabilmente un buon inizio:

A design pattern is a general reusable solution to a commonly occurring problem.

O vuoi spiegare i dettagli di questi schemi particolari?


in cerca di dettagli
gizgok,


2
@gizgok: "specifics"? È ridicolo. Specifica - in dettaglio - cosa si può desiderare di più. Volere "dettagli" è vago.
S.Lott

5

Dipende dal motivo per cui vuoi spiegarlo. Se vuoi solo spiegare l'idea dei pattern, attingerei esempi dall'architettura in A Pattern Language. Questi ricercatori hanno scoperto che alcuni aspetti di un edificio o di una stanza hanno reso le persone piace vivere o lavorare in quell'edificio o stanza - in tutto il mondo in culture diverse, con materiali da costruzione diversi e in diversi tipi di quartieri. Ad esempio "Luce su due lati". Le stanze con finestre su due pareti sono molto più belle di quelle con una sola (o nessuna). Ci sono schemi come quelli anche nel software - anche usando linguaggi di programmazione diversi, alcuni schemi si ripetono. E anche in software molto diversi: un gioco, qualcosa per i calcoli finanziari, il motore di Facebook e così via.

Quindi, se vuoi parlare di un particolare schema (non so perché, a un bambino di dieci anni) potresti iniziare fornendo esempi di dove viene usato prima di provare a spiegare come funziona. Quindi Composite ti consente di evitare la ricorsione esplicita quando stai calcolando il peso di una valigia sommando il peso del contenitore e il totale di tutti i contenitori e le cose sciolte che contiene, ma funziona anche per calcolare l'onere salariale in una società o capacità in un complesso produttivo. Se questo è un po 'interessante per il bambino di dieci anni, potresti provare a spiegare come funziona.


1
coz 10 anni vuole diventare hacker
gizgok il

2

I modelli di progettazione esistono perché alcune persone hanno capito che esistevano modi per far funzionare bene i bit di software insieme e volevano condividere le loro idee.

Puoi pensare ai modelli di progettazione nello stesso modo in cui pensi a gruppi di persone. Ad esempio, a volte abbiamo una persona che facilita tutti i nostri incontri. È come un modello Controller, che facilita le interazioni tra oggetti.

Oppure immagina un pubblico, in cui qualcuno nella parte anteriore della stanza osserva le persone che alzano le mani, quindi ripete la domanda in modo che tutti gli altri possano ascoltare, o forse reagisce rispondendo. Sarebbe simile a un modello soggetto / osservatore.

Ci sono schemi che si comportano come traduttori (il modello dell'adattatore), come guardie di sicurezza (il proxy), come esperti in un campo (Singletons) o come persone che controllano che la tua auto funzioni (validatori).

La differenza tra oggetti e persone è che possiamo praticamente creare tutti gli oggetti che vogliamo e avere più copie diverse di essi. Ciò rende importante capire quali responsabilità dovrebbero avere gli oggetti, mantenere le loro responsabilità piccole e cercare di non duplicare ciò che fanno, in modo che il software non diventi troppo complicato. Gli esperti hanno una grande esperienza in questo e ci hanno fornito questi schemi di come il software interagisce efficacemente in modo da poter decidere quale tipo di ruolo è la migliore metafora del lavoro che stiamo cercando di fare e ottenere il software per collaborare nel modo più appropriato.


1

Dille che sono usati per costruire singoli componenti di un sistema, come le tecniche di cottura sono usate per costruire un pasto / piatto. Immagina di preparare la cena con patate, carne e verdure. Decidi di voler far bollire e schiacciare le patate, la carne grigliata e le verdure al vapore. Usa il tuo modello di griglia per cucinare la carne, bollire e schiacciare i motivi per le patate e il vapore per la verdura.


1

La maggior parte di questi modelli di progettazione fanno parte del design orientato agli oggetti. Non puoi davvero spiegarli a qualcuno che non ha comprensione dell'OOD. Potresti descrivere l'obiettivo che raggiungi con un determinato schema, ma non come funziona né perché ne hai bisogno. A meno che, naturalmente, non si spieghi l'intero OOD.


1
La maggior parte dei modelli di progettazione sono istruzioni su come utilizzare le astrazioni appropriate per risolvere un problema specifico. Non fanno davvero parte del design orientato agli oggetti per dire.
Pemdas,

@Pemdas: prendi Factory ad esempio. Che senso ha fuori da OOP?
Vartec,

OOP è il luogo in cui si parla di più schemi, ma Altre lingue e hanno i loro set di schemi. Ad esempio, le Monadi (spesso presenti nei linguaggi funzionali, a volte possono essere eseguite in OOP) sono un modello di se stesse e consentono altri schemi. Inoltre, come è stato menzionato qui, i modelli di progettazione sono arrivati ​​alla programmazione da Architecture.
Charlie,

I modelli di progettazione non hanno nulla a che fare con OOP. I modelli di progettazione riguardano problemi che si presentano ripetutamente e strategie che sono state sviluppate per gestirli. Se una strategia viene sviluppata ripetutamente, allora hai un modello. Se una strategia funziona ripetutamente, la chiami un modello di disegno, se fallisce ripetutamente la chiami un anti-modello. Conoscere i modelli di progettazione significa strategie di apprendimento che hanno funzionato ripetutamente in passato. Vedi come non ho menzionato affatto la programmazione, tanto meno OOP?
gnasher729,

0

I modelli di progettazione sono stati inizialmente descritti per l'architettura. Cose come posizione della piazza, edifici e altri layout generalmente ripetuti. Potresti iniziare da lì. Cose come l'ingresso principale si affacciano sulla strada, la porta verso l'angolo della stanza e qualsiasi altra cosa ti venga in mente. I modelli dell'autore originale non sono stati ampiamente utilizzati. È stato riferito che ora afferma che i modelli stessi non sono sufficienti.

Discuti sullo spostamento di cose nella stanza. Metti una sedia davanti alla porta. Avrebbe senso spostare le finestre o la porta altrove. Perché o perché no?

Prova qualcosa come impostare un posto al tavolo. Prova a organizzare le cose in base alle dimensioni, allontanandoti da te. Non è il modello normale e difficile da lavorare. Configuralo normalmente. È questo un layout adatto per un rapido bicchiere di succo? I modelli non sono sempre appropriati.

Viviamo sempre con schemi. Prendi tre o quattro libri e inizia a cercarli. C'è un modello evidente nel layout; frontespizio, sommario, contenuto e indice. Non sono richiesti tutti i componenti, ma sarebbe confuso vederli fuori posto.


0

I modelli di progettazione sono per lo sviluppo del software cosa sono le maschere per la lavorazione del legno. È uno strumento con il quale è possibile effettuare noti "tagli" da utilizzare in progetti più grandi.

Nota che non hai bisogno della maschera per eseguire il taglio, in alcune circostanze è più semplice.


0

Sento che la mia altra risposta rappresenta il caso generale, ma l'OP ha commentato chiedendo dettagli (quindi ho ritenuto che meritasse una risposta separata). Purtroppo non ho familiarità con il modello del Repository, ma mi prenderò cura degli altri. Di regola, penso che il modo migliore per spiegarli sia attraverso quale problema vuoi risolvere, perché vuoi risolverlo e come il problema lo compie.

Singleton

Questo modello viene utilizzato quando vogliamo garantire che ci sia solo uno di qualcosa. Il modello è realizzato impedendo ad altri di creare il nostro oggetto.

Wikipedia

MVC

Questo modello viene utilizzato per aiutare a mantenere le cose modulari con tutti i vantaggi che ne derivano. La vista è "l'interfaccia utente", il modello è i dati (compresa la logica aziendale) e il controller è il modo in cui le azioni dell'utente manipolano il modello. Con questa modularità, nulla mi impedisce di avere più viste / controller per lavorare con lo stesso modello. Per un esempio eccessivamente semplificato, posso interagire con la mia e-mail ("modello") tramite un sito Web, un'applicazione desktop e il mio iPhone ("visualizzazioni + controller"). Se ho una cassetta postale di gruppo condivisa, potrei creare un controller che non invierebbe e-mail e riutilizzare la stessa vista applicazione e la stessa e-mail. (sì, eccessivamente semplicistico, ma speriamo comprensibile :))

Inoltre, con questa ben definita separazione delle preoccupazioni, i cambiamenti in uno (idealmente) non richiedono cambiamenti in un altro. Esempio concreto, se devo supportare la lettura / scrittura su un database MySQL anziché su un database Oracle, dovrei solo cambiare il mio modello e la mia vista / controller non cambia.

Wikipedia

Fabbrica

Devi stare attento qui poiché ci sono molti modelli simili chiamati Factory ... Parlerò della Fabbrica astratta , ma dovresti sapere che esiste anche un modello Metodo di fabbrica .

Fondamentalmente, userei una Fabbrica astratta quando so quali passaggi voglio eseguire, ma i passaggi su come eseguire questi passaggi individuali potrebbero variare. Ad esempio, potrei creare un'applicazione in cui devo creare una finestra di dialogo con un pulsante su di essa. Facendo in modo che il mio codice utilizzi un'ipotetica factory dell'interfaccia utente, se ho bisogno del mio codice su Mac o Linux anziché Windows, fornisco solo una factory diversa e il resto del mio codice non cambia. Per un esempio potenzialmente selvaggio, potrei avere una Web Factory e improvvisamente la maggior parte del codice che supporta la mia applicazione desktop ora sta anche alimentando un sito Web ricco :) (ok poco pratico per altri motivi, ma in teoria :))


0

A un bambino di 10 anni che vuole diventare un hacker, direi.

Immagina se potessi avere alcuni dei migliori hacker del mondo seduti accanto a te mentre stavi hackerando via .. e ogni tanto direbbero .. "sai se lo fai in questo modo ... [inserisci schema] ... allora il tuo codice sarà [più veloce / più sicuro / più gestibile / ecc] "quanto sarebbe bello.

Ora che suppongo che sia appassionata dell'idea - non perderei tempo a spiegare ogni modello, imposterei il suo "compito di hacking" ... e poi pubblicherò applicando un modello di progettazione e spiegherò il valore ... buone risorse e vedere dove va.

Ma soprattutto dovrà impararli attraverso il mentoring.

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.