Java: Классы
Теория: Создание собственных типов
Java – язык, который сильно ориентирован на классы. Практически для любой задачи нужно создавать классы, особенно той, которая связана с данными. В этом уроке мы поговорим о том, с какими классами вам придется встречаться в коде реальных приложений. Для демонстрации будут использоваться классы, в которых встречаются не изученные на текущий момент конструкции. На них не стоит обращать внимание, но без них мы бы не смогли ничего показать.
Считается, что это из-за объектной-ориентированности Java, на самом деле это не совсем так. Java, скорее, классово ориентирована. В мире существует немало ООП языков, которые значительно отличаются от Java по устройству, а в некоторых из них даже нет классов
Когда говорят про классы, обычно говорят про предметную область, например, если взять Хекслет, это будет онлайн-обучение. В этой области есть такие понятия как курс, группа, ученик, проект, задание, квиз и многое другое. В коде все эти понятия представлены классами со своими наборами свойств и методов.
Это важная часть приложения для которой используются классы, но далеко не единственная. Подавляющее большинство классов в приложениях относятся к другим категориям. Если открыть наш репозиторий с приложением на Spring Boot, который вы будете использовать в более поздних курсах, то можно увидеть, что там встречаются совершенно разные классы:
DataInitializerRsaKeyPropertiesJacksonConfigPostsCommentsControllerPostCommentParamsDTOResourceNotFoundExceptionUserMapperPostRepositoryPostServiceJWTUtilsUser
Всего же в коде около 30 классов, и только 4 из них связаны с предметной областью. Какие мы можем выделить категории?
Исключения
Ошибки в Java тоже представлены классами. Для каждого типа ошибки создаются свои классы. Обычно это делается в библиотеках или встроено в саму Java, но бывает, что приходится создавать подобные классы для ошибок и в прикладном коде.
Data-классы
Категория, в которую попадают объекты для хранения или передачи данных куда-то дальше. Например, в объектах этих классов может содержаться конфигурация сервиса, которую можно при необходимости читать.
Data-классы используются и для данных, которые приходят в программу снаружи, например через формы на сайте. Чтобы работать с этими данными внутри приложения, сначала из них нужно сделать объект с данными. И то же самое в обратную сторону, если нам нужно передать данные наружу, то они формируются из специальных объектов, которые нужны только для этой задачи. В Java объекты таких классов называют Data Transfer Object (DTO).
Главная особенность data-классов в том, что они не содержат никакого поведения, это просто хранилище данных для постоянного, как в случае конфигурации, или DTO для временного использования.
Сервисы
Это классы, объекты которых, используются для выполнения однотипных задач вокруг какого-то сервиса или механизма. Например, у нас может быть сервис для отправки писем или sms.
Часто сервисы строятся вокруг каких-то внешних систем, например PayPal, для работы с платежами.
Служебные объекты
Большая и разнообразная категория, в которую, например, входят классы для взаимодействия с другими программами, такими как базы данных, очереди, кеши и многое другое.
Утилиты
Какие-то вспомогательные объекты для решения разнообразных задач, например, обработки строк, преобразования Markdown в HTML и тому подобное. Утилиты почти всегда похожи на обычные функции из других языков программирования.
Остальное
Есть немало и других классов, которые не попали ни под одну из категорий выше. Со всем этим многообразием вы будете знакомиться не только во время обучения, но и уже в реальной работе, причем постоянно.


