Нужно создать 3 типа счетов в банке. У всех этих типов должно быть 2 операции: вывести средства со счета и пополнить счет
- Обычный счет. При создании указываем сумму (в конструкторе). Пополнение и снятие без ограничений. Не должно быть отрицательного баланса.
- Кредитный счет. То же самое, что и обычный, но при снятии удерживается комиссия в размере 1% от суммы снятия.
- Депозитный счет. То же самое, что и обычный, но нельзя снимать деньги чаще, чем раз в день. (Сразу после создания снять можно).
- Создать интерфейс.
- Создать абстрактный класс, описывающий часть базовой общей логики.
- Отнаследоваться от абстрактного класса тремя классами, которые изучили на прошлом уроке.
- Создать класс, снятие и пополнение с которого не приводят ни к каким результатам.
Создать класс Employee c полями:
- Имя
- Возраст
- Зарплата
Создать класс Company с массивом сотрудников (задается в конструкторе).
Необходимо:
-
Реализовать интерфейс Comparable в классе Employee, который сравнивает сотрудников по возрасту (по возрастанию).
-
Реализовать несколько классов-Comparator`ов, которые сравнивают по зарплате по возрастанию и убыванию: EmployeeSalaryComparator, EmployeeSalaryReversedComparator.
-
В классе Company реализовать Iterable, который позволяет написать foreach цикл по компании.
Employee[] employees = ... Company company = new Company(employees); for (Employee e: company) { // ... }
Доп. задание: Попытаться реализовать компараторы в виде лямбда-выражений.
Реализовать класс Box c возможностями:
- Класс должен быть параметризуемым любым фруктом. То есть Box - запрещено.
- Должен быть метод add, принимающий конкретный фрукт (тот тип фрукта, который содержится в коробке)
- У класса реализован метод getWeight - возвращает сумму всех фруктов.
- Метод moveTo пересыпает содержимое текущей коробки в другую.
Реализовать и протестировать методы, описанные в данном классе.
Чтобы тесты заработали, необходимо:
- Создать maven-проект (File -> new -> project -> Maven project)
- Подключить в pom.xml зависимость на junit https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api/5.10.0
- Создать класс HomeworkTest в директории src/test/java в том же пакете
В качестве ДЗ прислать 2 класса: Homework и HomeworkTest (или ссылку на Github-проект, где эти классы находятся).
Возвращает сумму чисел. Протестировать следующие сценарии:
-
Список пустой (тогда возвращаем 0)
-
Список не пустой
public int sum(List ints) { // FIXME Реализовать return 0; }
Проверяет, что список содержит только 1 элемент. Протестировать сценарии:
-
Список содержит один элемент и он совпадает с item
-
Список содержит один элемент и он НЕ совпадает с item
-
Список содержит несколько элементов, среди которых есть item
-
Список пустой
public boolean hasExactly(List items, String item) { // FIXME Реализовать return false; }
Задача со здвездочкой** Перекидывает из source в target все элементы Протестировать сценарии:
-
Оба списка не пустые
-
Первый список пустой, второй нет
-
Второй список пустой, первый нет
-
Оба списка пустые
public void copy(List<? extends T> source, List<? super T> target) { // FIXME Реализовать }
Класс документ - описывает структуру документа.
Нужно спроектировать подсистему отчетов, которая будет формировать отчеты для документа.
- Формирование PDF-файла (потенциально может быть несколько типов разметки PDF-файла).
- Формирование JSON-файла с полями документа
- Формирование XML-файла с полями документа
- ... потенциально типы отчетов могут добавляться
После реализации задать себе 2 вопроса:
- Насколько сложно добавить поддержку нового типа отчета?
- Как будет выглядеть проект, если в нем будет 1000+ типов отчетов?
public class ReportEntrypoint {
/* Принимает документ и тип отчета. Создает этот отчет и возвращает объект. */
public Report create(Document document, String reportType) {
throw new UnsupportedOperationException("Not implemented yet");
}
}
static class Document {
private UUID id;
private String number;
// ...
}
static class Report {
private byte[] data;
}