В код особо не всматривался, пардон, ориентировался на комментарии в коде.
Главное, имхо, в ООП это объединение некоторых данных и методов, которые изменяют эти данные, в единую логическую сущность под названием "класс". У вас как-то классов слишком дофига, и как-то непонятно они собраны в логические сущности. Например, класс "Повар" - там из данных вижу количество денег и массив с продуктами. Не особо вяжется это с сущностью "Повар". Или класс "Магазин" - в задаче приготовления борща нафига плодить такие сущности как склад магазина, например, или общая стоимость имеющихся в магазине продуктов. Понимаю, что задача надуманная, но все же.
Все вышенаписанное сугубое имхо.