Есть много советов, которые я дам, я дам только самые важные.
Во-первых, основная идея ООП заключалась в том, чтобы соответствовать реальному миру, поэтому лучше сделать ваши классы максимально приближенными к реальным объектам.Создайте класс бронирования, который будет просто эквивалентом билета, а не точкой входа в программу.Т.е. он будет содержать информацию о пользователе, театре, месте и стоимости.Создайте класс Театр, который будет содержать количество мест (не ряды х столбцы - некоторые места могут быть зарезервированы, некоторые могут быть разбиты, а некоторые театры просто не имеют квадратной структуры).В качестве альтернативы, поскольку в одном театре может быть несколько комнат, вы можете создать класс Room, который будет иметь свойство «места», а затем добавить комнаты в театр.Также создайте класс Movie.Фильмы и Театры / Комнаты будут ссылаться друг на друга: фильм будет содержать список театров, в которых он показан, а театр будет иметь список фильмов, которые он показывает.Затем создайте класс Seance, который будет содержать время и фильм.Создавайте класс Customer только в том случае, если вы позже будете работать с этим клиентом и захотите сохранить его атрибуты (имя, историю бронирований и т. Д.).Иначе нет смысла создавать еще один класс.Это ваша модель .Классы могут очень немного, но если у вас есть основная идея, это не будет проблемой.
Во-вторых, создайте класс BookingSystem, который будет обобщать функциональность всех предыдущих классов.Это будет реализация шаблона проектирования фасада , и она действительно упростит доступ к вашей подсистеме бронирования.
В-третьих, создайте отдельный класс для работы ввода-вывода. Никогда не вводит работу ввода-вывода в классы моделей.Представьте, что ваша система бронирования в кинотеатре будет частью другой системы с собственным вводом / выводом - вам нужно будет перепроектировать весь код, чтобы получать данные из более высоких уровней.Итак, просто создайте отдельный класс для ввода пользователя и вывода программы.И это будет ваш просмотр .
Наконец, создайте основной класс программы.Вы можете дать ему то же имя, что и сама программа.Этот будет просто контролировать поток программы от просмотра к моделям и обратно.Итак, эта часть называется контроллер , а общая идея известна как модель модель-представление-контроллер .