Объектно-ориентированное программирование (ООП) — это парадигма, которая позволяет моделировать реальный мир через сущности, называемые объектами. В Java, одном из самых популярных языков ООП, ключевыми концепциями являются классы и объекты. Давайте разберемся, как они работают и зачем нужны.
Класс — это шаблон или каркас, который описывает свойства (атрибуты) и поведение (методы) объектов, создаваемых на его основе. Классы позволяют организовывать код и структурировать его, что упрощает разработку, сопровождение и тестирование программ.
Объект — это копия класса, которая существует в памяти компьютера. Например, когда вы создаёте переменную типа String и присваиваете ей значение «Строка», в памяти создаётся экземпляр класса String.
Например, если класс Car описывает машину, то объектом может быть конкретный автомобиль «Tesla Model S» с цветом «красный» и мощностью 500 л.с.
Плюсы и минусы ООП
✅ Преимущества:
- Повторное использование кода
- Классы можно использовать многократно, создавая множество объектов.
- Инкапсуляция
- Сокрытие внутренней реализации (например, доступ к полям через методы).
- Наследование
- Создание новых классов на основе существующих (например, ElectricCar наследует Car).
- Полиморфизм
- Возможность объектов вести себя по-разному в зависимости от контекста.
❌ Недостатки:
- Сложность для новичков
- Требуется время, чтобы понять абстракции.
- Избыточность
- Иногда простые задачи можно решить без ООП.
- Производительность
- ООП-код может работать чуть медленнее процедурного (но в Java это редко критично).
Основные принципы объектно-ориентированного программирования
В основе объектно-ориентированного программирования лежат четыре ключевых концепции:
- абстракции
- инкапсуляции
- наследовании
- полиморфизме.
Каждую концепцию разберём отдельно в разных статьях.
1. Инкапсуляция
Для обеспечения безопасности данных объекта необходимо ограничить доступ к ним, чтобы предотвратить возможность произвольного изменения и повреждения. С этой целью разработчики создают публичные методы, которые формируют интерфейс объекта и обеспечивают доступ к данным.
Суть: Сокрытие внутренней реализации и защита данных.
Как работает:
- Поля класса делаются private
- Доступ через публичные методы (геттеры/сеттеры)
- Можно добавлять проверки в сеттеры
2. Наследование
Классы способны передавать свои свойства и методы дочерним классам.
Суть: Создание новых классов на основе существующих.
Как работает:
- Класс-потомок (extends) получает все поля и методы родителя
- Можно добавлять новые свойства/методы
- Можно переопределять методы (@Override)
3. Полиморфизм
Этот принцип позволяет применять одни и те же команды к объектам разных классов, даже если они выполняются по-разному.
Суть: Один интерфейс — множество реализаций.
Как работает:
- Возможность вызывать одни и те же методы у разных классов
- Переопределение методов
- Работа через ссылки родительского класса
4. Абстракция
В процессе разработки класса мы стремимся свести его к набору необходимых атрибутов и методов, которые требуются в данном контексте, не пытаясь охватить все аспекты и исключить всё лишнее. Например, все кошки в теории способны охотиться, но если наша программа не предназначена для ловли мышей, то нет необходимости включать этот метод.
Суть: Работа с объектами через упрощённые модели.
Как работает:
- Абстрактные классы (abstract class)
- Интерфейсы (interface)
- Скрытие сложной реализации
Первый класс
Переменные, которые были определены в классе, называются полями экземпляра. Каждый объект класса содержит свои копии этих переменных, и изменение значения поля в одном объекте не повлияет на значение этого поля в другом объекте.
Допустим, вы создаёте переменную id и можете присваивать ей любые значения в методах.
Необходимо, чтобы код был расположен либо в теле методов, либо в блоках инициализации. Он не должен быть «свободно плавающим».
Предположим, что мы хотим добавить в наше приложение функционал, связанный с котами. Однако Java не имеет встроенных знаний о котах, поэтому нам нужно создать новый тип данных, который будет представлять собой кота.
Для начала создадим класс Cat. У котов есть три характеристики: name (имя), color (окрас) и age (возраст). Пока что они не умеют ничего делать.
Итак, мы рассказали Java что такое коты, теперь если мы хотим создать в нашем приложении кота, следует воспользоваться следующим оператором.
Cat cat1 = new Cat();
Мы создали объект, который представляет собой экземпляр класса Cat. Чтобы работать с этим объектом, мы поместили его в переменную, присвоив ей имя cat1.
Важно отметить, что в переменной хранится не сам объект, а лишь ссылка на него в памяти.
Объект cat1 был создан по шаблону Cat, поэтому он имеет поля name, color и age, с которыми можно взаимодействовать: получать и изменять их значения.
Также, используя шаблон Cat, мы можем создавать любое количество объектов, каждый из которых будет иметь имя, цвет и возраст.
Cat cat2 = new Cat();
Cat cat3 = new Cat();
У всех этих котов мы можем указывать свой возраст, имя и цвет. Это ведь разные коты. Но никто нам не запрещает указывать и одинаковые значения.
Создадим ещё один класс, где мы будем создавать наших котов
Чтобы получить доступ к свойствам объекта, используется операция, напоминающая точку. Она связывает имя объекта с именем свойства.
Например, чтобы задать свойству color объекта cat1 значение «Белый», нужно выполнить следующую команду:
cat1.color = "Белый";
Операция-точка служит для доступа к полям и методам объекта по его имени. Рассмотрим пример консольного приложения, работающего с объектами класса Cat.
Результат работы программы:
Кот1 имя: Барсик цвет: Белый возраст: 4
Кот2 имя: Мурзик цвет: Черный возраст: 6
В начале мы создали два объекта типа Cat: cat1 и cat2. У них одинаковый набор свойств (name, color, age), но значения этих свойств у каждого объекта свои.
Как видно из вывода в консоли, изменение значения свойства одного объекта не влияет на значение свойства другого объекта. Данные объектов cat1 и cat2 не связаны между собой.
Это лишь небольшой пример использования классов и объектов. Далее мы продолжим с вами изучать объекты и конструкторы.
Если хотите поддержать - ссылка на донат
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!