2012-12-03 11 views
17

Sto provando ad entrare in OOP ultimamente e ho problemi con i principi SOLID e gli schemi di progettazione. Capisco perché le persone li usano, e voglio davvero usarli anche io, ma non riesco a capire come sviluppare le mie lezioni secondo le specifiche. Gradirei davvero qualcosa che possa aiutare la mia comprensione di questo.Sembra non capire i principi SOLID e i modelli di progettazione

+1

Penso che una buona comprensione di ciò avvenga solo con esperienza lavorativa, importante è l'esperienza in un team con gli sviluppatori GOOD – sll

+0

Penso che dovresti essere un po 'più specifico, forse per un particolare principio che ti causa problemi. –

+0

Prova ad imparare dagli anti-pattern. Prova a scrivere una piccola app che viola volutamente il consiglio di SOLID e un'app che segue il consiglio e guarda cosa è meno doloroso scrivere. – MatthewMartin

risposta

51

Ho frequentato un corso al college che ha trascorso due settimane in giro a disegnare disegni e ho letto il libro Gang of Four senza successo. Capire che cosa serviva ogni modello e come usarlo per adattarsi ai problemi era molto difficile per me, uno sviluppatore che non aveva molta esperienza nella programmazione OO.

Il libro che ha fatto veramente clic per me era Head First Design Patterns. Inizia mostrando un problema, approcci diversi che gli sviluppatori hanno preso in considerazione, e poi come hanno finito con l'utilizzare un modello di progettazione per risolverlo. Usa un linguaggio molto semplice e mantiene il libro molto coinvolgente.

design pattern finiscono per essere un modo per descrivere una soluzione, ma non ha adattare le classi alla soluzione. Pensa a loro più come una guida che suggerisce una buona soluzione per una vasta gamma di problemi. parlare

Let su SOLID:

  1. responsabilità singola. Una classe dovrebbe avere una sola responsabilità. Ciò significa che, ad esempio, una classe Persona dovrebbe solo preoccuparsi del problema del dominio riguardante la persona stessa, e non, ad esempio, la sua persistenza nel database. Per questo, potresti voler usare un PersonDAO per esempio. Una classe Persona potrebbe voler mantenere le sue responsabilità il più breve possibile. Se una classe usa troppe dipendenze esterne (cioè altre classi), questo è un sintomo che la classe sta avendo troppe responsabilità. Questo problema si presenta spesso quando gli sviluppatori cercano di modellare il mondo reale usando oggetti e portandolo troppo lontano. Le applicazioni liberamente accoppiate spesso non sono molto facili da navigare e non modellano esattamente come funziona il mondo reale.
  2. Aperto Chiuso. Le classi dovrebbero essere estensibili, ma non modificabili. Ciò significa che aggiungere un nuovo campo a una classe va bene, ma la modifica delle cose esistenti non lo è. Altri componenti del programma possono dipendere da detto campo.
  3. sostituzione Liskov. Una classe che si aspetta un oggetto di tipo animale dovrebbe funzionare se un cane sottoclasse e un gatto sottoclasse vengono passati. Ciò significa che l'animale NON dovrebbe avere un metodo chiamato corteccia per esempio, poiché le sottoclassi di tipo cat non saranno in grado di abbaiare. Le classi che usano la classe Animale, inoltre, non dovrebbero dipendere dai metodi che appartengono a un cane di classe. Non fare cose come "Se questo animale è un cane, allora (calcola l'animale al cane) abbaia: se l'animale è un gatto allora (lancia animale a gatto) miagola".
  4. Principio di separazione interfaccia. Mantieni le tue interfacce il più piccolo possibile. Un insegnante che è anche uno studente dovrebbe implementare entrambe le interfacce IStudent e ITeacher, invece di un'unica grande interfaccia chiamata IStudentAndTeacher.
  5. Principio di inversione delle dipendenze. Gli oggetti non dovrebbero istanziare le loro dipendenze, ma dovrebbero essere passati a loro. Ad esempio, un'Auto che ha un oggetto Motore all'interno non dovrebbe fare engine = new DieselEngine(), ma piuttosto dovrebbe essere passato ad esso dal costruttore. In questo modo la classe dell'auto non sarà accoppiata alla classe DieselEngine.
+5

+1 per la raccomandazione del libro. Il libro dei modelli di progettazione GoF è difficile da capire. Il primo libro è un assoluto must da leggere per arrivare al prossimo livello di programmazione. –

+7

** 1) ** Dovrebbe avere una ragione per cambiare. È diverso da una responsabilità. ** 2) ** No. non è necessario modificare le classi. L'estensione è la stessa cosa dell'eredità. ** 3) ** Può avere un metodo 'Bark' se ha anche un metodo' CanBark'. ;) ** 4 ** Esatto, ma piuttosto zoppo esempio;) ** 5 ** Questa è l'iniezione di dipendenza. L'inversione di dipendenza dice che dovresti dipendere dalle astrazioni e che la modulistica di livello superiore dipende dai moduli di livello inferiore e non viceversa. – jgauffin

+0

Iniziare a leggere quel libro. È un aiuto significativo. Grazie. – will

Problemi correlati