Улучшаемые навыки
Чистый код
Паттерны проектирования
Обобщенные типы
Перечисления
Аннотации
Автоупаковка
Инструменты
VS Code
IntelliJ IDEA
NetBeans
Eclipse
Чему вы научитесь
01
Создавать и уничтожать объекты эффективно.
02
Переопределять методы equals, hashCode, toString.
03
Использовать обобщенные типы и аннотации.
04
Применять паттерны проектирования.
05
Оптимизировать производительность кода.
Программа курса
01
Создание и уничтожение объектов
Выбор статических фабричных методов вместо конструкторов.
Шаблон Builder в случае большого количества параметров конструктора.
Применение семантики шаблона Singleton с приватным конструктором или enum.
Применение приватного конструктора.
Как избежать создания ненужных объектов.
Удаление устаревших ссылок на объекты.
Отказ от использования финализаторов.
02
Методы, применяемые ко всем объектам
Выполнение общего контракта при переопределении метода equals.
Обязательное переопределение hashCode при переопределении метода equals.
Обязательное переопределение toString.
Осмысленное переопределение клонов.
Выбор реализации Comparable.
Минимизация доступности классов и компонентов.
Использование методов доступа вместо public-полей.
Минимизация изменчивости.
Предпочтение композиции наследованию.
Проектирование с учётом дальнейшего наследования.
Предпочтение интерфейсов абстрактным классам.
Использование только интерфейсов для определения типов.
Используйте иерархии классов вместо тег-классов.
Использование объектов-функций для представления стратегий.
Отдавайте предпочтение статическим внутренним классам над не статическими.
В новом коде всегда используйте generic-типы.
Исключение непроверенных предупреждений.
Предпочтение списков массивам.
Предпочтение generic-типов
Предпочтение generic-методов
Использование ограниченных обобщений для повышения гибкости API.
Выбор однородных безопасных типов контейнеров (typesafe).
Использование enums вместо констант int.
Использование полей экземпляра вместо ordinals.
Использование EnumSet вместо битовых полей.
Использование EnumMap вместо порядкового индексирования.
Эмуляция расширяемых enums с интерфейсами.
Предпочтение аннотаций паттернам именования.
Всегда используйте аннотацию Override.
Использование интерфейсов-маркеров для определения типов.
Проверка параметров на валидность.
Использование защитного копирования при необходимости.
Тщательное проектирование сигнатур методов.
Осмысленное использование перегрузки.
Осмысленное использование varargs.
Возврат пустых массивов или коллекций, вместо null.
Написание документации для всех public элементов API.
07
Общее программирование
Минимизация области видимости локальных переменных.
Предпочтение циклов for-each традиционным циклам for.
Знание и использование библиотек.
Отказ от использования float и double, если требуются точные ответы.
Предпочтение примитивных типов над классами-обёртками.
Избегайте строк, где более подходящими являются другие типы.
Учитывайте производительность во время выполнения конкатенации строк.
Ссылки на объекты по их интерфейсам.
Предпочтение интерфейсов к reflection.
Осмысленное использование нативных методов.
Осмысленная оптимизация.
Соблюдение общепринятых норм именования.
Использование исключений только для исключительных условий.
Использование checked exceptions для проверки условий и unchecked exceptions для ошибок программирования.
Отказ от ненужного использования checked exceptions.
Предпочтительное использование стандартных исключений.
Выброс исключений, соответствующих абстракции.
Документирование всех исключений, выданных каждым методом.
Включение информации о failure-capture в подробные сообщения.
Стремление к атомарности сбоев.
Не допускайте игнорирования исключений.
Синхронизация доступа к общим изменяемым данным.
Исключение чрезмерной синхронизации.
Предпочтение использованию Executor-ов.
Предпочтение утилит параллелизма методам wait и notify.
Документирование безопасности потоков.
Осмысленное использование отложенной инициализации.
Независимость от планировщика потоков.
Исключение групп потоков.
Осмысленная реализация Serializable.
Использование настраиваемой сериализированной формы.
Безопасное написание методов readObject.
Для контроля экземпляров лучше выбрать типы enum вместо readResolve.
Выбор прокси сериализации вместо сериализированных экземпляров.
11
Итого на курс 30 ак. ч.: теория — 13 ак. ч. (43%), практика — 17 ак. ч. ( 57%)
Для кого
Разработчик
Предварительная подготовка
Базовые знания Java
Опыт работы с IDE (IntelliJ IDEA, Eclipse, NetBeans, VSCode)
Расписание курсов
Курс проводят
Соколов Михаил
Эксперт в области разработки и архитектуры ПО