Курс "Объектно-ориентированное программирование"
  • Главная
  • 1 семестр (осень 2021)
    • Видео
    • Конспект лекций
      • Лекция 1
      • Лекция 2
      • Лекция 3
      • Лекция 4
      • Лекция 5
      • Лекция 6
      • Лекция 7
      • Лекция 8
      • Лекция 9
      • Лекция 10
      • Лекция 11
      • Лекция 12
      • Лекция 13
      • Лекция 14
      • Лекция 15
    • Лабораторные работы
      • Лабораторная работа 1
        • 1. Установка программного обеспечения, создание и запуск проекта
        • 2. Основы синатксиса Java
        • Задание на лабораторную работу
      • Лабораторная работа 2
        • Синтаксис создания классов
        • Задание на лабораторную работу
      • Лабораторная работа 3
        • Инкапсуляция
        • Язык моделирования UML
        • Задание на лабораторную работу
      • Лабораторная работа 4
        • Наследование и композиция
        • Наследование и композиция в UML
        • Задание на лабораторную работу
      • Лабораторная работа 5
        • Задание на лабораторную работу
      • Лабораторная работа 6
        • Абстрактные классы и интерфейсы в UML
        • Задание на лабораторную работу
  • 2 семестр (весна 2022)
    • Конспект лекций
      • Лекция 1-2
      • Лекция 3-4
      • Лекция 5
      • Лекция 6
      • Лекция 7-8
      • Лекция 9
      • Лекция 10
      • Лекция 11-12
      • Лекция 13-14
      • Лекция 15
  • Архив
    • Лекция 2
    • Архив
      • Заметки по абстракции
      • Конспект лекций
        • 1. Принцип Separation of Concerns, контроллер и представление
        • 2. Паттерн MVC
        • 3. Клиент-серверная архитектура. Создание простой RESTful веб-службы с помощью Spring Boot.
        • 4. Внедрение зависимостей (Dependency Injection)
        • 5. Интеграция приложения с СУБД
        • 6. Фреймворк Spring MVC
        • 7. Работа со Spring Security, часть 1
        • 8. Работа со Spring Security, часть 2
        • 9. Развертывание приложения в Heroku
      • Заочники (осень 2022)
      • Архив
        • Лекции
          • Draft
            • 5. Абстрактные классы и интерфейсы. Механизм обратного вызова
            • 6. Анонимные классы
          • Блок лекций 1
            • Дополнительные задания и литература
            • 1. Базовые сведения об ООП
            • 1. Обобщенные типы. Автоупаковка и автораспаковка.
            • 2. Знакомство с языком Java
          • Блок лекций 2
            • 5. Абстрактные классы и интерфейсы. Механизм обратного вызова.
            • 6. Анонимные объекты, классы, методы. Лямбда-выражения.
            • 7. Аргументы переменной длины. Принцип абстракции. Дополнительные принципы ООП.
          • Блок лекций 3
            • 2. Коллекции объектов.
            • 3. Паттерн Итератор. Компараторы. Потоки в Java (Streams API)
          • Блок лекций 4
            • 1. Исключения в Java. Обработка исключений.
          • Блок лекций 5
            • Статические поля и методы
            • Вложенные и внутренние классы
            • Перечисления
          • Блок лекций 6
            • 2. Интеграция приложения с СУБД
        • Лабораторные работы
          • 2. Основы синтаксиса
            • Python
            • C#
          • Лабораторная работа 3
            • 1. Инкапсуляция
            • 2. Перегрузка методов
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 4
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 6
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 7
            • Задание на лабораторную работу
            • Теоретические вопросы
          • Лабораторная работа 8
          • Лабораторная работа 9
          • Лабораторная работа 10
            • Задание на лабораторную работу
          • Лабораторная работа 11
            • Задание на лабораторную работу
          • Лабораторная работа 12
            • Пример выполнения лабораторной работы
            • Задание на лабораторную работу
        • Практические работы
          • Практическая работа 1
          • Практическая работа 2
        • Материалы по Java Spring
          • 1. Клиент-серверная архитектура. Создание простой RESTful веб-службы с помощью Spring Boot.
          • 4. Работа со Spring MVC, часть 1
          • 5. Работа со Spring MVC, часть 2
      • Конспект лекций
        • 1. История развития языков программирования
        • 2. Базовые термины ООП
        • 3. Понятие класса и объекта
        • 4. Создание объектов. Конструктор.
        • 5. Основные принципы ООП. Инкапсуляция.
        • 6. Перегрузка методов
        • 7. Повторное использование кода. Композиция и наследование
        • 8. Полиморфизм
        • 9. Абстрактные классы и интерфейсы
        • 10. Анонимные классы, интерфейсы, методы. Лямбда-выражения
        • 11. Принцип абстракции. Дополнительные принципы ООП
        • 12. Обобщенные типы. Автоупаковка и автораспаковка
        • 13. Коллекции
        • 14. Паттерн "Итератор". Компараторы. Фреймворк Streams API.
        • 15. Исключения в Java. Обработка исключений
        • 16. Принципы разработки графического интерфейса. Фреймворк JavaFX
        • 17. События в JavaFX
        • 20. Перечисления
      • Лабораторные работы
        • Лабораторная работа 2
          • 1. Синтаксис создания классов
          • 2. Язык моделирования UML
          • Задание на лабораторную работу
          • Теоретические вопросы
        • Лабораторная работа 3
          • 1. Инкапсуляция
          • 2. Перегрузка методов
          • Задание на лабораторную работу
        • Лабораторная работа 4
          • Наследование и композиция
          • Наследование и композиция в диаграмме классов UML
          • Задание на лабораторную работу
        • Лабораторная работа 5
          • Задание на лабораторную работу
          • Теоретические вопросы
        • Лабораторная работа 6
          • Задание (старое)
          • Теоретические вопросы
        • Лабораторная работа 8
          • Задание на лабораторную работу
        • Лабораторная работа 9
          • Задание на лабораторную работу
      • Видеолекции
      • Видеолекции
