Так в чем же состоит настоящая цель классов? Упрощенно, с помощью классов описываются категории объектов, например, "кошки" или "адреса" или даже "строки". На базе классов создаются объекты, из которых потом строится логика работы кода.
Возьмем для примера студента Хекслета. В коде он описан классом User
, у которого есть свойства и методы. Свойства — это любая информация о пользователе: дата рождения, дата создания, имя, наличие доступов и т.п. Методы – действия которые может выполнять пользователь.
Такой стиль работы предполагает, что класс используется как "шаблон" для создания объектов этого класса (или как говорят "экземпляров класса"). Например, для класса User
объектами будут конкретные пользователи:
// Создание объекта пользователя (или просто пользователя)
// из класса User
// первый параметр - имя
// второй параметр - фамилия
var user = new User("Danil", "Miloshin");
// метод возвращает имя
user.getFirstName(); // "Danil"
// метод возвращает фамилию
user.getLastName(); // "Miloshin"
// метод возвращает полное имя
user.getFullName(); // "Danil Miloshin"
В коде мы создаем объект "пользователь" с указанными именем и фамилией. Делается это с помощью ключевого слова new
, после которого идет имя класса со скобками, как при вызове обычной функции. Этот объект записывается в переменную и становится доступен для работы. Дальше, в зависимости от того как был написан класс, мы можем выполнять разные действия с ним - менять свойства и вызывать методы. Это похоже на работу со строками, только в таких объектах как выше, хранится не одно значение, а какой-то набор разнородных данных. Причем они могут быть разных типов. Вот пример другого класса User
, который мы могли бы написать:
// первый параметр - email
// второй параметр - возраст
var user = new User("admin@hexlet.io", 25);
// Это не статический метод
// он взаимодействует с конкретным объектом и имеет доступ к его данным
user.getEmail(); // "admin@hexlet.io"
При таком подходе, программа превращается в набор объектов, которые взаимодействуют друг с другом. Через эти объекты выражаются процессы, происходящие в проекте. Например, создание курса, добавление туда уроков, прохождение курса студентом и так далее. Все это в коде выглядит как объекты, жонглирующие объектами:
// Гипотетический пример – Создание курса
// Даже даты это объекты
var course = new Course("java", "тут описание", new Date());
var lesson1 = new Lesson("строки", "тут текст");
course.addLesson(lesson1); // добавляем урок в курс
var lesson2 = new Lesson("числа", "тут текст");
course.addLesson(lesson2); // и еще один
repository.save(course); // сохранение в базу данных
course.getLessons(); // вернет два урока
В программировании такой стиль программирования называется объектно-ориентированным (ООП). Чтобы научиться писать такой код, нужно время. В начале, для создания объектов, мы будем использовать или дописывать готовые классы. Затем, постепенно, вы начнете создавать свои, пока это не станет обыденным делом.
Связь с реальным миром
В интернете много вопросов от новичков, что такое ООП (объектно-ориентированное программирование) и как его понять. Один из самых популярных ответов — рассказ про моделирование реального мира через классы. Вот у нас есть машина, вот дом, вот мы для них пишем классы. Такое объяснение больше путает, чем помогает. Классы действительно используются для моделирования, но только не реального мира, а конкретной предметной области. Например, пользователь с точки зрения бухгалтера и системы заказа пиццы — это абсолютно разные сущности. У них разный набор свойств, разное поведение и разное предназначение. То есть важно понимать, что в коде мы всегда описываем какое-то специфичное представление, которое может идти в разрез с реальным миром. Более того, классами описывается вообще все, что не имеет никакой связи с реальным миром. Чему например соответствует HTTP-запрос? А многие классы носят исключительно утилитарный характер и нужны для обслуживания других частей системы.
А для понимания ООП действительно нужно время. Поэтому сначала полезно работать с уже существующими системами, и только потом уже приходить к проектированию своих.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.