Урок 1. Принципы ООП: Инкапсуляция, наследование, полиморфизм
-
Реализовать, с учетом ооп подхода, приложение Для проведения исследований с генеалогическим древом. Идея: описать некоторое количество компонент, например:
- модель человека
- компонента хранения связей и отношений между людьми: родитель, ребёнок - классика, но можно подумать и про разные отношения
- компонент для проведения исследований
- дополнительные компоненты, например отвечающие за вывод данных в консоль, загрузку и сохранения в файл,
получение\построение отдельных моделей человека. Под “проведением исследования” можно понимать получение всех детей выбранного человека.
- на первом этапе сложно применять сразу все концепты ООП, упор делается на инкапсуляцию. Если получится продумать иерархию каких-то компонент - здорово. После первой лекции, они не знают про абстракцию и интерфейсы
Продумать какие проблемы могут возникнуть в том, коде, который они написали. Например, с генеалогическим древом, мы можем знать о двух людях, но не знаем в каких “отношениях” они были - двоюродные или троюродные, или мы точно знаем как звали прапрабабушку, но совершенно не знаем прабабушку - как хранить такие связи или что будет если в компоненту обхода передать ссылку на null-дерево.
MainUnit01.java
|__ |Unit01 |__ | Main.java | Node.java | Person.java | Relationship.java | Research.java | Tree.java
Воспользуйтесь этим, для перехода:
MainUnit01.java || Unit01 ||->( Main.java -> Node.java -> Person.java -> Relationship.java -> Research.java -> Tree.java)
Урок 2. Принципы ООП Абстракция и интерфейсы. Пример проектирования.
-
Используйте предыдущие задачи из прошлого домашнего задания. Необходимо гарантированно продумать иерархию компоненты и взаимодействия их между собой. Обеспечить переход от использования явных классов в сторону использования абстрактных типов.
Т.е. работаем не с:
- конкретным экземпляром генеалогического древа, а с интерфейсом “генеалогическое древо”
Под исследованием передачу конкретного экземпляра класса узла и отношения
- Передать узел (сына) и найти его отца
- Передать узел (дедушка) и найти его внуков
Продумать возможность ухода от конкретных "котиков", к интерфейсу “котик”, лучше уйти от взаимодействия:
- с конкретными питомцами и повысить уровень абстракции до взаимодействия с котиком, собачкой или хомяком т.е. с интерфейсом “животное”.
MainUnit02.java
|__ |Unit02 |__ | Main.java | Call.java | Cat.java | Node.java | Person.java | Relationship.java | Research.java | Tree.java
Воспользуйтесь этим, для перехода:
MainUnit02.java || Unit02 ||->( Main.java -> Call.java -> Cat.java -> Node.java -> Person.java -> Relationship.java -> Research.java -> Tree.java)
Урок 3. Некоторые стандартные интерфейсы Java и примеры их использования
- Проделать код ревью своих работ. Продумать, какие компоненты можно и нужно переписать.
MainUnit03.java
|__ |Unit03 |__ | Main.java | Call.java | Cat.java | Node.java | Person.java | Printer.java | Relationship.java | Research.java | Tree.java
Воспользуйтесь этим, для перехода:
MainUnit03.java || Unit03 ||->( Main.java -> Call.java -> Cat.java -> Node.java -> Person.java -> Printer.java -> Relationship.java -> Research.java -> Tree.java)
Урок 4. ООП: Обобщения. ч1
-
С учетом информации полученной ранее знакомимся с параметрическим полиморфизмом и продолжаем погружаться в ООП. Спроектировать и реализовать планировщик дел для работы с задачами разных приоритетов.
Например:
- определить уровень приоритетов: низкий, средний, немедленное выполнение;
- выделить компоненту для хранения данных;
- выделить компоненту для организации импорта\экспорта данных.
Файл должен содержать следующие данные:
- id;
- дату добавления записи;
- время добавления записи;
- дедлай задачи;
- ФИО автора;
- данные хранятся в файле csv/jsom/xml
- другие компоненты.
MainUnit04.java
|__ |Unit04 |__ |Data | |__ | | planer.csv | | Main.java | AddTask.java | PrintPlaner.java | PrintTaskInPlaner.java | Talking.java
Воспользуйтесь этим, для перехода:
MainUnit04.java || Unit04 ||->Data |-> (planer.csv) || -> (Main.java -> AddTask.java -> PrintPlaner.java -> PrintTaskInPlaner.java -> Talking.java)