Что такое инкапсуляция в java
Перейти к содержимому

Что такое инкапсуляция в java

  • автор:

27. Java – Инкапсуляция

Инкапсуляция – это одна из четырёх фундаментальных концепций ООП. Названия оставшихся трёх: наследование, полиморфизм, абстракция.

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

Для достижения инкапсуляции в Java:

  • Объявите переменные класса как private.
  • Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.

Пример

Ниже приведён пример процесса инкапсуляции в Java:

/* File name : EncapTest.java */ public class EncapTest < private String name; private String idNum; private int age; public int getAge() < return age; >public String getName() < return name; >public String getIdNum() < return idNum; >public void setAge(int newAge) < age = newAge; >public void setName(String newName) < name = newName; >public void setIdNum(String newId) < idNum = newId; >> 

Публичные методы setXXX() и getXXX() являются точками доступа переменных экземпляра класса EncapTest. Обычно эти методы упоминаются как геттеры и сеттеры. Следовательно, любой класс, который хочет получить доступ к переменным, должен получить к ним доступ через эти геттеры и сеттеры.

Доступ к переменным класса EncapTest можно получить следующей программой:

/* File name : RunEncap.java */ public class RunEncap < public static void main(String args[]) < EncapTest encap = new EncapTest(); encap.setName("Олег"); encap.setAge(28); encap.setIdNum("12343ms"); System.out.print("Имя: " + encap.getName() + ", возраст: " + encap.getAge()); >> 

Мы получим следующий результат:

Имя: Олег, возраст: 28 

Преимущества инкапсуляции

  • Поля класса можно сделать только для чтения или только для записи.
  • Класс может иметь полный контроль над тем, что хранится в его полях.

