Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Создание собственных типов Java: Классы

Java – язык, который сильно ориентирован на классы. Практически для любой задачи нужно создавать классы, особенно той, которая связана с данными. В этом уроке мы поговорим о том, с какими классами вам придется встречаться в коде реальных приложений. Для демонстрации будут использоваться классы, в которых встречаются не изученные на текущий момент конструкции. На них не стоит обращать внимание, но без них мы бы не смогли ничего показать.

Считается, что это из-за объектной-ориентированности Java, на самом деле это не совсем так. Java, скорее, классово ориентирована. В мире существует немало ООП языков, которые значительно отличаются от Java по устройству, а в некоторых из них даже нет классов

Когда говорят про классы, обычно говорят про предметную область, например, если взять Хекслет, это будет онлайн-обучение. В этой области есть такие понятия как курс, группа, ученик, проект, задание, квиз и многое другое. В коде все эти понятия представлены классами со своими наборами свойств и методов.

class Lesson {
    private Course course;
    private String name;
    private String content;
    private ArrayList<Member> members;
}

Это важная часть приложения для которой используются классы, но далеко не единственная. Подавляющее большинство классов в приложениях относятся к другим категориям. Если открыть наш репозиторий с приложением на Spring Boot, который вы будете использовать в более поздних курсах, то можно увидеть, что там встречаются совершенно разные классы:

  • DataInitializer
  • RsaKeyProperties
  • JacksonConfig
  • PostsCommentsController
  • PostCommentParamsDTO
  • ResourceNotFoundException
  • UserMapper
  • PostRepository
  • PostService
  • JWTUtils
  • User

Всего же в коде около 30 классов, и только 4 из них связаны с предметной областью. Какие мы можем выделить категории?

Исключения

Ошибки в Java тоже представлены классами. Для каждого типа ошибки создаются свои классы. Обычно это делается в библиотеках или встроено в саму Java, но бывает, что приходится создавать подобные классы для ошибок и в прикладном коде.

// Тут используется наследование от класса Exception
public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

Data-классы

Категория, в которую попадают объекты для хранения или передачи данных куда-то дальше. Например, в объектах этих классов может содержаться конфигурация сервиса, которую можно при необходимости читать.

// Хранит ключи шифрования
public class RsaKeyProperties {
    private RSAPublicKey publicKey;
    private RSAPrivateKey privateKey;
}

Data-классы используются и для данных, которые приходят в программу снаружи, например через формы на сайте. Чтобы работать с этими данными внутри приложения, сначала из них нужно сделать объект с данными. И то же самое в обратную сторону, если нам нужно передать данные наружу, то они формируются из специальных объектов, которые нужны только для этой задачи. В Java объекты таких классов называют Data Transfer Object (DTO).

public class PostDTO {
    private Long id;
    private Long authorId;
    private String slug;
    private String name;
    private String body;
    private Date createdAt;
}

Главная особенность data-классов в том, что они не содержат никакого поведения, это просто хранилище данных для постоянного, как в случае конфигурации, или DTO для временного использования.

Сервисы

Это классы, объекты которых, используются для выполнения однотипных задач вокруг какого-то сервиса или механизма. Например, у нас может быть сервис для отправки писем или sms.

// Упрощенный пример для демонстрации
import javax.mail.*;
import javax.mail.internet.*;

public class EmailSender {
    public static void sendEmail(String recipient, String subject, String text) throws MessagingException {
        var message = new MimeMessage();
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
        message.setSubject(subject);
        message.setText(text);

        Transport.send(message);
    }
}

Часто сервисы строятся вокруг каких-то внешних систем, например PayPal, для работы с платежами.

// Пример использования
var service = new PayPalService();
var payment = service.createPayment(
        10.00,
        "USD",
        "paypal",
        "sale",
        "for hexlet courses",
        "http://cancel.url",
        "http://success.url");

Служебные объекты

Большая и разнообразная категория, в которую, например, входят классы для взаимодействия с другими программами, такими как базы данных, очереди, кеши и многое другое.

// Соединение - это служебный объект
var conn = DriverManager.getConnection("jdbc:h2:mem:hexlet_test");

var sql = "SELECT * FROM users";
var statement = conn.createStatement();
var resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
    System.out.println(resultSet.getString("username"));
    System.out.println(resultSet.getString("phone"));
}
statement.close();

conn.close();

Утилиты

Какие-то вспомогательные объекты для решения разнообразных задач, например, обработки строк, преобразования Markdown в HTML и тому подобное. Утилиты почти всегда похожи на обычные функции из других языков программирования.

var str = "  abc  ";

// Обрезает концевые пробелы
var trimmed = StringUtils.trim(str);

var str2 = "foo";
var replacedStr = StringUtils.replaceChars(str2, 'o', 'e'); // fee

var str = "abcdef";
var reversed = StringUtils.reverse(str); // fedcba

Остальное

Есть немало и других классов, которые не попали ни под одну из категорий выше. Со всем этим многообразием вы будете знакомиться не только во время обучения, но и уже в реальной работе, причем постоянно.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 16 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу