— Привет, Амиго!
— Здравия желаю, Капитан Бобров!
— Ты чувствуешь этот запах, боец?
— Никак нет.
— Скорее всего, запах доносится из твоего терминала. Сейчас посмотрим, чем ты тут занят.
— Что? Как может пахнуть код?
— Да, пахнуть определенно не может… а вот пованивать — запросто.
— Капитан, я тут разрабатываю новую систему управления персоналом корабля. Вот, проект практически готов.
— Ну что же, пришло твое время постичь Дзэн в рефакторинге. Только так ты сможешь очистить свой код. Обратись за заданием к агенту Intellij IDEA, там получишь все инструкции.
— Есть, идти выполнять приказ.

14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (1)
Пришло время немного порефакторить. Википедия говорит: "Рефакторинг (англ. refactoring)
или реорганизация кода - процесс изменения внутренней структуры программы, не
затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В
основе рефакторинга лежит последовательность небо
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (2)
2.1. Извлечение подкласса.
2.1.1. Добавь класс Soldier в пакет human.
2.1.2. Избавься от поля isSoldier.
2.1.3. Обнови сигнатуру конструктора Human.
2.1.4. Перенеси в Soldier необходимые методы из Human.
2.2. Подъем тела конструктора.
2.2.1. Перенеси инициализацию полей name и age в подходящее место
7
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (3)
3.1. Спуск поля. Спусти поле course в соответствующий класс. Сделай его приватным.
3.2. Спуск метода. Спусти геттер для поля course в соответствующий класс.
3.3. Извлечение интерфейса.
3.3.1. Создай интерфейс Alive (живой) в пакете human.
3.3.2. Интерфейс должен содержать метод жить live().
3.3.3. Д
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (4)
4.1. Замена наследования делегированием.
4.1.1. Класс University не должен наследоваться от Student.
4.1.2. Класс University должен содержать список students. Не забудь его инициализировать.
4.1.3. Добавь сеттер и геттер для students.
4.1.4. Университет имеет название (name) и возраст (age). Добавь
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (5)
5.1. Создание шаблонного метода.
5.1.1. Добавь в класс Human метод String getPosition(), который должен возвращать строку "Человек".
5.1.2. Переопредели этот метод в классе Student и Teacher. Метод должен возвращать "Студент" и "Преподаватель" соответственно.
5.1.3. Замени метод printData в подкласс
28
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (6)
6.1. Замена параметра набором специализированных методов. Замени метод setValue() класса
Student специализированными методами setCourse и setAverageGrade.
6.2. Добавление параметра. Добавить параметр с типом double в метод
getStudentWithAverageGrade(), чтобы было понятно с каким средним балом нужен
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (7)
7.1. Параметризация метода. Замени методы incAverageGradeBy01() и incAverageGradeBy02() одним методом incAverageGrade(double delta).
7.2. Передача всего объекта. Перепиши метод addInfoAboutStudent(), чтобы он в качестве параметра принимал объект типа Student.
7.3. Замена параметра вызовом метода. Пе
7
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (8)
8.1. Удаление сеттера. Удали метод setId(). Поле id должно устанавливаться только в момент
создания объекта.
8.2. Сокрытие метода (поля). Изменить область видимости поля nextId в соответствии с
областью его использования.
8.3. Замена исключения проверкой условия. Перепиши метод removeStudent(int ind
28
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (9)
9.1. Самоинкапсуляция поля. Перепиши метод incAverageGrade() используя сеттер и геттер для доступа к averageGrade.
9.2. Замена поля-массива объектом. Замени массив int[] size объектом нового типа Size,
содержащим публичные поля: рост int height и вес int weight. Публичный класс Size объяви
внутри кл
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (10)
Разберись с кодом в пакете car (машина).
10.1. Замена конструктора фабричным методом.
10.1.1. Объяви классы Truck (грузовик), Sedan (седан) и Cabriolet (кабриолет), унаследованные от Car.
10.1.2. Добавь в них конструкторы, принимающие int numberOfPassengers.
10.1.3. Добавь фабричный статический мето
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (11)
11.1. Замена кода ошибки исключением. Перепиши метод заправиться fill(double
numberOfLiters), чтобы он в случае ошибки кидал исключение Exception. Исправленный метод должен возвращать void.
11.2. Разбиение условного оператора.
11.2.1. Добавь и реализуй метод в классе Car, определяющий относится ли переданная дата к
лету: boolean isSummer(Dat
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (12)
12.1. Объединение условных операторов.
12.1.1. Добавь внутренний метод, сообщающий, могут ли быть перевезены пассажиры
boolean canPassengersBeTransferred() в класс Car. Метод должен возвращать true, если
водитель доступен isDriverAvailable и есть топливо fuel.
12.1.2. Перепиши метод getNumberOfPasse
28
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (13)
Разберись с кодом пакета user (пользователь).
13.1. Извлечение метода. Добавь метод printInfo(), который будет выводить имя и фамилию
в консоль в формате
Имя: Вася
Фамилия: Пупкин
Замени повторяющийся код метода printUsers() его вызовом.
13.2. Встраивание метода. Избавься от метода ageLessTh
14
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (14)
14.1. Перемещение поля. Замени поля isManAnya и isManRoma полем man в нужном классе.
Добавь сеттер и геттер для нового поля (при выборе имен методов учти тип поля).
14.2. Извлечение класса.
14.2.1. Добавь класс Address в пакет user.
14.2.2. Перенеси поля country, city и house в новый класс.
14.2.3.
7
Задача
Java Multithreading,
5 уровень,
16 лекция
Недоступна
Рефакторинг (15)
Отлично. Ты освоил основные методы рефакторинга: Подъем поля, Подъем метода,
Инкапсуляция коллекции, Извлечение подкласса, Подъем тела конструктора, Спуск
метода, Спуск поля, Извлечение интерфейса, Свертывание иерархии, Замена наследования
делегированием, Извлечение суперкласса, Замена простого поля
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