2009-02-20 16 views
5

Ho letto tutti i libri sul perché creare una classe e cose come "cercare i nomi nelle vostre esigenze" ma non sembra essere sufficiente. Le mie classi mi sembrano disordinate. Mi piacerebbe sapere se ci sono delle metriche o qualcosa in cui posso confrontare le mie classi e vedere se sono ben progettate. In caso contrario, chi è il guru OO più rispettato in cui posso ottenere i consigli di progettazione della classe corretta?Desigining Proper Classes

+0

+1, mi piacerebbe sapere anche – krebstar

risposta

2

se si ha familiarità con la progettazione di database, in particolare il concetto di normalizzazione, allora la risposta è semplice: una classe di data-centric dovrebbe rappresentare un'entità in terza forma normale

se questo non è utile, provate questo invece:

  • una classe è una raccolta di elementi di dati ed i metodi che operano su di essi
  • una classe dovrebbe avere una responsabilità singolare, vale a dire che dovrebbe rappresentare una cosa in vostro modello; se rappresenta più di una cosa, dovrebbe essere più di una classe.
  • tutti gli elementi di dati in una classe devono essere associati/correlati logicamente tra loro; se non lo sono, diviso in due o più classi
  • tutti i metodi in una classe deve operare solo sui parametri di input e elementi di dati della classe - vedi Law of Demeter

che è circa quanto posso andare con un consiglio generale astratto (senza scrivere un lungo saggio); potresti pubblicare una delle tue lezioni per la critica se hai bisogno di un consiglio specifico

+0

@ [Celebrus]: grazie –

0

Penso che il design dell'oggetto sia tanto l'arte quanto la scienza. Ci vuole tempo e pratica per capire come progettare eleganti classi eleganti &. Forse se puoi dare un esempio di una lezione semplice che hai progettato non sei soddisfatto con SO, gli utenti possono criticare e fornire indicazioni. Non sono sicuro che ci siano risposte generali al di fuori di ciò che hai già letto nei testi.

+0

, quale lingua stai usando? sebbene l'OOD sia neutrale rispetto alla lingua, l'uso di funzioni specifiche della lingua in classe può renderlo più pulito. – Jason

0

Il guru OO più rispettato che conosca personalmente è StackOverflow. Metti qui i tuoi nomi di classe e penso che avrai un buon numero di recensioni.

+0

Bene o empio? – orbfish

0

Le classi sono tipicamente utilizzate per modellare i concetti del dominio del problema. Una volta che hai un problema ben definito (ovvero il set di casi d'uso), sarai in grado di identificare tutti i partecipanti. Un sottoinsieme dei partecipanti sarà intrinseco al sistema che stai progettando. Inizia con una grande scatola nera come sistema. Continua a scomporlo, come e quando hai più informazioni. Quando hai un livello in cui non possono più essere scomposti (in concetti nel tuo dominio problematico), inizi a ricevere le tue lezioni.

Ma poi, questa è una visione soggettiva di un non-guru. Suggerirei un pizzico di sale al menu.

4

La creazione di classi che iniziano a essere pulite e diventano disordinate è una parte fondamentale di OO, ovvero quando si refactoring. Molti sviluppatori cercano di passare al design di classe perfetto fin dall'inizio, nella mia esperienza che non è proprio possibile, invece inciampi, risolvendo il problema e poi refactoring. Puoi raccogliere, basare le classi e le interfacce man mano che il design emerge.

+0

se non sai come progettare una buona classe in primo luogo, è probabile che anche tu non sappia come rifattorizzare una classe per renderla migliore ... ;-) –

+0

Questo è vero, ma il suo punto è vero anche e fu mancato altrove. – orbfish

0

Metriche? Non è così che ti fideresti di loro.

Le tue lezioni stanno svolgendo il lavoro per far funzionare il programma e mantenerlo gestibile attraverso più revisioni?

Se sì, stai andando bene.

Se no, chiediti perché no, quindi modifica ciò che non funziona.

2

Cerca di concentrarti sul comportamento anziché sulla struttura. Gli oggetti sono entità "viventi" con comportamenti e responsabilità. Digli di fare le cose. Dai un'occhiata all'approccio CRC-card per aiutarti a modellare in questo modo.