Концепции ООП в Java

Концепции объектно-ориентированного программирования — ООП в Java

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

Основные принципы ООП

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

А теперь подробнее о каждом:

Абстракция

Абстракция — сокрытие внутренних деталей и описание вещей простыми словами. Например, метод складывает два целых числа, его внутренняя логика сокрыта от внешнего мира: он просто принимает на вход два числа и на выходе выдает результат сложения. Есть много способов достижения абстракции в объектно-ориентированном программировании, например: инкапсуляция и наследование.

Любая программа на Java уже является отличным примером абстракции: Java сама заботится о преобразовании команд на машинный язык и скрывает детали реализации от внешнего мира.

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

Инкапсуляция — метод достижения абстракции в объектно-ориентированном программировании. Инкапсуляция используется для ограничения доступа до членов класса и методов.

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

Полиморфизм

Говоря простыми словами, полиморфизм дает возможность объекту вести себя по-разному в различных ситуациях. Есть два типа полиморфизма: полиморфизм в процессе компиляции и выполнения.

Полиморфизм в процессе компиляции достигается за счет перегрузки метода. Смотрим пример ниже:

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

Полиморфизм времени выполнения достигается, когда у нас есть отношения «IS-A» между объектами. Подкласс должен переопределить метод суперкласса для достижения полиморфизма времени выполнения. Если мы смотрим в контексте суперкласса, то фактическая реализация класса определяется во время выполнения. Компилятор не в состоянии решить какой метод класса будет вызван. Это решение будет принято во время выполнения программы, отсюда и название: полиморфизм времени выполнения.

Смотрим пример:

У нас есть 1 интерфейс и 2 класса, которые его реализуют, теперь посмотрим на полиморфизм времени выполнения:

В приведенном примере Java компилятор не знает точный класс, который реализует интерфейс. Это все будет определяться во время выполнения, следовательно, это пример полиморфизма времени выполнения.

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

Наследование — одна из концепций объектно-ориентированного программирования, согласно которой один объект основывается на другом объекте. Наследование является механизмом повторного использования кода. Объект, которого унаследовали, называется суперклассом. Объект, который наследует суперкласс называется подклассом.

В Java использутся ключевое слово extends для реализации наследования. Подробнее о наследовании в Java. Также рекомендую сравнительную статью Композиция vs Наследование.

Ассоциация

Ассоциация — концепция ООП, которая определяет отношения между объектами. Также ассоциация определяет кратность между объектами, например: объект Преподаватель и объекты Студенты. Отношение между преподавателем и учениками будет один ко многим. Точно так же студент может иметь один ко многим отношения с объектами преподавателей. Однако объект студент и объект преподаватель независимы друг от друга.

Агрегирование

Агрегирование представляет собой особый тип ассоциации. При агрегации объекты все также имеют свой жизненный цикл, однако ограничены отношением принадлежности «HAS-A», то есть отношение «часть-целое» между двумя объектами.

Композиция

Композиция представляет собой особую, более строгую форму агрегации. Это значит, что находящийся в отношениях «HAS-A» объект не может существовать сам по себе. Например, отношение «Дом-Комната» — здесь Комната не может существовать без Дома. Подробнее о композиции читайте в этой статье.

На этом краткий обзор концепций ООП завершен. Не упустил ли я чего-то важного в попытках сделать статью простой для понимания новичку? Если что — пишите в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *