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

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

Объект

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

[includeme post_id=»4299″]

Класс

Класс — это прототип или шаблон, который определяет объекты заданного типа. Это конструктор для создания объекта, который самостоятельно не занимает памяти, но при вызове выделяет память для объекта и инициализирует его переменные. Основные характеристики класса являются — состояние и поведение. Состояние (state) определяет свойства, который имеет объект, а поведение (behaviour) — его деятельность. В Java свойства объектов определяется как переменные (variables), а деятельность как методы (methods). К примеру, объект растение имеет такие параметры как возраст, высота, вид и географическое расположение, и такое поведение как расти, цвести, сбрасывать листву.

Экземпляр — это отдельная реализация класса. В нашем примере — это синяя фиалка возрастом год, которая расположена у вас на подоконнике.

Далее будет рассмотрены концепции ООП на основе Java

Наследование (Inheritance)

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

В представленном ниже примере наследником родительского класса растение Plant является класс дерево tree с использованием ключевого слова расширяет (extends).

Запускаем тест

Результат

Во втором примере в классах собака dog, рыба fish и птица bird реализуются методы интерфейса двигаться move() с использованием ключевого слова реализует (implements). Сам метод объявлен в интерфейсе животное Animal.

Результат

Абстрагирование (Abstraction)

Абстракция позволяет скрыть внутренние процессы и детали, таким образом при реализации выделить значимые данные и исключить незначимые. Представим что необходимо написать программу Java, которая определяет скорость роста растения в зависимости от его территориального расположения. Такие данные как средняя продолжительность дня, количество выпадаемых осадков или тип почвы на данной территории может быть полезной, когда как плотность населения или наличие полезных ископаемых является избыточной информацией, которую можно исключить. На более высоком уровне, примером абстракции данных может служить отправка электронного сообщения, когда от пользователя скрыта информация по реализации протокола передачи данных и более низкоуровневых процессов.

[includeme post_id=»4299″]

Полиморфизм (Polymorphism)

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

Перегрузка метода (method overloading) — один из представлений полиморфизма, когда в одном классе имеется два или более метода с одинаковым именем, но с разными параметрами.

В примере выше, в родительском классе Plant метод grow() представлен два раза, каждый имеет разный набор аргументов.

Так как методы будут идентифицированы во время компиляции, этот тип называют compile time polymorphism.

Переопределение метода (method overriding) подразумевает наличие методов с тем же названием и параметрами, но различными реализациями. Этот тип полиморфизма используется в классах, которые имеют наследственную связь (IS-A).

К примеру, метод grow() представлен в двух классах, родительском Plant и дочернем tree.

Другой пример, задан родительский класс — животное Animal, реализующий метод двигаться move(), и есть три производных класса: собака dog, рыба fish и птица bird. Каждый подкласс будет иметь собственную реализацию движения — бежать, плавать и летать (см. результат второго примера).

Так как методы будут идентифицированы во время исполнения кода этот тип называют run time polymorphism.

Инкапсуляция (Encapsulation)

Инкапсуляция — это свойство программы, позволяющее реализовать абстракцию данных и ограничить доступ между компонентами программы, тем самым реализовать защиту данных от неправомерного использования. Для инкапсуляции используются модификаторы доступа (access modifiers) private, protected, public и default. Подробней про каждый можно рассмотреть в отдельной статье Модификаторы доступа Java

One thought on “Концепции объектно-ориентированного программирования (ООП) Java”

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

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