Qual è il processo di pensiero orientato agli oggetti? [chiuso]

9

Ho studiato l'OOP in collaborazione con l'implementazione MVC di Zend negli ultimi mesi. Sono abbastanza nuovo alla programmazione, in generale, ma sento strongmente che dovrei imparare le cose nel modo "giusto", che per me significa essere sicuro di capire perché le cose sono fatte come sono. Ho scoperto che imparando a fare qualcosa (qualsiasi cosa, diciamo la musica), il modo migliore per imparare a fare qualcosa è sapere perché è fatto in quel modo in primo luogo.

In ogni caso, ho faticato molto a capire come sviluppare i miei modelli di business (cioè la M di MVC), e ho deciso che non è perché non capisco l'OOP in generale, perché ho studiato per diversi mesi e non credo che i concetti siano molto difficili da comprendere. Trovo che gli esempi che ho studiato siano molto intuitivi, in realtà. Il problema per me, penso, sta nel tradurre i miei problemi in soluzioni orientate agli oggetti. Gli esempi nei libri (che ho letto finora) sono troppo ovvi, quindi il processo di tradurre il problema in oggetti non è molto difficile. Quello che penso possa mancare è un processo astratto di alto livello. Una sorta di elenco di passaggi o domande a cui ogni soluzione orientata agli oggetti deve rispondere al più alto livello.

Se dovessi descrivere un tale processo in non più di cinque passaggi, quali sarebbero e perché? Qual è il processo più efficace per tradurre qualsiasi problema in una soluzione orientata agli oggetti?

    
posta World Engineer 04.09.2011 - 02:16
fonte

3 risposte

10

Trovare un modello adatto non è sempre semplice. È una di queste cose che richiede più esperienza della semplice conoscenza. Tuttavia, la seguente semplice ricetta potrebbe aiutarti a superare un blocco mentale iniziale.

È stato originariamente descritto in questo documento di Abbott e viene frequentemente riferito a come "analisi testuale di Abbott".

  1. Scrivi una specifica di testo normale.
  2. Identifica le classi : i nomi sono buoni candidati
  3. Trova gli attributi: aggettivi / avverbi sono buoni candidati
  4. Trova le operazioni: i verbi sono buoni candidati
  5. Trova le associazioni tra le classi.
  6. Perfeziona.

Esempio:

Nouns , verbs e adjectives sono marcati.

The library contains books and journals. It may have several copies of a given book. Some of the books are for short-term loans only. All other books can be borrowed by any library member for three weeks. Members of the library can normally borrow up to six items at a time, but members of the staff may borrow up to 12 items at one time. Only members of the staff may borrow journals.

Una prima iterazione dell'analisi produrrebbe:

Le classi:

  • Libreria
  • Libro, giornale
  • Copia
  • Prestito
  • Membro della biblioteca
  • Voce
  • Membro dello staff

Da qui in avanti, puoi pensare a quale classe ha bisogno di quali attributi e metodi implementare il comportamento e poi perfezionare il modello in modo crescente.

    
risposta data 04.09.2011 - 09:36
fonte
4

Secondo me, l'approccio TDD è naturale ed efficiente:

  1. Annota i requisiti specifici (Given, When, Then)
  2. Traduci ogni requisito (il più importante per primo) in un test unitario.
  3. Scrivi meno quantità di codice per superare il test scritto in # 2.
  4. Dopo aver superato il test, rifatta il codice in base ai principi di progettazione di SOLIDD.
  5. Dopo il # 4, assicurati che il tuo codice superi ancora tutti i test scritti.
  6. Ripeti 2-5.

Con questo processo, è possibile produrre gradualmente un codice verificabile con progettazione del suono. All'inizio potresti pensare che il test di scrittura non sia necessario, ma in realtà quell'attività ti aiuta a costruire un'architettura sonora.

    
risposta data 04.09.2011 - 07:21
fonte
3

Ecco i passaggi che uso nel codice c ++:

  1. decide il nome della classe
  2. decide i parametri del costruttore e i membri dei dati.
  3. decide i nomi delle funzioni dei membri e i prototipi
  4. renderlo indipendente dalle altre classi
  5. Il design è completo e tutto il resto è solo l'implementazione.

Il motivo per (1) è che definisce lo scopo di quale funzionalità appartiene alla classe. La ragione per (2) è che definisce come la classe comunica con il mondo esterno. Il motivo per (3) è che definisce come scegliere quale funzionalità della classe è necessaria in ogni situazione. Il motivo per (4) è che consente alle classi di essere utilizzate in molte situazioni differenti. Il motivo per (5) è che definisce il confine tra progettazione e implementazione.

    
risposta data 04.09.2011 - 04:50
fonte

Leggi altre domande sui tag