Code Monkey home page Code Monkey logo

core-js-oop-tdd-orange-tree's Introduction

Модель апельсинового дерева

Фермер Федор заинтересован в создании модели своей апельсиновой фермы. Как доказательство своей концепции, он надеется смоделировать одно апельсиновое дерево и его ежегодное производство на протяжении всей его жизни. Федор начал работать над программой, но успех его фермы оставил ему совсем мало времени, чтобы продолжить разработку. Тебя наняли, чтобы сделать для него приложение.

В этой задаче ты будешь разрабатывать собственный класс: OrangeTree. Делать это необходимо используя подход TDD (Test-Driven Development). Сначала тебе предстоит продумать логику функционирования OrangeTree, понять как должны работать функции, что и в каких случаях они должны возвращать, и, наконец, отобразить это в тестах orange-tree.spec.js. Там есть заготовка для тебя.

Pre-release. Обзор предоставленного кода

Федор уже начал разрабатывать это приложение. Он создал класс Orange, который ты будешь использовать – на твоем апельсиновом дереве будут расти апельсины (Удивительно, не правда ли?). Федор только начал заниматься созданием класса OrangeTree. Он написал несколько методов и несколько комментариев о том, что они должны делать; он также предоставил некоторый код для тестирования апельсинового дерева. И, наконец, он запрограммировал сценарий всей жизни дерева в скрипте runner.js, который подцепляется в TreeLifeRunner.html, чтобы ты мог(ла) увидеть как развивалось дерево, какие плоды и в каком количестве приносило на протяжении всей своей жизни. Просмотри код, чтобы понять что планировал сделать Федор.

Release 0. Начни с тестов!

Здесь представлены некоторые детали, которые Федор предоставил для того, чтобы ты понимал(а) его видение того, какое поведение от модели апельсинового дерева он ожидал. Помни о том, что это ранняя версия приложения, подтверждающая лишь основную концепцию, поэтому не волнуйся о моделировании таких вещей, как влияние температуры на производство и т.д. Ты строишь самую базовую модель.

Каждая из деталей, написанных Федором, должна быть переведена в тесты, чтобы можно было убедиться, что твоя модель соответствует ожиданиям. В скобках Федор предоставил метод, которым он намеревался сопоставить эти детали. Твой класс может спокойно включать в себя и другие методы, помимо указанных.

Требования:

  • Дерево должно быть определенного возраста (.age).
  • Дерево должно иметь высоту (.height).
  • Каждый вегетационный период (.passGrowingSeason())
    • Любые неубранные апельсины из предыдущего сезона должны упасть.
    • Дерево должно стареть на 1 год.
    • Дерево должно расти на 2.5 фута в высоту до тех пор, пока оно не достигнет максимальной высоты - скажем, 25 футов.
    • Дерево должно приносить плоды, если оно зрелое (то есть ему не менее шести лет) - скажем, от 100 до 300 апельсинов (class Orange).
  • Необходимо проверить, достаточно ли дерево зрелое для производства фруктов (.isMature()).
  • Дерево должно погибнуть в возрасте 100 лет, и тебе необходимо проверить, погибло ли оно (.isDead()).
  • Нужно так же проверить, есть ли на дереве апельсины (hasOranges()).
  • Тебе необходимо сорвать апельсин с дерева (.pickAnOrange()) или спровоцировать вывод ошибки в случае, если ты попытаешься взять апельсин, а на дереве их нет.

Напоминаем, что ты должен начать с тестов. Напиши тесты, которые будут проверять соответствие работы твоих классов вышеприведенным требованиям. Заготовки тестов уже есть.

Release 1. Модель апельсинового дерева - пусть все твои тесты пройдут

Когда тесты будут готовы - запрограммируй все необходимые методы классов Orange и OrangeTree, чтобы в итоге все твои тесты проходили успешно. У тебя должны получиться следующие рабочие методы:

  • passGrowingSeason()
  • isMature()
  • isDead()
  • hasOranges()
  • pickAnOrange()

Release 2. Заверши скрипт моделирования производства

Теперь у тебя есть полностью проверенные и функциональные классы Orange и OrangeTree. Пришло время использовать эти модели в приложении. Помни, что Федор хочет видеть ежегодное производство апельсинового дерева в течение всей его жизни.

Тебе нужно доделать скрипт runner.js. В частности, тебе нужно вычислить локальную переменную averageOrangeDiameter, которая говорит какой средний диаметр апельсинов. Запусти TreeLifeRunner.html, чтобы увидеть свои классы в действии.

Не забудь закомментироать все require и module.exports прежде чем запускать TreeLifeRunner.html.

Заключение

Ты смоделировал(а) объект из реального мира в соответствии с потребностями приложения. Впредь ты будешь делать такие вещи часто. Тебе приходилось принимать решения относительно внутреннего состояния дерева (то есть, какие переменные ему нужны). У каждого дерева следует отслеживать возраст, высоту и количество апельсинов. И ты можешь использовать эти показатели для того, чтобы рассчитать больше показателей, касающихся дерева: достаточно ли оно взрослое для того, чтобы приносить плоды, погибло ли оно, и растут ли на нем апельсины?

core-js-oop-tdd-orange-tree's People

Contributors

slayoffer avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.