Курс "Объектно-ориентированное программирование"
  • Главная
  • 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. Класс TimeSpan
  • 2. Класс BankAccount
  • 3. Класс Student

Was this helpful?

Export as PDF
  1. 1 семестр (осень 2021)
  2. Лабораторные работы
  3. Лабораторная работа 2

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

1. Класс TimeSpan

1.1 Создание класса

Создайте класс с названием TimeSpan. Объект класса TimeSpanхранит интервал времени в часах и минутах (к примеру, временной интервал между 8:00 и 10:30 это 2 часа 30 минут). Класс TimeSpanдолжен иметь следующие методы

Название метода

Описание метода

TimeSpan(hours, minutes)

Конструктор. Входные аргументы – количество часов и минут

getHours()

Возвращает целое количество часов во временном интервале, без учета количества минут (например, если интервал 2 часа 15 минут, то метод вернет 2, так как 15 минут мы не учитываем)

getMinutes()

Возвращает количество минут во временном интервале, без учета количества часов (например, если интервал 2 часа 15 минут, то метод вернет 15, так как 2 часа мы отбрасываем)

add(hours, minutes)

Добавляет указанное количество часов и минут к промежутку. Новое значение промежутка должно пересчитываться корректно. Например, 2 часа 15 минут + 1 час 45 минут = 4 часа 0 минут. Помните, что необходимо проверить корректность входных аргументов (количество часов - не отрицательное число, количество минут от 0 до 59).

addTimeSpan(timespan)

Добавляет входной промежуток времени к указанному промежутку (используйте методы getHours() и getMinutes() для получения значений часов и минут).

getTotalHours()

Возвращает количество часов в промежутке в виде дробного числа. Например, если временной интервал 9 часов 45 минут, то метод должен вернуть 9.75.

getTotalMinutes()

Возвращает количество минут в текущем промежутке времени (помните, что в интервале есть еще показатель часов, который нужно умножить на 60)

Вы должны продумать:

  • как хранить значение временного интервала;

  • типы входных аргументов методов;

  • корректно реализовать требуемые методы;

  • в методах предусмотреть проверки на корректность входных данных.

1.2. Добавление метода subtract()

Добавьте к написанному ранее классу метод subtract()со следующей сигнатурой

public void subtract(TimeSpan span)

Метод вычитает из текущего временного интервала входной временной интервал. Если входной интервал больше текущего, выйдите из метода и не модифицируйте текущий интервал (можете выбросить исключение IllegalArgumentException, если знаете что это и знаете как выбрить исключение).

1.3 Добавление метода scale()

Добавьте к написанному ранее классу метод subtract()со следующей сигнатурой

public void scale(int factor)

Метод увеличивает текущий интервал в factorчисло раз. Например, если текущий временной интервал равен 1 час 45 минут, а входной аргумент равен 2, то интервал увеличится до 3 часов 30 минут. Убедитесь, что factor- неотрицательное число, помните про пересчет минут в часы при увеличении интервала.

2. Класс BankAccount

2.1 Добавление поля transactionFee

В программе существует класс BankAccount, исходный код которого приведен ниже.

// Каждый объект класса BankAccount представляет данные одного
// счета пользователя, включая имя и баланс счета

public class BankAccount {
    String name;
    double balance;

    public void deposit(double amount) {
        balance = balance + amount;
    }

    public double getBalance() {
        return this.balance;
    }

    public boolean withdraw(double amount) {
        balance = balance - amount;
        return true;
    }
}

Каждый объект класса предназначен для описания одного счета клиента банка, включая его имя и баланс. Модифицируйте класс следующим образом:

  • добавьте поле transactionFeeтипа double, которое хранит сумму, которая вычитается из баланса каждый раз, когда клиент банка снимает деньги (метод withdraw()). Изначальное значение равно 0.00, но значение может быть изменено в дальнейшем. Производите вычитание суммы каждый раз, когда клиент осуществляет снятие денег;

  • сделайте так, чтобы в результате снятия денег и снятия transactionFee, баланс счета не мог опуститься ниже нуля. Если в результате снятия денег и transactionFee баланс может стать отрицательным, выйдите из метода и не производите модификацию баланса вообще;

  • в методe deposit() входной аргумент не должен быть ноль или меньше;

  • в методе withdraw() входной аргумент не должно быть ноль или меньше.

Модификация класса может потребовать создания новых методов и полей.

2.2 Добавление метода transfer()

Добавьте к модифицированному ранее классу BankAccoutметод transfer() со следующей сигнатурой

public boolean transfer(BankAccount receiver, double amount)

Метод transfer() осуществляет перевод денег из одного счета (текущего) на другой счет (объект receiver). Первый параметр - счет получателя денег, второй параметр - количество денег, которые переводятся со счета на счет.

Важно!

При снятии денег должна учитываться комиссия (поле transactionFee). Следовательно, из текущего объекта должна быть вычтено amount + transactionFee.

Метод должен модифицировать баланс двух объектов. У текущего объекта должна вычтена сумма amount + transactionFeeиз баланса, а у объекта receiverдолжен быть пополнен баланс счета на сумму amount.

При реализации метода убедитесь, что amount > 0.

Если у текущего объекта баланс меньше amount + transactionFee, то выйдите из метода без какого-либо перевода денег.

3. Класс Student

Создайте класс Student, который хранит информацию о студенте. У студента есть имя, год обучения (от 1 до 4), а также массив изучаемых дисциплин.

Класс Student должен иметь следующие методы

Название метода

Описание метода

Student(name, year)

Конструктор. Входные аргументы – имя и год обучения

addCourse(courseName)

Добавляет дисциплину(в формате String) к массиву дисциплин студента

dropAll()

Удаляет все дисциплины студента

getCourseCount()

Возвращает количество дисциплин, которые студент изучает

getName()

Возвращает имя студента

getTuition()

Возвращает количество денег, которые студент заплатил за обучение (с условием, что каждый год обучения обошелся студенту в 1000 гривен)

getYear()

Возвращает год обучения студента (от 1 до 4)

Вы должны продумать:

  • как хранить данные студенты (типы данных, структуры и так далее);

  • типы входных аргументов методов и тип возвращаемого значения;

  • корректно реализовать требуемые методы;

  • в методах предусмотреть проверки на корректность входных данных.

PreviousСинтаксис создания классовNextЛабораторная работа 3

Last updated 3 years ago

Was this helpful?