Comments 4
Посмотрел ваш подход. Вы его реализовали «влоб» и ООП тут прибито гвоздями.
У вас дерево «заполняется» фруктами при вызове метода harvest. Соответственно протестировать код будет невозможно. Лучше выделить в отельный метод: growUp или просто initialize. Медли должен принимать коллекцию фруктов.
Далее у вас может быть более одного сборщика фруктов, так что Garten, должен получить коллекцию сборщиков, которые будут обходить деревья по заданному плану сборки урожая
Вам нужен класс HarvestPlan, который определяет порядок обхода деревьев в саду и правила сборки фруктов- какого размера собирать, как отличать зрелые от зелёных и т.д.
harvestPlan должен назначаться сборщику. При этом надо решить- будь ли у сборщика только один HarvestPlan или их может быть несколько.
HarvestPlan скорее всего должен отвечать за сбор только одного типа фруктов - или яблок или груш. Так как в реальности вы не собираетесь все фрукты в одну кучу.
Скорее всего у вас должен быть класс Basket- куда собираются фрукты. На классе Basket можно гонять статистику и аналитику - сколько собрали чего и т.д.
Класс Fruit - скорее всего должен иметь ID дерева, который назначается в момент когда вы «выращиваете» фрукт на дереве. Считаем что у нас супер продвинутое хозяйство и мы маркируем каждое яблоко :) Или можно считать что с каждого дерева мы собираем в одну корзину/Basket, но тогда надо будет переписать класс аналитики.
Это примерно минимум декомпозиции задачи. Как именно и на каком языке это реализовать - роли не играет.
Если задача для собеседования то можете блеснуть идеей dubble Dispatch, чтобы ваши HarvestPlan прилагались только к правильным деревьям.
При решении задачи главное не перестараться
Замечания разумные, но мне кажется, надо исходить из постановочных условий самой задачи. И надо понимать практическую часть реализуемой задачи. Очевидно, что данное тестовое задание направлено на то, чтобы понять как Соискатель владеет ООПшечкой. И усложнять реализацию таким нагромождением "лишних" и "необъявленных" объектов - только делать хуже. В боевой задаче ваш подход конечно более основательный, но... По аналогии с известным выражением "краткость - сестра таланта", тут так же важно не перемудрить.
По мне, так вполне норм, только количество и вес фруктов, я бы добавлял при создании дерева.
Решение задачи от Оборот.ру: Создаем прототип сборщика фруктов в саду на PHP