Задание на лабораторную работу
В данной лабораторной работе задания выполняются с помощью плагина EduTools!
При решении задачи сначала добавьте сигнатуру методов и возвращаемые значения для того, чтобы тесты могли скомпилироваться корректно!
Реализуйте каждую задачу с помощью механизма наследования, а потом - с помощью механизма композиции.
Для каждой реализации нарисуйте UML-диаграмму классов. Вы можете нарисовать одну диаграмму для двух заданий, реализованных с помощью наследования и одну диаграмму для заданий, реализованных с помощью механизма наследования.
1. Класс Point3D
Дан класс Point
, который моделирует точку в двумерном пространстве. Класс включает в себя следующие конструкторы и публичные методы:
Сигнатура | Описание |
| Создает точку с координатами |
| Создает точку с координатами |
| Устанавливает новые координаты точки |
| Возвращает значение координаты X |
| Возвращает значение координаты Y |
| Возвращает строку в виде |
| Возвращает расстояние от начала координат (0, 0) до точки по формуле расстояния Евклида |
Создайте класс Point3D
, который расширяет класс Point через наследование. Он должен вести себя как Point
, за исключением того что это должна быть точка в трехмерном пространстве, которая хранит значение координаты Z
.
Вы должны предоставить те же методы, что и суперкласс, а также реализовать дополнительное поведение
Сигнатура | Описание |
| Создает точку с координатами |
| Создает точку с координатами |
| Устанавливает новые координаты |
| Возвращает координату |
Класс Point3D()
должен переопределить требуемые методы, чтобы они работали корректно с учетом третьей координаты. Также класс Point3D
должен вести себя иначе в следующих ситуациях:
при вызове метода
setLocation(int x, int y)
, координатаz
должна быть выставлена в 0;при вызове метода
toString()
, строка должна выводить три координаты, а не две;метод
distanceFromOrigin()
должны учитывать координату z и возвращать расстояние по формуле .
2. Класс DiscountBill
Дан класс GroceryBill
, который моделирует чек и хранит список товаров, который покупает человек в супермаркете. Класс включает в себя следующие конструкторы и публичные методы:
Сигнатура | Описание |
| Создает объект |
| Добавляет товар в чек |
| Возвращает итоговую стоимость товаров |
| Распечатывает список товаров |
Объект GroceryBill
взаимодействует с объектами класса Item
. Класс Item
включает следующие публичные методы:
Сигнатура | Описание |
| Возвращает стоимость товара |
| Возвращает скидку для этого товара |
К примеру, товар стоит 1.35, а размер скидки 0.25 для постоянных покупателей. Это означает, что постоянный покупатель должен заплатить 1.10. Некоторые товары могут не иметь скидки (размер скидки 0.0). В классе GroceryBill
не предусмотрена логика для учета скидки, то есть учитывается только полная стоимость товара.
Разработайте класс DiscountBill
, который расширяет класс GroceryBill
и добавляет логику для учета скидки для постоянных клиентов. Конструктор класс DiscountBill
должен принимать на вход параметр, который указывает, является ли клиент постоянным.
Класс DiscountBill
должен реализовывать собственную логику метода getTotal()
для постоянных покупателей. Например, если полная сумма равна 80 гривен, а скидка для постоянного клиента составила 20 гривен, метод должен возвращать 60 гривен.
Также, вам необходимо отслеживать количество товаров со скидкой (у которых размер скидки больше 0.0), а также общую скидку, как в гривнах, так и в процентах от суммы в чеке (то есть, насколько в процентах постоянный покупатель заплатил меньше, чем если бы скидки не было).
Помимо переопределенных методов, класс DiscountBill
должен иметь следующие конструкторы и публичные методы:
Сигнатура | Описание |
| Создает объект |
| Возвращает количество товаров со скидкой |
| Возвращает общую скидку в гривнах |
| Возвращает процент скидки для товаров (на сколько процентов покупатель заплатил меньше) |
Если покупатель не является регулярным, класс DiscountBill
должен вести себя как будто общая скидка равна 0 и все товары учтены по их полной стоимости.
Last updated