Файл: Инкапсуляция скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры). Как применяется инкапсуляция.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 29
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ООП
Объектно-ориентированное программирование (ООП) — парадигма программирования, сменившая процедурное программирование (последовательное, алгоритмичное), в которой основными концепциями являются понятия объектов и классов.
Инкапсуляция
Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое.
В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.
Инкапсуляция - скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры).
Как применяется инкапсуляция
Есть несколько способов регулировать доступ к нашим данным. Основные это:
-
Модификаторы доступа (Access modifiers) -
Геттеры и Сеттеры (Getters and Setters)
Модификаторы доступа
Модификаторы доступа - это специальные слова, которые показывают, кому нельзя, а кому можно пользоваться данными.
Существуют четыре модификатора доступа:
На самом деле по названиям не сложно понять, что каждый из них означает:
-
public - "публичный, доступный всем" -
default - "по умолчанию". Когда мы не пишем модификатора доступа (как мы это делали в наших предыдущих уроках), он по умолчанию имеет значение default. Данные с этим модификатором видны в пределах package. -
protected - "защищенный". На самом деле это то же самое, что и default, только доступ имеют еще и классы-наследники. -
private - "частный, личный". Такие данные видны только самому классу.
Гетеры и Сеттеры
Создавая новый класс, Вы должны думать не только о функциональности, но и о безопасности - кто и при каких условиях может получать доступ к внутренностям Вашего класса.
Полиморфизм
Полиморфизм - это возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования.
Как проявляется полиморфизм
Дело в том, что если бы в Java не было принципа полиморфизма, компилятор бы интерпретировал это как ошибку:
Как видите, методы на картинке отличаются значениями, которые они принимают:
-
первый принимает int -
а второй принимает String
Однако, поскольку в Java используется принцип полиморфизма, компилятор не будет воспринимать это как ошибку, потому что такие методы будут считаться разными:
Называть методы одинаково - это очень удобно. Например, если у нас есть метод, который ищет корень квадратный из числа, гораздо легче запомнить одно название (например, sqrt()), чем по одному отдельному названию на этот же метод, написанный для каждого типа:
Как видите, мы не должны придумывать отдельное название для каждого метода - а главное их запоминать! Очень удобно.
Теперь Вы можете понять, почему часто этот принцип описывают фразой:
Один интерфейс - много методов
Это предполагает, что мы можем заполнить одно название (один интерфейс), по которому мы сможем обращаться к нескольким методам.
Перегрузка методов
То, что мы показывали выше - несколько методов с одним названием и разными параметрами - называется перегрузкой. Но это был пример перегрузки метода в одном классе. Но бывает еще один случай - переопределение методов родительского класса.
Переопределение методов родителя
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его. Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет "мертвым грузом" лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Пример
Представим, что у нас есть такая структура:
Вверху иерархии классов стоит класс Animal. Его наследуют три класса - Cat, Dog и Cow.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос". Естественно, ни собака, ни кошка не говорят "Голос" Они гавкают и мяукают. Соответственно, Вам нужно задать другой метод для классов Cat, Dog и Cow - чтобы кошка мяукала, собака гавкала, а корова говорила "Муу".
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу", "Гав" и "Муу".
-
Обратите внимание: перед методом, который мы переопределяем, пишем "@Override". Это дает понять компилятору, что мы хотим переопределить метод.
Так что же такое полиморфизм
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые мы приведодили выше - это только способы реализации полиморфизма.
Давайте снова посмотрим на определение, которое мы давали в начале статьи:
Полиморфизм - возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования.
Выглядит понятнее, правда? Мы показали, как можно:
-
создавать "одноименные методы" в одном классе ("перегрузка методов") -
или изменить поведение методов родительского класса ("переопределение методов").
Все это - проявления "повышенной гибкости" объектно-ориентированных языков благодаря полиморфизму.
-
Наследование - выделение общих свойств и методов в родительский класс. extends - расширение родительского класса. -
Инкапсуляция - скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры). -
Полиморфизм - это способность метода принимать в качестве аргумента и обрабатывать разные типы информации.
-
(?) иногда выделяют еще Абстракцию - при подходе к задаче отойти от частности (желтый автомобиль пикап с двигателем 3.0) и перейти к более обширному понятию (сущность - автомобиль) - Абстракции.
Класс — это шаблонная конструкция, которая позволяет описать в программе объект, его свойства (атрибуты или поля класса) и поведение (методы класса). Каждый класс имеет своё имя, чтобы в будущем к нему можно было обратиться.
Объект - конкретный экземпляр класса, который имеет свои собственные конкретные значения свойств.
Свойства класса - поле данных класса (переменные, массивы и т.п)
Метод класса - функция, которая описывает то, как сущность выполняет определенные действия.
Перегрузка методов:
- Все методы в Java могут быть перегружены (кроме final)
- Перегруженный в дочернем классе метод, будет вызван для объекта данного класса, вместо метода родительского класса.
- Если метод не был перегружен, то будет вызвана реализация родительского класса.
@Override — проверяет, переопределен ли метод. Вызывает ошибку компиляции / интерпретации, если метод не найден в родительском классе или интерфейсе;
NEW - это оператор, который создает новые объекты класса. Он:
-
выделяет память под объект -
создает объект (вызывает конструктор) -
возвращает ссылку на созданный объект
Конструктор - специальный метод для инициализации объекта во время его создания с помощью оператора new. Если его не описывать отдельно - у класса будет конструктор по умолчанию. От метода отличается тем, что у него нет возвращаемого типа и он называется так же как и класс.
Пакет состоит из 3 составляющих - тип домена (com, edu, ru), имя компании, или фамилия и третья - имя проекта. Для того, чтобы классы не пересекались (конвенция).
Пакеты используются для того, чтобы логически группировать различные классы.
Модификаторы доступа:
-
public - доступно всем -
protected - доступно только внутри пакета и наследникам -
default - доступно только в пакете класса -
private - доступно только внутри класса
ключевое слово super - обращение к родительскому классу.