/hw_js_oop

Lecture #3 - OOP

Primary LanguageJavaScript

Домашнее задание к занятию «Прототипы, ООП и функции высшего порядка»

Цель задания

В результате выполнения этого задания вы сможете освоить на практике базовые знания по парадигмам программирования ООП и ФП.

Чеклист готовности к домашнему заданию

  1. Для выполнения задания требуется компьютер с операционной системой Windows, MacOS или Linux.
  2. На компьютере студента должно быть предварительно установлено IDE VS Code.
  3. Для установки платформы NodeJS могут потребоваться соответствующие права доступа в системе.

Инструкция к заданию

  1. Установите среду разработки VSCode, скачав дистрибутив с домашней страницы https://code.visualstudio.com. Воспользуйтесь инструкциями по установке для вашей операционной системы.
  2. Установите платформу NodeJS. Для этого необходимо пройти по ссылке: https://nodejs.org/ru/. Выберите одну из версий для установки (для данного курса несущественно, какая именно версия будет установлена) и далее следуйте инструкциям для загрузки инсталляционного пакета, исходя из установленной на компьютере ОС.
  3. Выполните задание 1.

Инструменты/ дополнительные материалы, которые пригодятся для выполнения задания

  1. Среда разработки VSCode.
  2. Платформа NodeJS.

Задание 1

В отдельном файле с расширением .js напишите программу, включающую в себя:

  1. Определения классов:
  • Good - класс для хранения данных о товаре со свойствами:
        id            Код товара
        name          Наименование
        description   Описание
        sizes         массив возможных размеров
        price         цена товара
        available     Признак доступности для продажи

Реализауйте в Good следующие методы:

        constructor()   конструктор экземпляра товара принимающий параметры соответствующие свойствам выше
        setAvailable()  изменение признака доступности для продажи

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

  • GoodsList - класс для хранения каталога товаров со свойствами:
        #goods       массив экземпляров объектов класса Good (приватное поле)
        filter       регулярное выражение используемое для фильтрации товаров по полю name
        sortPrice    булево значение, признак включения сортировки по полю Price
        sortDir      булево значение, признак направления сортировки по полю Price (true - по возрастанию, false - по убыванию)

Реализуйте в GoodsList геттер и методы:

        get list()     возвращает массив доступных для продажи товаров в соответствии с установленным фильтром и сортировкой по полю Price
        add()          добавление товара в каталог
        remove(id)     удаление товара из каталога по его id

Для фильтрации и сортировки используйте функции массивов filter и sort с передачей в них соответствующих стрелочных функций.

Для проверки соответствия поля name регулярному выражению в фильтре, используйте такую конструкцию filter.test(good.name). При этом в поле filter должно быть записано регулярное выражение, описываемое в JS как:

        /<regexp>/<flags>

подробнее с регулярными выражениями в JavaScript можно познакомиться здесь: https://learn.javascript.ru/regular-expressions

  • BasketGood - класс дочерний от Good, для хранения данных о товаре в корзине с дополнительным свойством:
        amount      количество товара в корзине

В конструктор данного класса в качестве параметра должен передаваться экземпляр класса Good (товар помещаемый в корзину), значения свойств которого должны использоваться при вызове конструктора родительского класса super().

  • Basket - класс для хранения данных о корзине товаров со свойствами:
        goods       массив объектов класса BasketGood для хранения данных о товарах в корзине

Реализуйте геттеры:

        get totalAmount()  возвращает общую стоимость товаров в корзине
        get totalSum()     возвращает общее количество товаров в корзине

При реализации геттеров используйте методы массивов, такие как reduce() и forEach().

Реализуйте методы:

        add(good, amount)    Добавляет товар в корзину, если товар уже есть увеличивает количество
        remove(good, amount) Уменьшает количество товара в корзине, если количество становится равным нулю, товар удаляется
        clear()              Очищает содержимое корзины
        removeUnavailable()  Удаляет из корзины товары, имеющие признак available === false (использовать filter())
  1. В основном коде программы создайте не менее 5 экземпляров класса Good. Создайте экземпляры классов GoodsList и Basket. Вызовите несколько раз реализованные методы этих объектов с необходимыми аргументами, устанавливая условия фильтрации и сортировки для GoodsList. Выведите в консоль отфильтрованный и сортированный каталог товаров, а также значения общих суммы и количества товаров в корзине.

Правила приема работы

  1. Задание необходимо сдавать в виде ссылки на репозиторий в github, содержащий файлы с кодом для каждого из заданий.
  2. В случае создания отдельной ветки (branch) для заданий к каждому уроку ссылка, прикрепленная в личном кабинете, должна быть на ветку, содержащую решение данного задания.

Критерии оценки

  1. К заданию прикреплена ссылка на ветку в репозитории, содержащую файлы с кодом для задания 1.
  2. Код в файлах соответствует заданию и при выполнении не вызывает ошибок времени компиляции или выполнения. В случае необходимости запуска кода с определенными параметрами командной строки, это должно быть описано в виде комментариев в коде.