Оглавление

  • 1. Java – Самоучитель для начинающих
  • 2. Java – Обзор языка
  • 3. Java – Установка и настройка
  • 4. Java – Синтаксис
  • 5. Java – Классы и объекты
  • 6. Java – Конструкторы
  • 7. Java – Типы данных и литералы
  • 8. Java – Типы переменных
  • 9. Java – Модификаторы
  • 10. Java – Операторы
  • 11. Java – Циклы и операторы цикла
  • 11.1. Java – Цикл while
  • 11.2. Java – Цикл for
  • 11.3. Java – Улучшенный цикл for
  • 11.4. Java – Цикл do..while
  • 11.5. Java – Оператор break
  • 11.6. Java – Оператор continue
  • 12. Java – Операторы принятия решений
  • 12.1. Java – Оператор if
  • 12.2. Java – Оператор if..else
  • 12.3. Java – Вложенный оператор if
  • 12.4. Java – Оператор switch..case
  • 12.5. Java – Условный оператор (? 🙂
  • 13. Java – Числа
  • 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
  • 13.2. Java – Метод compareTo()
  • 13.3. Java – Метод equals()
  • 13.4. Java – Метод valueOf()
  • 13.5. Java – Метод toString()
  • 13.6. Java – Метод parseInt()
  • 13.7. Java – Метод Math.abs()
  • 13.8. Java – Метод Math.ceil()
  • 13.9. Java – Метод Math.floor()
  • 13.10. Java – Метод Math.rint()
  • 13.11. Java – Метод Math.round()
  • 13.12. Java – Метод Math.min()
  • 13.13. Java – Метод Math.max()
  • 13.14. Java – Метод Math.exp()
  • 13.15. Java – Метод Math.log()
  • 13.16. Java – Метод Math.pow()
  • 13.17. Java – Метод Math.sqrt()
  • 13.18. Java – Метод Math.sin()
  • 13.19. Java – Метод Math.cos()
  • 13.20. Java – Метод Math.tan()
  • 13.21. Java – Метод Math.asin()
  • 13.22. Java – Метод Math.acos()
  • 13.23. Java – Метод Math.atan()
  • 13.24. Java – Метод Math.atan2()
  • 13.25. Java – Метод Math.toDegrees()
  • 13.26. Java – Метод Math.toRadians()
  • 13.27. Java – Метод Math.random()
  • 14. Java – Символы
  • 14.1. Java – Метод Character.isLetter()
  • 14.2. Java – Метод Character.isDigit()
  • 14.3. Java – Метод Character.isWhitespace()
  • 14.4. Java – Метод Character.isUpperCase()
  • 14.5. Java – Метод Character.isLowerCase()
  • 14.6. Java – Метод Character.toUpperCase()
  • 14.7. Java – Метод Character.toLowerCase()
  • 14.8. Java – Метод Character.toString()
  • 15. Java – Строки
  • 15.1. Java – Метод charAt()
  • 15.2. Java – Метод compareTo()
  • 15.3. Java – Метод compareToIgnoreCase()
  • 15.4. Java – Метод concat()
  • 15.5. Java – Метод contentEquals()
  • 15.6. Java – Метод copyValueOf()
  • 15.7. Java – Метод endsWith()
  • 15.8. Java – Метод equals()
  • 15.9. Java – Метод equalsIgnoreCase()
  • 15.10. Java – Метод getBytes()
  • 15.11. Java – Метод getChars()
  • 15.12. Java – Метод hashCode()
  • 15.13. Java – Метод indexOf()
  • 15.14. Java – Метод intern()
  • 15.15. Java – Метод lastIndexOf()
  • 15.16. Java – Метод length()
  • 15.17. Java – Метод matches()
  • 15.18. Java – Метод regionMatches()
  • 15.19. Java – Метод replace()
  • 15.20. Java – Метод replaceAll()
  • 15.21. Java – Метод replaceFirst()
  • 15.22. Java – Метод split()
  • 15.23. Java – Метод startsWith()
  • 15.24. Java – Метод subSequence()
  • 15.25. Java – Метод substring()
  • 15.26. Java – Метод toCharArray()
  • 15.27. Java – Метод toLowerCase()
  • 15.28. Java – Метод toString()
  • 15.29. Java – Метод toUpperCase()
  • 15.30. Java – Метод trim()
  • 15.31. Java – Метод valueOf()
  • 15.32. Java – Классы StringBuilder и StringBuffer
  • 15.32.1. Java – Метод append()
  • 15.32.2. Java – Метод reverse()
  • 15.32.3. Java – Метод delete()
  • 15.32.4. Java – Метод insert()
  • 15.32.5. Java – Метод replace()
  • 16. Java – Массивы
  • 17. Java – Дата и время
  • 18. Java – Регулярные выражения
  • 19. Java – Методы
  • 20. Java – Потоки ввода/вывода, файлы и каталоги
  • 20.1. Java – Класс ByteArrayInputStream
  • 20.2. Java – Класс DataInputStream
  • 20.3. Java – Класс ByteArrayOutputStream
  • 20.4. Java – Класс DataOutputStream
  • 20.5. Java – Класс File
  • 20.6. Java – Класс FileReader
  • 20.7. Java – Класс FileWriter
  • 21. Java – Исключения
  • 21.1. Java – Встроенные исключения
  • 22. Java – Вложенные и внутренние классы
  • 23. Java – Наследование
  • 24. Java – Переопределение
  • 25. Java – Полиморфизм
  • 26. Java – Абстракция
  • 27. Java – Инкапсуляция
  • 28. Java – Интерфейсы
  • 29. Java – Пакеты
  • 30. Java – Структуры данных
  • 30.1. Java – Интерфейс Enumeration
  • 30.2. Java – Класс BitSet
  • 30.3. Java – Класс Vector
  • 30.4. Java – Класс Stack
  • 30.5. Java – Класс Dictionary
  • 30.6. Java – Класс Hashtable
  • 30.7. Java – Класс Properties
  • 31. Java – Коллекции
  • 31.1. Java – Интерфейс Collection
  • 31.2. Java – Интерфейс List
  • 31.3. Java – Интерфейс Set
  • 31.4. Java – Интерфейс SortedSet
  • 31.5. Java – Интерфейс Map
  • 31.6. Java – Интерфейс Map.Entry
  • 31.7. Java – Интерфейс SortedMap
  • 31.8. Java – Класс LinkedList
  • 31.9. Java – Класс ArrayList
  • 31.10. Java – Класс HashSet
  • 31.11. Java – Класс LinkedHashSet
  • 31.12. Java – Класс TreeSet
  • 31.13. Java – Класс HashMap
  • 31.14. Java – Класс TreeMap
  • 31.15. Java – Класс WeakHashMap
  • 31.16. Java – Класс LinkedHashMap
  • 31.17. Java – Класс IdentityHashMap
  • 31.18. Java – Алгоритмы Collection
  • 31.19. Java – Iterator и ListIterator
  • 31.20. Java – Comparator
  • 32. Java – Дженерики
  • 33. Java – Сериализация
  • 34. Java – Сеть
  • 34.1. Java – Обработка URL
  • 35. Java – Отправка Email
  • 36. Java – Многопоточность
  • 36.1. Java – Синхронизация потоков
  • 36.2. Java – Межпоточная связь
  • 36.3. Java – Взаимная блокировка потоков
  • 36.4. Java – Управление потоками
  • 37. Java – Основы работы с апплетами
  • 38. Java – Javadoc

Что такое инкапсуляция в java

«»» То же и с автомобилем. Неважно, что там происходит у него внутри. Главное — при нажатии правой педали автомобиль едет вперед, а при нажатии левойтормозит. «»» Автор видать на картинге часто гоняет. (:

partiec Уровень 33
27 декабря 2022

В книгах советских времен можно вычитать типа: — Мы с другом ходили на завод пить газировку из автомата. или — Мой дед — литейщик, мог выпить за раз литр ситро! статья в этом стиле ����

Blynchik Уровень 51
16 мая 2022
где-то читал, для чего нужны капсулы из первой картинки
Aleksei Reinsalu Уровень 19
28 ноября 2021

Ок. Либо вообще любое сокрытие методов или данных, либо соединяем данные и методы для этих данных в одном флаконе. Какое умное слово Инкапсуляция однако..

Сообщество

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Подписывайтесь
Язык интерфейса
«Программистами не рождаются» © 2024 JavaRush
Скачивайте наши приложения
«Программистами не рождаются» © 2024 JavaRush

Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.

Руководство по Java Core. Инкапсуляция.

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

Таким образом, мы, как бы, “прячем” переменные от остальных классов, что облегчает работу с ними в дальнейшем.

В ящике программирования Java, инкапсуляция достигается путём:

  • Объявления переменной класса приватной (модификатор доступа private)
  • Создание публичных (модификатор доступа public) методов для получения и изменения значения переменной.

Для понимания того, как это работает на практике рассмотрим пример простого приложения.

 public class Company < private String companyName; private String companySphere; private String projectName; public String getCompanyName() < return companyName; >public void setCompanyName(String companyName) < this.companyName = companyName; >public String getCompanySphere() < return companySphere; >public void setCompanySphere(String companySphere) < this.companySphere = companySphere; >public String getProjectName() < return projectName; >public void setProjectName(String projectName) < this.projectName = projectName; >@Override public String toString() < return "=============================\n" + "Company Name: " + companyName + "\nSphere:" + companySphere + "\nProject Name: " + projectName + "\n============================\n"; >> 
 public class CompanyRunner < public static void main(String[] args) < Company uksatse = new Company(); uksatse.setCompanyName("UkSATSE"); uksatse.setCompanySphere("Aviation"); uksatse.setProjectName("SkybleLib"); System.out.println("UkSATSE info:"); System.out.println(uksatse); >> 

В результате работы программы мы получим следующий результат:

 /*Some system messages*/ UkSATSE info: ============================= Company Name: UkSATSE Sphere:Aviation Project Name: SkybleLib ============================ 

Как мы видим, доступ к переменным класса Company из класса CompanyRunner возможен только с помощью методов getXXX и setXXX.

Инкапсуляция даёт нам следующие преимущества:

  • Класс имеет полный контроль над всеми своими переменными.
  • Другим классам, которые будут использовать данный класс не интересно, как именно хранятся данные в классе. В случае, если нам будет необходимо изменить тип данных, то нам не придётся вносить изменения в другие классы.
  • Мы можем делать поля только для чтения или только для записи.

В этом уроке мы более глубоко изучили что такое инкапсуляция и как она применяется в языке программирования Java.

В следующем уроке мы изучим такое понятие в ООП как абстракция.

Что такое инкапсуляция в java

Скрытие информации в Java

Как мы уже говорили, вы также можете использовать концепцию инкапсуляции для реализации механизма сокрытия информации. Этот подход, как и абстракция, один из наиболее часто используемых механизмов в Java. Его примеры можно найти почти во всех хорошо реализованных Java-классах. Механизм сокрытия делает атрибуты класса недоступными извне.

��☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»

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

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

  1. private.
  2. no modifier.
  3. protected.
  4. public.

Рассмотрим более детально каждый из них и поговорим, когда вам следует их использовать.

Модификатор private

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

В нашем примере мы используем его, чтобы ограничить доступ ко всем атрибутам и методам brewEspresso и brewFilter . Эти атрибуты и методы должны использоваться только в классе Machine и не являются частью общедоступного API. Вначале это может показаться немного запутанным. Однако очень полезно, когда классы в вашем пакете реализуют четко определенный набор логики. Это также удобно, если вы хотите управлять API, доступным для классов за пределами этого пакета. Впоследствии вы можете использовать видимость пакета для реализации метода, используемого только классами в этом пакете.

Модификатор no modifier

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

Модификатор protected

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

Модификатор public

Доступ к методам и атрибутам, использующим модификатор public , можно получить как в текущем классе, так и во всех других классах.

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

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

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

Пример 2

Здесь наглядно демонстрируется механизм сокрытия информации, описывающей напиток, приготовленный с помощью нашей кофемашины.

public class Coffee < private CoffeeSelection selection; private double quantity; public Coffee (CoffeeSelection selection, double quantity) < this.selection = selection; this.quantity = quantity; >public CoffeeSelection getSelection() < return selection; >public double getQuantity() < return quantity; >public void setQuantity(double quantity) throws CoffeeException < if (quantity >= 0.0) < this.quantity = quantity; >else < throw new CoffeeException("Количество должно быть >= 0.0"); > > > 

Класс Coffee использует два закрытых атрибута для хранения информации: CoffeeSelection и quantity . Модификатор доступа private делает оба атрибута недоступными для других классов в том же или других пакетах. Если вы хотите получить информацию о текущем состоянии объекта, вы можете вызвать один из общедоступных методов.

Метод getSelection обеспечивает доступ для чтения к атрибуту selection . Он представляет тип кофе, приготовленный кофемашиной. Как видно из фрагмента кода, мы не реализовали метод set для этого атрибута, поскольку мы не можем изменить сорт кофе после того, как он заварен. Доступное количество напитка меняется со временем. После каждого глотка в вашей чашке остается немного меньше. Поэтому мы реализовали метод получения и установки для атрибута quantity .

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

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

Материалы по теме

  • ☕ Учебник по Java: cтатический и динамический полиморфизм
  • ☕ Разбираем на простых примерах: наследование в Java

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

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