Powered by GitBook
On this page
  • 1. Класс Point3D
  • 2. Класс DiscountBill

Was this helpful?

Export as PDF
  1. Архив
  2. Архив
  3. Лабораторные работы
  4. Лабораторная работа 4

Задание на лабораторную работу

PreviousНаследование и композиция в диаграмме классов UMLNextЛабораторная работа 5

Last updated 3 years ago

Was this helpful?

В данной лабораторной работе задания выполняются с помощью плагина EduTools!

При решении задачи сначала добавьте сигнатуру методов и возвращаемые значения для того, чтобы тесты могли скомпилироваться корректно!

Реализуйте каждую задачу с помощью механизма наследования, а потом - с помощью механизма композиции.

Для каждой реализации нарисуйте UML-диаграмму классов. Вы можете нарисовать одну диаграмму для двух заданий, реализованных с помощью наследования и одну диаграмму для заданий, реализованных с помощью механизма наследования.

1. Класс Point3D

Дан класс Point, который моделирует точку в двумерном пространстве. Класс включает в себя следующие конструкторы и публичные методы:

Сигнатура

Описание

public Point()

Создает точку с координатами (0, 0)

public Point(int x, int y)

Создает точку с координатами (x, y)

public void setLocation(int x, int y)

Устанавливает новые координаты точки

public int getX()

Возвращает значение координаты X

public int getY()

Возвращает значение координаты Y

public String toString()

Возвращает строку в виде "(x,y)"

public int distanceFromOrigin()

Создайте класс Point3D, который расширяет класс Point через наследование. Он должен вести себя как Point, за исключением того что это должна быть точка в трехмерном пространстве, которая хранит значение координаты Z.

Вы должны предоставить те же методы, что и суперкласс, а также реализовать дополнительное поведение

Сигнатура

Описание

public Point3D()

Создает точку с координатами (0, 0, 0)

public Point3D(int x, int y, int z)

Создает точку с координатами (x, y, z)

public void setLocation(int x, int y, int z)

Устанавливает новые координаты

public int getZ()

Возвращает координату Z

Класс Point3D() должен переопределить требуемые методы, чтобы они работали корректно с учетом третьей координаты. Также класс Point3D должен вести себя иначе в следующих ситуациях:

  • при вызове метода setLocation(int x, int y), координата z должна быть выставлена в 0;

  • при вызове метода toString(), строка должна выводить три координаты, а не две;

  • метод distanceFromOrigin() должны учитывать координату z и возвращать расстояние по формуле (x1−x2)2+(y1−y2)2+(z1−z2)2\sqrt{(x_1-x_2)^2 + (y_1-y_2)^2 + (z_1-z_2)^2}(x1​−x2​)2+(y1​−y2​)2+(z1​−z2​)2​ .

2. Класс DiscountBill

Дан класс GroceryBill, который моделирует чек и хранит список товаров, который покупает человек в супермаркете. Класс включает в себя следующие конструкторы и публичные методы:

Сигнатура

Описание

public GroceryBill(Employee clerk)

Создает объект GroceryBill для данного clerk

public void add(Item i)

Добавляет товар в чек

public double getTotal()

Возвращает итоговую стоимость товаров

public void printReceipt()

Распечатывает список товаров

Объект GroceryBill взаимодействует с объектами класса Item. Класс Item включает следующие публичные методы:

Сигнатура

Описание

public double getPrice()

Возвращает стоимость товара

public double getDiscount()

Возвращает скидку для этого товара

К примеру, товар стоит 1.35, а размер скидки 0.25 для постоянных покупателей. Это означает, что постоянный покупатель должен заплатить 1.10. Некоторые товары могут не иметь скидки (размер скидки 0.0). В классе GroceryBill не предусмотрена логика для учета скидки, то есть учитывается только полная стоимость товара.

Разработайте класс DiscountBill, который расширяет класс GroceryBill и добавляет логику для учета скидки для постоянных клиентов. Конструктор класс DiscountBill должен принимать на вход параметр, который указывает, является ли клиент постоянным.

Класс DiscountBill должен реализовывать собственную логику метода getTotal() для постоянных покупателей. Например, если полная сумма равна 80 гривен, а скидка для постоянного клиента составила 20 гривен, метод должен возвращать 60 гривен.

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

Помимо переопределенных методов, класс DiscountBill должен иметь следующие конструкторы и публичные методы:

Сигнатура

Описание

public DiscountBill (Employee clerk, boolean regularCustomer)

Создает объект DiscountBill для данного clerk

public int getDiscountCount()

Возвращает количество товаров со скидкой

public double getDiscountAmount()

Возвращает общую скидку в гривнах

public double getDiscountPercent()

Возвращает процент скидки для товаров (на сколько процентов покупатель заплатил меньше)

Если покупатель не является регулярным, класс DiscountBill должен вести себя как будто общая скидка равна 0 и все товары учтены по их полной стоимости.

Возвращает расстояние от начала координат (0, 0) до точки по формуле расстояния Евклида

(x1−x2)2+(y1−y2)2 \sqrt{(x_1-x_2)^2 + (y_1-y_2)^2}(x1​−x2​)2+(y1​−y2​)2​
5KB
Java_inheritance.zip
archive
Java Inheritance lab work 4