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

Но прежде чем погрузиться в основные концепции ООП, давайте начнем с основ.

Две основные вещи, о которых вам нужно знать:

  1. Классы
  2. Объекты

Классы

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

class Student{
  String firstName;
  String lastName;
  int id;
  int batch;
  
  Student(String firstName, String lastName, int id, int batch){
    this.firstName = firstName;
    this.lastName = lastName;
    this.id = id;
    this.batch = batch;
  }

  int getFullName(){
    return firstName + " " + lastName;
  }

  int getId(){
    return this.id;
  }

  // more methods for data manipulation
}

Здесь мы создали класс под названием Student, в котором есть элементы данных, такие как firstName, lastName, id, пакет и функции-члены для управления этими данными. Конструктор присутствует для инициализации функций-членов.

Объекты

Объект определяется как экземпляр класса. Это похоже на чертеж архитектора, превращенный в настоящее здание. Обратите внимание, что каждый объект может иметь разные значения элементов данных, и их может быть несколько объектов в памяти, но класс один и тот же для одного и того же типа объектов. Объект имеет три свойства:

  1. Личность
  2. Состояние
  3. Поведение

Идентификаторобъекта — это уникальный идентификатор или критерий, идентифицирующий объект. По сути, он отличает два объекта друг от друга.

Состояниеобъекта – это значение его элементов данных.

Поведениеобъекта зависит от его методов, которые работают с его внутренним состоянием.

Student jack = new Student("Jack", "Silva", 1, 2020);
Student robert = new Student("Robert", "Spice", 2, 2022);

Мы создали два объекта класса Student и инициализировали их свойства через определенный конструктор. Эти два объекта различны (имеют разные идентификаторы), разные состояния и общее поведение, определенное в классе.

Объектно-ориентированное программирование (ООП)

Так что же такое ООП? Это не что иное, как парадигма программирования, основанная на объектах. Он обеспечивает различные преимущества следующим образом:

  1. Модульная структура, которая помогает в определении абстрактных типов данных.
  2. Легко поддерживать и модифицировать существующий код. Помогает в создании СУХОГО (не повторяйтесь) кода.
  3. Увеличивает возможность повторного использования
  4. Быстрое и недорогое развертывание.
  5. Более высокое качество программного обеспечения.

Столпы ООП

Эти четыре столпа ООП помогают программистам писать чистый и лаконичный код.

  1. Абстракция
  2. Инкапсуляция
  3. Наследование
  4. Полиморфизм

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

Абстракция

Абстракция означает сокрытие ненужных деталей от пользователя. Другими словами, скройте детали реализации от пользователя. Например, когда вы заводите машину, вы просто нажимаете кнопку или вставляете ключ, чтобы включить двигатель, вы не знаете, что происходит внутри. Вы не знаете внутренних деталей, таких как закачка топлива из топливного бака и воспламенение от свечи зажигания, которая сжигает топливо с образованием газов, приводящих в движение поршень, и двигатель включается. Мы этого не знаем, мы просто знаем, что нам нужно нажать простую кнопку. Вот что такое абстракция. С точки зрения программирования давайте рассмотрим метод toUpperCase("Chris"), который печатает строку в верхнем регистре. Мы не знаем его внутреннюю реализацию. Это Абстракция.

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

Инкапсуляция, как следует из названия, — быть в одной капсуле или упаковывать данные в один блок. В Java это достигается с помощью классов. Чтобы понять это лучше, посмотрите на капсулу поливитаминов. Он имеет различные виды витаминов, которые инкапсулированы вместе. Это инкапсуляция для вас!

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

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

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

Полиморфизм

Полиморфизм — это способность объекта принимать различные формы. Точно так же, как вы ведете себя как очень хороший, культурный человек со стороны своих родителей, но абсолютно дикий и экстравертный со своей группой друзей, объекты могут вести себя точно так же. Поведение объекта можно переопределить, и его можно заставить вести себя в соответствии с пожеланиями программиста. В основном это достигается за счет перегрузки и переопределения методов. Подводя итог, полиморфизм позволяет нам выполнять одно и то же действие по-разному.