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


9

Ho studiato OOP insieme all'implementazione MVC di Zend negli ultimi mesi. Sono abbastanza nuovo nella programmazione, in generale, ma sento fortemente che dovrei imparare le cose nel modo "giusto", il che per me significa essere sicuro di capire perché le cose sono fatte così come sono. Cioè, ho scoperto che nell'apprendere come fare qualcosa (qualsiasi cosa, dire musica), il modo migliore per imparare a fare qualcosa è sapere perché è stato fatto in quel modo in primo luogo.

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

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


1
OOP non è sempre tutto questo ...
Giobbe

Nel tuo studio su OOP hai già letto qualcosa sui modelli di design ?
Zoredache,

1
Ti consiglio di leggere il libro di Eric Evan su Domain Driven Design quando hai difficoltà a creare modelli. Vedi anche la risposta di @Simon Stellings. Il libro tratta questo processo in modo abbastanza dettagliato.
Falcon,

@Zoredache Mi sono imbattuto nel concetto di modelli di progettazione, così come alcuni esempi di alcuni, come singleton, factory e MVC stesso (che, nell'implementazione di Zend è anche front controller). Comunque, quella fu la mia prossima mossa, per così dire. Ho preso il libro di Martin Fowler sugli schemi aziendali e finora ho letto solo una parte dell'introduzione. È un'introduzione chiara e di facile lettura che consiglieresti?

@Falcon Avevo una domanda su php / MySQL e la formattazione della data su SO l'altro giorno, e avrei scelto la tua risposta ma era solo un commento, per quello che valeva.

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 da Abbott ed è spesso definito come "analisi testuale di Abbott".

  1. Scrivi una specifica di testo semplice.
  2. Identificare 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:

Sostantivi , verbi e adjectivessono contrassegnati.

La biblioteca contiene libri e riviste . Potrebbe avere diverse copie di un determinato libro . Alcuni libri sono solo per short-term prestiti . Tutti gli altri libri possono essere presi in prestito da qualsiasi membro della biblioteca per tre settimane. I membri della biblioteca possono normalmente prendere in prestito fino a sei oggetti alla volta, ma i membri del personale possono prendere in prestito fino a 12 oggetti contemporaneamente. Solo i membri del personale possono prendere in prestito riviste .

Una prima ripetizione dell'analisi produrrebbe:

Classi:

  • Biblioteca
  • Libro, diario
  • copia
  • Prestito
  • Membro della biblioteca
  • Articolo
  • Membro del personale

Da qui in poi, puoi pensare a quale classe ha bisogno di quali attributi e metodi per implementare il comportamento e quindi perfezionare quel modello sempre più.


1
Buona risposta. Oltre al documento di Abbott, raccomando il libro di Eric Evan su Domain Driven Design . Insegna come creare un linguaggio onnipresente per il progetto e come distillare un modello potente da esso.
Falcon,

Sono attratto da questa risposta perché ho studiato un po 'la linguistica e ha un buon senso intuitivo per me senza troppi sforzi, tuttavia ne ho paura per gli stessi motivi perché ho scoperto che troppa analogia può portarmi fuori strada .

@Falcon +1 per aver raccomandato un libro con la copertina di Kandinsky.

@ tbj1982: hai assolutamente ragione. È una semplice euristica e i risultati dovrebbero essere trattati tenendo conto di ciò. Non è il proiettile d'oro, ma può essere un utile antipasto.
Blubb

4

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

  1. Annotare requisiti specifici (dati, quando, quindi)
  2. Traduci ogni requisito (il più importante prima) in un test unitario.
  3. Scrivi la quantità minima di codice per superare il test scritto nel # 2.
  4. Dopo aver superato il test, refactoring del codice in base ai principi di progettazione SOLIDD.
  5. Dopo il n. 4, assicurati che il codice superi comunque tutti i test scritti.
  6. Ripeti 2-5.

Con questo processo, è possibile produrre gradualmente codice testabile con un design audio. All'inizio potresti pensare che scrivere test non sia necessario ma che l'attività ti aiuta a costruire un'architettura sonora.


3

Ecco i passaggi che utilizzo nel codice c ++:

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

Il motivo di (1) è che definisce l'ambito di quale funzionalità appartiene alla classe. La ragione di (2) è che definisce il modo in cui la classe comunica con il mondo esterno. Il motivo di (3) è che definisce come scegliere quale funzionalità della classe è necessaria in ogni situazione. Il motivo di (4) è che consente di utilizzare la classe in diverse situazioni. Il motivo di (5) è che definisce il confine tra progettazione e implementazione.


+1 per la denominazione. È incredibile quanto solo l'aggiunta di nomi possa organizzare i processi di pensiero, dal momento che stai implicitamente portando con te tutta la conoscenza del "mondo reale".
Mark Brackett,
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.