2010-10-17 16 views
7

Dovrei scrivere un semplice sistema di prenotazione del cinema, che consente al cliente di effettuare prenotazioni per i film. Il cinema è costituito da diversi teatri, con diverse quantità di posti, prezzo e orari di programmazione dei film. L'utente dovrebbe essere in grado di inserire il suo nome e altre credenziali e quindi effettuare prenotazioni per 1 o più film e posti. Al termine della prenotazione, il sistema dovrebbe emettere una ricevuta, elencando il suo nome, il film (i) lo showtime (s) e il numero di prenotazione.Ho bisogno di consigli sul corretto design della classe

ho cercato di seguire le OOP-principi meglio le mie capacità attuali.

Le classi ho impostato sarebbe il seguente:

  • CinemaBooking -> entrypoint in programma
  • Camera -> riceve la sua dimensione salotto tramite [riga] [col]
  • Film - > ha movietitle, shwotime, la stanza e un prezzo.
  • clienti -> shoud memorizzare qualsiasi informazioni dell'utente come nome, email e telefono e generare
    numero di prenotazione

Io sono un po 'incerto su dove mettere l'utente-I/O, in questo caso: Shoud esso rimanere all'interno di CinemaBooking, o dovrei generare una classe separata che fa solo l'I/O? O dovrei semplicemente spostare l'intero materiale I/O in un'altra classe (ad esempio, la classe cliente)?

risposta

5

Ci sono molti consigli da dare, darò solo il più importante.

In primo luogo, l'idea principale di programmazione orientata agli oggetti è stato quello di soddisfare mondo reale, quindi è meglio fare le vostre classi il più vicino agli oggetti reali possibili. Crea classe Prenotazione che equivale solo a un ticket, non a un punto di ingresso per un programma. Cioè conterrà informazioni su utente, teatro, posto e costo. Crea un teatro di classe che conterrà il numero di posti (non righe x colonne - alcuni posti possono essere riservati, alcuni possono essere rotti e alcuni teatri non hanno una struttura quadrata). In alternativa, poiché un teatro può avere più stanze, è possibile creare una stanza di classe, che avrà "posti" di proprietà, e quindi aggiungere stanze al teatro. Crea anche film di classe. Film e Teatri/Stanze si rispetteranno a vicenda: il film conterrà l'elenco dei teatri in cui viene mostrato, e il teatro avrà l'elenco dei film che mostra. Quindi creare la classe Seance, che conterrà tempo e film. Crea classe Cliente solo nel caso in cui lavorerai più tardi con questo cliente e desideri salvare i suoi attributi (nome, cronologia delle prenotazioni, ecc.). Altrimenti non ha senso creare un'altra classe. Questo è il tuo modello . Le lezioni possono essere molto, ma se hai un'idea di base, questo non sarà un problema.

In secondo luogo, creare classe BookingSystem che riepiloga la funzionalità di tutte le classi precedenti. Sarà un'implementazione di Facade design pattern e semplifica davvero l'accesso al sottosistema di prenotazione.

In terzo luogo, creare una classe separata per il lavoro di I/O. Mai metto lavoro I/O alle classi del modello. Immagina che il tuo sistema di prenotazione del cinema faccia parte di un altro sistema con il proprio I/O: dovrai riprogettare tutto il tuo codice per ricevere i dati dai livelli superiori. Quindi, basta creare una classe separata per l'input dell'utente e l'output del programma. E questa sarà la tua vista.

Infine, creare la classe principale del programma. Puoi dare lo stesso nome al programma stesso di qualcosa del genere. Questo controllerà semplicemente il flusso del programma dalla vista ai modelli e viceversa. Quindi, questa parte è denominata controller e l'idea generale è nota come Model-View-Controller pattern.

2

Scrivere metodi toString() su tutte le classi. Preoccupati per l'I/O più tardi. Prendi le relazioni giusto prima. I/O è l'ultima delle tue preoccupazioni.

+0

Forse mi sono perso qualcosa, ma dove si inserisce? A giudicare dal fatto che ha già ordinato tutto diverso da IO. E anche se no, un po 'di premeditazione per la struttura di classe non ferisce mai nessuno. Dio sa che tutti noi odiamo tornare indietro e dover riscrivere roba per mancanza di esso. – AaronM

+0

In realtà, non puoi dire cosa è stato risolto. Non vedo alcun codice, vero? Suppongo che questo sia l'inizio del compito e che qualcuno si sia avvolto attorno all'asse sui metodi diString e IO. Sto anche partendo dal presupposto che qualcuno che non può ordinare toString è improbabile che sia in grado di gestire anche un grafico di relazione tra oggetti con quattro partecipanti. Se sei ottimista, sono un pessimista. – duffymo

3

Ogni volta che faccio classe, ha seguito in esso: -

  1. Tutte le variabili di istanza privato.

  2. Implementare getter e setter.

  3. implementare il metodo toString().

Se si utilizza Eclipse, sarà quindi utile implementare questi metodi automaticamente. Basta scrivere variabili di istanza, fare clic con il tasto destro del mouse su editor -> Origine -> Genera getter e setter.

2

In realtà, il ticket non conterrà informazioni sul posto per il teatro dell'utente o sul costo. Conterrà riferimenti ad altri oggetti: Utente, Teatro, Costo del posto.

Avrete bisogno di una classe di tipo "manager" che manterrà il resto del programma: BookingApp che ha un main() potrebbe essere esso. Sono d'accordo non preoccuparti tanto dell'interfaccia per ora - ma NON stampare sul terminale dalle classi Dominio. Usa toString() per testare il contenuto dell'oggetto, ma il metodo main() dovrebbe chiamare i getter sulle altre classi e creare l'output. Pessima idea e forma per avere classi di dominio che scrivono direttamente sull'interfaccia utente. Quindi hai Teatro, Utente, Posto, Biglietto, Prezzo. Considera le dipendenze. La sede è legata al teatro e il prezzo è basato sul teatro e sul posto, presumo. Inizia con le cose e traccia le linee tra loro per mostrare come si comunicheranno o si richiameranno a vicenda. Ad esempio, dato un utente, trovare tutti i loro biglietti - dal posto di trovare il biglietto e dal teatro trovare posti. Quindi aggiungere gli attributi (privato come detto da JavaGeek). Inizia in piccolo. Forse solo teatri e posti. Accertalo e poi aggiungi la prossima classe. Aggiungi al tuo progetto in modo incrementale e iterativo. NON provare e scrivere e compilare tutto insieme in una sola volta. Suggerisco il libro Java Design di Peter Coad (molto economico e molto buono) come introduzione alla progettazione di Java.

Problemi correlati