Rassegna di progettazione orientata agli oggetti di base per PHP

1

Sto tentando di apprendere la programmazione orientata agli oggetti progettando una semplice applicazione web relativa al calendario liturgico cattolico. Ho pochissimo addestramento formalizzato in programmazione, ma sono stato in grado di apprendere più o meno con successo i concetti di programmazione di base e gli scopi / la sintassi di un paio di lingue.

Speravo di ricevere feedback sul seguente progetto che ho elaborato e implementato nei test. Il caso di utilizzo di base è quello di essere in grado di trovare i dettagli del calendario di qualsiasi data e ora attraverso la logica dell'applicazione e alcune query di database. Ho sviluppato le classi in quanto tali:

class Year
    create several DateTime objects for important movables feasts for a year

class Season extends Year
    create several properties for each liturgical season based on the DateTime
    objects from Year and additional application logic

class Day extends Season
    contains an array of Hours objects since a liturgical day is not necessarily
    the same as a 24 hour temporal day

class Hour extends Day
    determines the liturgical hour details including the feast being celebrated
    and DateTime objects representing the start and stop times of the hour since
    and "hour" <> a temporal hour of 60 minutes

Con questo design, posso creare un'ora passando un singolo parametro ($ date). L'ora deve sapere quale stagione liturgica è per qualche logica applicativa, quindi crea un oggetto Stagione basato su $ date. L'oggetto Stagione, tuttavia, non può essere creato finché non sa quando si verificano determinati giorni festivi in un dato anno (ad esempio, Pasqua determina le date di inizio e di fine per diverse stagioni liturgiche), quindi crea un oggetto Anno. Si tratta di un modello "desiderabile" tale che per creare un singolo oggetto desiderato (Ora) vengono creati altri due oggetti (Stagione e Anno)? È "corretto" estendere le classi per riflettere una relazione gerarchica come la mia (il periodo temporale più grande è "in cima", seguito dalla più grande suddivisione di quella, ecc ... fino al più piccolo periodo di ora) ?

Lo scopo principale di questa applicazione web sarà quello di mostrare fatti religiosi e letteratura basati sull'attuale ora liturgica. Quindi, l'ora è il pezzo più importante per l'utente finale - ma questo non può essere determinato con successo senza i periodi "più grandi" della stagione e dell'anno. L'oggetto del giorno sarà utilizzato solo per scopi di navigazione / informazione (ad esempio, quali sono gli eventi religiosi importanti in tutte le ore liturgiche di oggi?) E probabilmente non includerà alcun evento eseguibile al suo interno.

Nel test, ho creato un anno di oggetti Date che si traducono in 2.920 ore, stagioni e anni (365 * 8 per ogni tipo di oggetto = 8.760 oggetti totali). La logica dell'applicazione è corretta e produce i risultati dei dati desiderati. Tuttavia, questo sembra un numero incredibilmente alto di istanze di oggetti per un sistema così semplice, quindi mi piacerebbe sapere se sto usando male gli oggetti o fraintendendo totalmente il loro scopo. Penso che sia più desiderabile essere in grado di creare un singolo oggetto Year che generi 13 oggetti Season che potrebbero essere referenziati da ogni Hour che ho bisogno di creare ... creando così solo 2.934 oggetti (2.920 Hour, 13 Season e 1 anno).

Ogni pensiero sarebbe apprezzato!

    
posta Daniel Soukup 27.08.2014 - 05:45
fonte

1 risposta

1

Quello che penso che @SlappyTheFish stia ottenendo nel suo commento è che con l'estensione stai praticamente dicendo al tuo codice che una stagione È un anno. Quando in realtà, una stagione NON È un anno, un anno HA stagioni. Questo è fondamentalmente il riferimento a is-a e has-a che aveva menzionato.

Ora esaminando l'incapsulamento avresti:

  • oggetto di 1 anno
  • 4 oggetti di stagione, contenuti all'interno di una serie di stagioni all'interno dell'anno.
  • Ogni oggetto Season conterrà una matrice di oggetti Day (il numero da corrispondere alla corretta distribuzione dei giorni in Seasons)
  • Ogni oggetto giorno contiene una matrice Hours, che conterrà oggetti di 24 ore.

Se questo è il miglior design è una domanda diversa, ma ti dà un'idea di incapsulamento invece di ereditarietà.

    
risposta data 27.08.2014 - 15:10
fonte

Leggi altre domande sui tag