2010-10-17 14 views
7

Se supone que debo escribir un sistema de reserva de cine simple, que permite a un cliente hacer reservas para películas. El cine consiste o en diferentes teatros, con diferente cantidad de asientos, precio y horarios de películas. El usuario debería poder ingresar su nombre y otras credenciales y luego hacer reservas para 1 o más películas y asientos. Cuando finaliza la reserva, el sistema debe emitir un recibo, con su nombre, la (s) película (s), el (los) horario (s) y el número de reserva.Necesito consejo sobre el diseño de clase adecuado

He intentado seguir los principios de OOP de la mejor manera posible.

Las clases He creado sería el siguiente:

  • CinemaBooking -> punto de entrada en Programm
  • habitación -> recibe su tamaño de asiento a través de [fila] [columna]
  • película - > tiene movietitle, shwotime, la habitación y un precio.
  • cliente -> shoud almacenar cualquier información del usuario como nombre, correo electrónico y teléfono y generar
    número de reserva

estoy un poco inseguro sobre dónde colocar la facilidad de uso de E/S en este caso: Shaud se permanecer en CinemaBooking, o debería generar una clase separada que solo hace la E/S? ¿O debería mover todo el material de E/S a otra clase (por ejemplo, la clase de cliente)?

Respuesta

5

Hay muchos consejos para dar, solo daré lo más importante.

En primer lugar, la idea principal de OOP era adaptarse al mundo real, por lo que es mejor hacer que sus clases sean lo más cercanas posible a los objetos reales. Crear reserva de clase que será solo equivalente a un ticket, no un punto de entrada para un programa. Es decir. contendrá información sobre el usuario, el teatro, el asiento y el costo. Crear una clase Teatro que contendrá el número de asientos (no filas x columnas; algunos asientos pueden reservarse, otros pueden estar rotos y algunos teatros simplemente no tienen estructura cuadrada). Alternativamente, dado que un Teatro puede tener varias salas, puede crear una Sala de clase, que tendrá "asientos" de propiedad, y luego agregar Salas al Teatro. También crea una clase de película. Películas y salas de cine/Salas se referirán entre sí: la película contendrá una lista de los teatros en los que se muestra, y Teatro tendrá una lista de las películas que muestra. Luego crea clase Seance, que contendrá tiempo y película. Cree clientes de clase solo en caso de que trabaje con este cliente más adelante y desee guardar sus atributos (nombre, historial de reservas, etc.). De lo contrario, no tiene sentido crear una clase más. Este es su modelo. Las clases pueden ser un poco, pero si tienes una idea central, esto no será un problema.

En segundo lugar, cree la clase BookingSystem que resumirá la funcionalidad de todas las clases anteriores. Será una implementación de Facade design pattern, y realmente simplifica el acceso a su subsistema de reserva.

En tercer lugar, cree una clase separada para el trabajo de E/S. Nunca ponga el trabajo de E/S a las clases modelo. Imagine que su sistema de reserva de cine formará parte de otro sistema con su propia E/S: necesitará rediseñar todo su código para recibir datos de capas superiores. Por lo tanto, solo haga una clase separada para la entrada del usuario y la salida del programa. Y esta será su vista.

Finalmente, cree la clase de programa principal. Puedes darle el mismo nombre que el programa tiene en sí mismo de algo así. Éste solo controlará el flujo del programa desde la vista hasta los modelos y viceversa. Por lo tanto, esta parte se llama controlador, y la idea general se conoce como Model-View-Controller pattern.

2

Escriba métodos toString() en todas las clases. Preocúpese por la E/S más tarde. Obtenga las relaciones correctas primero. I/O es la menor de tus preocupaciones.

+0

Tal vez me he perdido algo, pero ¿dónde encaja esto? Por el sonido de eso ya tiene todo lo que no sea IO ordenado. E incluso si no, un poco de previsión para la estructura de clases nunca lastimó a nadie. Dios sabe que todos odiamos volver y tener que reescribir cosas por falta de ellas. – AaronM

+0

En realidad, no puedes decir qué ha resuelto. No veo ningún código, ¿verdad? Estoy asumiendo que este es el comienzo de la tarea y que alguien está envuelto alrededor del eje en métodos String e IO. También estoy asumiendo que alguien que no puede resolver toString es poco probable que sea capaz de manejar incluso un gráfico de relación de objetos con cuatro participantes. Si eres optimista, estoy siendo pesimista. – duffymo

3

Siempre que hago clase, se ha siguiente en él: -

  1. Todas las variables de instancia configurados como privados.

  2. Implementan getters y setters.

  3. Implemente el método toString().

Si está utilizando Eclipse, le ayudará a implementar estos métodos automáticamente. Simplemente escriba las variables de instancia, haga clic derecho en el editor -> Fuente -> Generar getters y setters.

2

En realidad, el ticket no contendrá información sobre el asiento o el costo del asiento del usuario. Contendrá referencias a otros objetos: Usuario, Teatro, Costo de asiento.

Necesitará una clase tipo "manager" o0ne que contendrá el resto del programa: BookingApp que tiene un main() podría serlo. Estoy de acuerdo, no se preocupen tanto por la interfaz por ahora, pero NO impriman en el terminal desde las clases de dominio. Utilice toString() para probar el contenido del objeto, pero el método main() debe llamar a getters en las otras clases y crear el resultado. Muy mala idea y forma de tener clases de dominio escribiendo directamente en la interfaz de usuario. Entonces, tienes Teatro, Usuario, Asiento, Boleto, Precio. Considera las dependencias. Seat está vinculado al teatro y el precio se basa en el teatro y el asiento, supongo. Comience con las Cosas y dibuje líneas entre ellas para mostrar cómo se comunicarán o se referirán entre sí. Por ejemplo, dado un Usuario, encuentre todas sus entradas, desde el asiento de búsqueda de entradas y desde el teatro de búsqueda de asientos. A continuación, agregue los atributos (privados como dijo JavaGeek). Comience pequeño. Tal vez solo teatros y asientos. Haz que funcione y luego agrega la siguiente clase. Agregue a su diseño de forma gradual e iterativa. NO intente escribir y compilar todo al mismo tiempo. Sugiero el libro de Java Design de Peter Coad (muy barato y muy bueno) como una buena introducción al diseño de Java.

Cuestiones relacionadas