Найти в Дзене

Java Введение. Что такое ООП? Часть 11.

Оглавление

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

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

Объект — это копия класса, которая существует в памяти компьютера. Например, когда вы создаёте переменную типа String и присваиваете ей значение «Строка», в памяти создаётся экземпляр класса String.

Например, если класс Car описывает машину, то объектом может быть конкретный автомобиль «Tesla Model S» с цветом «красный» и мощностью 500 л.с.

Плюсы и минусы ООП

✅ Преимущества:

  1. Повторное использование кода
  2. Классы можно использовать многократно, создавая множество объектов.
  3. Инкапсуляция
  4. Сокрытие внутренней реализации (например, доступ к полям через методы).
  5. Наследование
  6. Создание новых классов на основе существующих (например, ElectricCar наследует Car).
  7. Полиморфизм
  8. Возможность объектов вести себя по-разному в зависимости от контекста.

❌ Недостатки:

  1. Сложность для новичков
  2. Требуется время, чтобы понять абстракции.
  3. Избыточность
  4. Иногда простые задачи можно решить без ООП.
  5. Производительность
  6. ООП-код может работать чуть медленнее процедурного (но в Java это редко критично).

Основные принципы объектно-ориентированного программирования

В основе объектно-ориентированного программирования лежат четыре ключевых концепции:

  • абстракции
  • инкапсуляции
  • наследовании
  • полиморфизме.

Каждую концепцию разберём отдельно в разных статьях.

1. Инкапсуляция

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

Суть: Сокрытие внутренней реализации и защита данных.

Как работает:

  • Поля класса делаются private
  • Доступ через публичные методы (геттеры/сеттеры)
  • Можно добавлять проверки в сеттеры
-2

2. Наследование

Классы способны передавать свои свойства и методы дочерним классам.

Суть: Создание новых классов на основе существующих.

Как работает:

  • Класс-потомок (extends) получает все поля и методы родителя
  • Можно добавлять новые свойства/методы
  • Можно переопределять методы (@Override)
-3

3. Полиморфизм

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

Суть: Один интерфейс — множество реализаций.

Как работает:

  • Возможность вызывать одни и те же методы у разных классов
  • Переопределение методов
  • Работа через ссылки родительского класса
-4

4. Абстракция

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

Суть: Работа с объектами через упрощённые модели.

Как работает:

  • Абстрактные классы (abstract class)
  • Интерфейсы (interface)
  • Скрытие сложной реализации
-5

Первый класс

Переменные, которые были определены в классе, называются полями экземпляра. Каждый объект класса содержит свои копии этих переменных, и изменение значения поля в одном объекте не повлияет на значение этого поля в другом объекте.

Допустим, вы создаёте переменную id и можете присваивать ей любые значения в методах.

-6

Необходимо, чтобы код был расположен либо в теле методов, либо в блоках инициализации. Он не должен быть «свободно плавающим».

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

Для начала создадим класс Cat. У котов есть три характеристики: name (имя), color (окрас) и age (возраст). Пока что они не умеют ничего делать.

-7

Итак, мы рассказали Java что такое коты, теперь если мы хотим создать в нашем приложении кота, следует воспользоваться следующим оператором.

Cat cat1 = new Cat();

Мы создали объект, который представляет собой экземпляр класса Cat. Чтобы работать с этим объектом, мы поместили его в переменную, присвоив ей имя cat1.

Важно отметить, что в переменной хранится не сам объект, а лишь ссылка на него в памяти.

Объект cat1 был создан по шаблону Cat, поэтому он имеет поля name, color и age, с которыми можно взаимодействовать: получать и изменять их значения.

Также, используя шаблон Cat, мы можем создавать любое количество объектов, каждый из которых будет иметь имя, цвет и возраст.

Cat cat2 = new Cat();
Cat cat3 = new Cat();

У всех этих котов мы можем указывать свой возраст, имя и цвет. Это ведь разные коты. Но никто нам не запрещает указывать и одинаковые значения.

Создадим ещё один класс, где мы будем создавать наших котов

-8

Чтобы получить доступ к свойствам объекта, используется операция, напоминающая точку. Она связывает имя объекта с именем свойства.

Например, чтобы задать свойству color объекта cat1 значение «Белый», нужно выполнить следующую команду:

cat1.color = "Белый";

Операция-точка служит для доступа к полям и методам объекта по его имени. Рассмотрим пример консольного приложения, работающего с объектами класса Cat.

-9

Результат работы программы:

Кот1 имя: Барсик цвет: Белый возраст: 4
Кот2 имя: Мурзик цвет: Черный возраст: 6

В начале мы создали два объекта типа Cat: cat1 и cat2. У них одинаковый набор свойств (name, color, age), но значения этих свойств у каждого объекта свои.

Как видно из вывода в консоли, изменение значения свойства одного объекта не влияет на значение свойства другого объекта. Данные объектов cat1 и cat2 не связаны между собой.

Это лишь небольшой пример использования классов и объектов. Далее мы продолжим с вами изучать объекты и конструкторы.

Если хотите поддержать - ссылка на донат

Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!

Обучение тестированию