Когда мы делаем Object-oriented-design то для затравки можно использовать принцип
Существительные в задаче - это объекты, глаголы - это методы
В данном случае, начало может быть такое:
Зал:
Состоит из рядов
Заполнен если все ряды заполнены
Ряд:
Состоит из мест
Заполнен, если все билеты на места из ряда проданы
Место:
Может быть нескольких типов
Независимо от типа имеет
Статус (занято/свободно/забронировано)
Цену
Далее уже это все потихоньку раскручиваем дальше
То что места в ряде имеют разную цену, ну и что?