Code Monkey home page Code Monkey logo

5.classes's Introduction

Домашнее задание к лекции 5 «Классы»

Задача №1. Печатное издание

Задача продолжает идеи, заложенные в предыдущем ДЗ, на этот раз с использованием всей мощи классов. Мы помогаем перевести небольшую районную библиотеку в современный цифровой формат. Начнём с того, что реализуем несколько классов: классы печатных изданий (книг, журналов) и класс самой библиотеки, который позволит работать с печатными изданиями (хранить их, выдавать читателям, принимать обратно).

Процесс реализации

Печатные издания бывают различных типов, но между всеми книгами, сборниками и журналами есть много общего: все они имеют название, год издания, состоят из скольких-то страниц, а ещё могут портиться, пока люди ими пользуются.

  1. Создайте базовый класс PrintEditionItem со следующими свойствами:

    • name
    • releaseDate
    • pagesCount
    • state
    • type

    Конструктор класса должен принимать название (name), дату выпуска (releaseDate) и количество страниц (pagesCount) в качестве аргумента. Состояние (state) по умолчанию должно устанавливаться равным 100, тип type пока должен быть равен null.

  2. Испорченное издание можно подклеить и тем самым улучшить его состояние. Создайте метод fix(), увеличивающий state в полтора раза. Метод не должен принимать аргументов.

  3. Нельзя улучшить новое издание, и бесполезно подклеивать полностью уничтоженное. Для лучшего контроля над состоянием создайте «сеттер» для свойства state, принимающий в качестве аргумента новое состояние печатного издания (число).

    Если новое состояние меньше 0, «сеттер» должен записать в свойство state значение 0. Если новое состояние больше 100, должно быть записано значение 100. В остальных случаях в свойство state должно быть записано переданное в «сеттер» значение.

  4. Создайте «геттер», который позволит читать значение свойства state.

Пример использования

const sherlock = new PrintEditionItem(
  "Полное собрание повестей и рассказов о Шерлоке Холмсе в одном томе",
  2019,
  1008
);

console.log(sherlock.releaseDate); //2019
console.log(sherlock.state); //100
sherlock.fix();
console.log(sherlock.state); //100
  1. Создайте класс Magazine, который будет наследоваться от класса PrintEditionItem. Конструктор класса должен принимать такие же параметры, как и класс-родитель. От базового печатного издания журнал отличается только явно указанным типом. Значение свойства type должно быть равно "magazine".

  2. Создайте класс Book, наследующийся от класса PrintEditionItem. Конструктор класса должен принимать такие же параметры, как и класс-родитель, а также имя автора книги author. Значение свойства type должно быть равно "book".

  3. Создайте классы NovelBook для романов, FantasticBook для фантастических произведений и DetectiveBook для детективов, наследующиеся от класса Book. Значения свойства type должны быть равны "novel", "fantastic" и "detective" соответственно.

Пример использования

const picknick = new FantasticBook(
  "Аркадий и Борис Стругацкие",
  "Пикник на обочине",
  1972,
  168
);

console.log(picknick.author); //"Аркадий и Борис Стругацкие"
picknick.state = 10;
console.log(picknick.state); //10
picknick.fix();
console.log(picknick.state); //15

Задача №2. Библиотека

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

Процесс реализации

  1. Создайте класс Library со следующими свойствами:

    • name
    • books

    Конструктор класса должен принимать название библиотеки name (строка). Значением свойства books должен быть пустой массив.

  2. Реализуйте метод addBook(book), который будет в качестве аргумента принимать объект (книгу или журнал). Метод должен добавлять книгу в хранилище books, только если состояние state книги больше 30.

  3. Создайте метод findBookBy(type, value), который в качестве аргументов будет принимать ключ, по которому будет производиться поиск (тип, автор, название, год выпуска и пр.) и искомое значение. Метод должен возвращать книгу в случае успеха и null, если запрошенная книга не была найдена.

  4. Создайте метод giveBookByName(bookName), который будет в качестве аргумента принимать название книги, запрошенной читателем. Если запрошенная книга найдена, метод должен удалять книгу из хранилища books, и возвращать её. Если книга не была найдена, метод должен возвращать null.

Пример использования

const library = new Library("Библиотека имени Ленина");

library.addBook(
  new DetectiveBook(
    "Артур Конан Дойл",
    "Полное собрание повестей и рассказов о Шерлоке Холмсе в одном томе",
    2019,
    1008
  )
);
library.addBook(
  new FantasticBook(
    "Аркадий и Борис Стругацкие",
    "Пикник на обочине",
    1972,
    168
  )
);
library.addBook(new NovelBook("Герберт Уэллс", "Машина времени", 1895, 138));
library.addBook(new Magazine("Мурзилка", 1924, 60));

console.log(library.findBookBy("name", "Властелин колец")); //null
console.log(library.findBookBy("releaseDate", 1924).name); //"Мурзилка"

console.log("Количество книг до выдачи: " + library.books.length); //Количество книг до выдачи: 4
library.giveBookByName("Машина времени");
console.log("Количество книг после выдачи: " + library.books.length); //Количество книг после выдачи: 3
  1. Протестируйте корректность работы классов и методов, разыграв тестовый сценарий:
    • Создайте библиотеку;
    • Добавьте в библиотеку несколько печатных изданий различных типов;
    • Найдите книгу, изданную в 1919 году (создайте такую книгу при необходимости);
    • Выдайте любую книгу;
    • Испортите выданную книгу;
    • Почините выданную книгу;
    • Попытайтесь добавить починенную книгу обратно в библиотеку.

Задача №3. Журнал успеваемости

Это задача со "звездочкой", ее выполнение не влияет на получение допуска до дипломной работы, но принесет много полезного опыта.

Мы продолжаем совершенствовать журнал успеваемости студентов. Нам предстоит преобразовать код прошлого ДЗ к классам, а также реализовать следующие возможности:

  • внесение оценки по названию предмета;
  • получение средней оценки по предмету;
  • получение средней оценки по всем предметам.
  • при неверной оценке (не в промежутке 1-5) оценка не заносится в журнал. Выводится сообщение об ошибке.

Для решения задания, и это представляет наибольшую сложность, вам предстоит придумать структуру данных для хранения оценок по предметам. Работать это должно следующим образом:

Пример

class Student {
  // ваш код
}

const student = new Student("Олег Никифоров");
student.addMark(5, "algebra");
student.addMark(5, "algebra");
student.addMark(5, "geometry");
student.addMark(4, "geometry");
student.addMark(6, "geometry"); // "Ошибка, оценка должна быть числом от 1 до 5"
student.getAverageBySubject("geometry"); // Средний балл по предмету geometry 4.5
student.getAverageBySubject("biology"); // Несуществующий предмет
student.getAverage(); // Средний балл по всем предметам 4.75
student.exclude("Исключен за попытку подделать оценки");

Критерии выполнения

  • Реализованы все методы, в каждом из которых вы привели примеры работы исключительных случаев (неверный формат оценки, несуществующий предмет и т.д);
  • Возможно добавление оценки по любому предмету.

Требования для выполнения домашней работы

графическое представление

Решение задач

  1. Произведите Fork репозитория с задачами (fork необходимо делать перед выполнением каждой домашней работы).
  2. Перейдите в папку задания cd ./5.classes
  3. Откройте файл task.js в вашем редакторе кода и выполните задание.
  4. Самостоятельно вызывать функции не требуется, если это не требуется по заданию.
  5. Откройте файл index.html в вашем браузере и с помощью консоли DevTools и убедитесь в правильности выводимых результатов.
  6. Откройте файл test-runer.html в вашем браузере и убедитесь, что все тесты выполняются (на вкладке Spec List можно видеть какие тесты выполнились, а какие нет)
  7. Добавьте файл task.js в индекс git с помощью команды git add %file-path%, где %file-path% - путь до целевого файла. git add task.js.
  8. Сделайте коммит, используя команду git commit -m '%comment%', где %comment% - это произвольный комментарий к вашему коммиту. git commit -m 'first commit variables'.
  9. Опубликуйте код в репозиторий homeworks с помощью команды git push -u origin main.
  10. Пришлите ссылку на репозиторий через личный кабинет на сайте Нетологии.

Никаких файлов прикреплять не нужно.

Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке».

Любые вопросы по решению задач задавайте в чате учебной группы.

5.classes's People

Contributors

sergey17777 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.