Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍅 Задача: Классы и «Томатный Куст»

Этот репозиторий содержит пошаговую учебную задачу по теме «Классы» в C#. Вы будете моделировать рост томатов на кусте, последовательно реализуя функционал и проверяя его с помощью юнит-тестов.


🗺️ План работы

  1. ✍️ Реализуйте код: Откройте проект App и найдите классы Tomato и Bush. Ваша задача — реализовать методы, которые сейчас выбрасывают NotImplementedException.
  2. 🧪 Запустите тесты: Откройте проект App.Tests. После реализации каждого этапа запускайте соответствующие тесты — они должны стать «зелёными».
  3. ➡️ Двигайтесь поэтапно: Не пытайтесь сделать всё сразу. Реализуйте Этап 1, добейтесь прохождения его тестов, и только потом переходите к Этапу 2.

💡 Важно: Изначально все тесты падают. Это ожидаемое поведение. Ваша цель — последовательно "починить" их своей реализацией.


🌱 Этапы роста (Задачи)

Ниже описаны все этапы задачи. Разворачивайте каждый этап по мере готовности к его реализации.

Этап 1 (Обязательный) — Базовые классы Tomato и Bush

Класс Tomato

  • Свойство: State (тип int) — состояние зрелости томата. Начальное значение — 1.
  • Метод: Grow() — увеличивает State на 1. Если состояние достигло 5, оно больше не меняется.
  • Метод: ToString() — должен возвращать JSON-подобную строку, например: { "state": 1 }.

Класс Bush

  • Свойство: Tomatoes — список томатов на кусте.
  • Метод: Grow() — запускает рост всего куста.
  • Приватный метод: GrowAll() — вызывает метод Grow() у каждого томата в списке Tomatoes. Должен вызываться из публичного метода Grow().
  • Метод: ToString() — должен возвращать строку со списком всех томатов, например: { "tomatoes": [ { "state": 1 }, { "state": 2 } ] }.
Этап 2 (Обязательный) — Появление новых томатов

Класс Bush

  • Приватный метод: NewTomato() — с вероятностью 30% добавляет в список Tomatoes новый томат (new Tomato()). Этот метод также должен вызываться из Grow().

Примечание о тестируемости: Для предсказуемости тестов класс Bush получает зависимость IRandom. В тестах мы подменяем её фейковым генератором, который всегда выдаёт нужные значения.

Этап 3 (Обязательный) — Сбор урожая

Класс Tomato

  • Изменить логику Grow(): Состояния томата теперь меняются по схеме 1-2-3-4-5-5-5-6. Томат "задерживается" на состоянии 5 три полных цикла роста, прежде чем перейти в состояние 6.

Класс Bush

  • Приватный метод: RemoveTomatoes() — удаляет из списка Tomatoes все томаты, которые достигли состояния 6 (созрели для сбора). Этот метод также должен вызываться из Grow().
⭐ Этап 4 (Дополнительный) — Случайный рост

Класс Bush

  • Приватный метод: RandomGrow() — реализует более сложную логику роста:
    • За один вызов Grow() должен вырасти не весь куст, а случайное количество случайных томатов.
    • Если на кусте N томатов, должно вырасти от 1 до N штук.
    • Один и тот же томат не может быть выбран для роста дважды за один вызов.
  • Изменить логику Grow(): вызов RandomGrow() должен заменить собой вызов GrowAll().

📁 Структура репозитория

/App
  /Tomato.cs         # Класс томата (здесь вы работаете)
  /Bush.cs           # Класс куста (и здесь)
  /IRandom.cs        # Интерфейс для тестируемости

/App.Tests
  /Stage1_Tests.cs   # Тесты для Этапа 1
  /Stage2_Tests.cs   # Тесты для Этапа 2
  # ... и так далее

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages