Файл: Инкапсуляция скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры). Как применяется инкапсуляция.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.11.2023

Просмотров: 27

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ООП

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

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

Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое.

В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.

Инкапсуляция - скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры).

Как применяется инкапсуляция

Есть несколько способов регулировать доступ к нашим данным. Основные это:

  • Модификаторы доступа (Access modifiers)

  • Геттеры и Сеттеры (Getters and Setters)

Модификаторы доступа

Модификаторы доступа - это специальные слова, которые показывают, кому нельзя, а кому можно пользоваться данными.

Существуют четыре модификатора доступа:



На самом деле по названиям не сложно понять, что каждый из них означает:

  • public - "публичный, доступный всем"

  • default - "по умолчанию". Когда мы не пишем модификатора доступа (как мы это делали в наших предыдущих уроках), он по умолчанию имеет значение default. Данные с этим модификатором видны в пределах package.

  • protected - "защищенный". На самом деле это то же самое, что и default, только доступ имеют еще и классы-наследники.

  • private - "частный, личный". Такие данные видны только самому классу.

Гетеры и Сеттеры

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

Полиморфизм

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

Как проявляется полиморфизм


Дело в том, что если бы в Java не было принципа полиморфизма, компилятор бы интерпретировал это как ошибку:



Как видите, методы на картинке отличаются значениями, которые они принимают:

  • первый принимает int

  • а второй принимает String

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



Называть методы одинаково - это очень удобно. Например, если у нас есть метод, который ищет корень квадратный из числа, гораздо легче запомнить одно название (например, sqrt()), чем по одному отдельному названию на этот же метод, написанный для каждого типа:



Как видите, мы не должны придумывать отдельное название для каждого метода - а главное их запоминать! Очень удобно.

Теперь Вы можете понять, почему часто этот принцип описывают фразой:

Один интерфейс - много методов

Это предполагает, что мы можем заполнить одно название (один интерфейс), по которому мы сможем обращаться к нескольким методам.

Перегрузка методов


То, что мы показывали выше - несколько методов с одним названием и разными параметрами - называется перегрузкой. Но это был пример перегрузки метода в одном классе. Но бывает еще один случай - переопределение методов родительского класса.

Переопределение методов родителя


Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его. Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет "мертвым грузом" лежать в нашем классе.

Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.



Пример

Представим, что у нас есть такая структура:

Вверху иерархии классов стоит класс Animal. Его наследуют три класса - CatDog и Cow.

У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос". Естественно, ни собака, ни кошка не говорят "Голос"   Они гавкают и мяукают. Соответственно, Вам нужно задать другой метод для классов CatDog и Cow - чтобы кошка мяукала, собака гавкала, а корова говорила "Муу".

Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу", "Гав" и "Муу".

  • Обратите внимание: перед методом, который мы переопределяем, пишем "@Override". Это дает понять компилятору, что мы хотим переопределить метод.

Так что же такое полиморфизм


Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые мы приведодили выше - это только способы реализации полиморфизма.

Давайте снова посмотрим на определение, которое мы давали в начале статьи:

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

Выглядит понятнее, правда? Мы показали, как можно:

  • создавать "одноименные методы" в одном классе ("перегрузка методов")

  • или изменить поведение методов родительского класса ("переопределение методов").

Все это - проявления "повышенной гибкости" объектно-ориентированных языков благодаря полиморфизму.

  • Наследование - выделение общих свойств и методов в родительский класс. extends - расширение родительского класса.

  • Инкапсуляция - скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры).

  • Полиморфизм - это способность метода принимать в качестве аргумента и обрабатывать разные типы информации. 



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

Объект - конкретный экземпляр класса, который имеет свои собственные конкретные значения свойств.

Свойства класса - поле данных класса (переменные, массивы и т.п)

Метод класса - функция, которая описывает то, как сущность выполняет определенные действия.

Перегрузка методов:

- Все методы в Java могут быть перегружены (кроме final)

- Перегруженный в дочернем классе метод, будет вызван для объекта данного класса, вместо метода родительского класса.

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

@Override — проверяет, переопределен ли метод. Вызывает ошибку компиляции / интерпретации, если метод не найден в родительском классе или интерфейсе;

NEW - это оператор, который создает новые объекты класса. Он:

  • выделяет память под объект

  • создает объект (вызывает конструктор)

  • возвращает ссылку на созданный объект

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

Пакет состоит из 3 составляющих - тип домена (com, edu, ru), имя компании, или фамилия и третья - имя проекта. Для того, чтобы классы не пересекались (конвенция).

Пакеты используются для того, чтобы логически группировать различные классы.

Модификаторы доступа:

  • public - доступно всем

  • protected - доступно только внутри пакета и наследникам

  • default - доступно только в пакете класса

  • private - доступно только внутри класса


ключевое слово super - обращение к родительскому классу.