Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Объектно-ориентированное программирование (семинары)

Урок 1. Принципы ООП: Инкапсуляция, наследование, полиморфизм

Задание

Нужно создать 3 типа счетов в банке. У всех этих типов должно быть 2 операции: вывести средства со счета и пополнить счет

  1. Обычный счет. При создании указываем сумму (в конструкторе). Пополнение и снятие без ограничений. Не должно быть отрицательного баланса.
  2. Кредитный счет. То же самое, что и обычный, но при снятии удерживается комиссия в размере 1% от суммы снятия.
  3. Депозитный счет. То же самое, что и обычный, но нельзя снимать деньги чаще, чем раз в день. (Сразу после создания снять можно).

Урок 2. Принципы ООП Абстракция и интерфейсы. Пример проектирования

Задание

  1. Создать интерфейс.
  2. Создать абстрактный класс, описывающий часть базовой общей логики.
  3. Отнаследоваться от абстрактного класса тремя классами, которые изучили на прошлом уроке.
  4. Создать класс, снятие и пополнение с которого не приводят ни к каким результатам.

Урок 3. Некоторые стандартные интерфейсы Java и примеры их использования

Задание

Создать класс Employee c полями:

  1. Имя
  2. Возраст
  3. Зарплата

Создать класс Company с массивом сотрудников (задается в конструкторе).

Необходимо:

  1. Реализовать интерфейс Comparable в классе Employee, который сравнивает сотрудников по возрасту (по возрастанию).

  2. Реализовать несколько классов-Comparator`ов, которые сравнивают по зарплате по возрастанию и убыванию: EmployeeSalaryComparator, EmployeeSalaryReversedComparator.

  3. В классе Company реализовать Iterable, который позволяет написать foreach цикл по компании.

    Employee[] employees = ... Company company = new Company(employees); for (Employee e: company) { // ... }

Доп. задание: Попытаться реализовать компараторы в виде лямбда-выражений.

Урок 4. ООП: Обобщения. ч1

Задание

Реализовать класс Box c возможностями:

  1. Класс должен быть параметризуемым любым фруктом. То есть Box - запрещено.
  2. Должен быть метод add, принимающий конкретный фрукт (тот тип фрукта, который содержится в коробке)
  3. У класса реализован метод getWeight - возвращает сумму всех фруктов.
  4. Метод moveTo пересыпает содержимое текущей коробки в другую.

Урок 5. От простого к практике

Задание

Реализовать и протестировать методы, описанные в данном классе.

Чтобы тесты заработали, необходимо:

  1. Создать maven-проект (File -> new -> project -> Maven project)
  2. Подключить в pom.xml зависимость на junit https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api/5.10.0
  3. Создать класс HomeworkTest в директории src/test/java в том же пакете

В качестве ДЗ прислать 2 класса: Homework и HomeworkTest (или ссылку на Github-проект, где эти классы находятся).

Возвращает сумму чисел. Протестировать следующие сценарии:

  1. Список пустой (тогда возвращаем 0)

  2. Список не пустой

    public int sum(List ints) { // FIXME Реализовать return 0; }

Проверяет, что список содержит только 1 элемент. Протестировать сценарии:

  1. Список содержит один элемент и он совпадает с item

  2. Список содержит один элемент и он НЕ совпадает с item

  3. Список содержит несколько элементов, среди которых есть item

  4. Список пустой

    public boolean hasExactly(List items, String item) { // FIXME Реализовать return false; }

Задача со здвездочкой** Перекидывает из source в target все элементы Протестировать сценарии:

  1. Оба списка не пустые

  2. Первый список пустой, второй нет

  3. Второй список пустой, первый нет

  4. Оба списка пустые

    public void copy(List<? extends T> source, List<? super T> target) { // FIXME Реализовать }

Урок 6. ООП Дизайн и Solid

Задание

Класс документ - описывает структуру документа.

Нужно спроектировать подсистему отчетов, которая будет формировать отчеты для документа.

  1. Формирование PDF-файла (потенциально может быть несколько типов разметки PDF-файла).
  2. Формирование JSON-файла с полями документа
  3. Формирование XML-файла с полями документа
  4. ... потенциально типы отчетов могут добавляться

После реализации задать себе 2 вопроса:

  1. Насколько сложно добавить поддержку нового типа отчета?
  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; }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages