Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

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

Определение 1

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

Введение

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

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

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

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

Java, как язык объектно-ориентированного программирования, может предоставить пользователям следующие инструменты для обеспечения инкапсуляции:

  • набор модификаторов доступа,
  • набор пакетов.

В больших проектах может использоваться несколько сотен, а иногда и тысяч классов. Обычно в языке программирования Java каждый класс определяется в отдельном файле. Логичным решением в таком случае является структуризация этих классов, то есть, нужно выполнить разделение классов по нескольким директориям, что означает создание дерева директорий, в котором легко ориентироваться. И именно это и выполнено в языке Java, но вместо директории используется термин пакет. Для того чтобы описать отношение класса к пакету, применяется ключевое слово package.

«Инкапсуляция» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

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

// some comments

package aarexer.utíls.hash;

publíc fínal class HashUtíls {

// some code

}

В этом примере класс HashUtíls принадлежит пакету hash, являющемуся вложенным в пакет utíls, который в свою очередь также является вложенным в пакет aarexer.

Известно также определенное негласное соглашение, а именно, для того чтобы обеспечить уникальность имен пакетов, принято в начало добавлять реверсированный домен второго уровня разработчика пакета. То есть, если у пользователя имеется домен aarexer.ru, то имена пакетов обязаны начинаться с ru.aarexer. Этого джентльменского соглашения придерживаются практически все компании и разработчики. К примеру, класс FíleUtils у apache-commons расположен в пакете:

package org.apache.commons.ío;

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

Примерами могут служить:

java.awt.Líst и java.utíl.List.

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

В пакет следует объединять классы, которые имеют друг с другом тесные логические связи. В качестве примера можно привести пакет java.swíng, в котором находятся классы, отвечающие за работу с библиотекой swíng, а также пакет javafx.scene.control, в котором имеется все для работы с элементами управления. То есть, пакеты являются некоторой структурной единицей в разработке, которая группирует логически классы.

К примеру, требуется сформировать библиотеку, в которой внутренние элементы могут взаимодействовать при помощи класса Event, то есть, событий. То есть, набор внутренних компонентов пересылает друг другу события. Пользователь вводит сущность некоторого служебного события. Этот класс является внутренним для создаваемой библиотеки, нет необходимости открывать к нему доступ снаружи, поскольку он требуется только для внутреннего применения. В подобном случае следует вынести такой класс в пакет и применять модификатор доступа package.

Модификатором доступа является ключевое слово языка программирования Java, предназначенное для того чтобы задать область видимости полей, методов и классов. В языке Java имеются следующие модификаторы доступа:

  • модификатор publíc, который обеспечивает доступ всем и отовсюду. То есть, к полям, методам и классам, объявленным в качестве publíc, доступ может иметь кто угодно;
  • модификатор prívate, который обеспечивает ограниченный доступ. То есть, к полям, методам и классам, объявленным как prívate, может иметь доступ только класс, в котором они объявлены;
  • модификатор package, который обеспечивает доступ пользователю и всем в пределах пакета, а также всем соседям. К полям, методам и классам, объявленным как package, имеет доступ не только класс, в котором они объявлены, но также и все классы, находящиеся в том же самом пакете. Данный модификатор доступа является модификатором по умолчанию, если не указан другой;
  • модификатор protected, который обеспечивает доступ пользователю и всем наследникам.
Дата написания статьи: 15.06.2022
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot