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

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

  • автор:

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

Михаил Вотяков Уровень 23

11 апреля 2024

«То же и с автомобилем. Неважно, что там происходит у него внутри. Главное — при нажатии правой педали автомобиль едет вперед, а при нажатии левой — тормозит.» — На самом деле, очень важно понимать, что происходит внутри, иначе мы встречаем ситуации когда «ОЙ. Я перепутала педали», или «я не могу работать, мне нужен новый компухтер, потому что на экране написано нажмите ОК чтобы продолжить» *Последнее это чисто сисадминская боль»

Кофе-брейк #166. Зачем нужна инкапсуляция в Java? Три способа использования функции Print в Java

Кофе-брейк #166. Зачем нужна инкапсуляция в Java? Три способа использования функции Print в Java - 1

Источник: Use My Notes Из этой публикации вы узнаете, зачем нужна инкапсуляция в объектно-ориентированном программировании. В статье рассмотрена концепция ее работы и способы реализации на языке Java.

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

Инкапсуляция — это концепция в языке Java, которая объединяет данные и методы, работающие с ними, в единое целое — в одну упаковку или оболочку. Проще говоря, инкапсуляция объединяет переменные и методы в одном классе.

Зачем нам нужна инкапсуляция в Java?

  • Чтобы код оставался чистым и организованным.
  • Для лучшего контроля доступа к инкапсулированным членам.
  • Чтобы лучше понимать код.
 class MyBankAccount < private int acc_number; private int acc_balance; public MyBankAccount(int acc_number, int acc_balance) < this.acc_number = acc_number; this.acc_balance = acc_balance; >public int printAccountBalance() < System.out.println("Balance: " + acc_balance); >public int printAccountNumber() < System.out.println("Account Number: " + acc_number); >public void depositMoney(int money) < acc_balance = acc_balance + money; >> 

Здесь у нас есть класс MyBankAccount с конструктором, двумя переменными и тремя методами. Эти члены класса связаны друг с другом, поэтому они находятся в одном классе. Класс MyBankAccount инкапсулирует или объединяет содержимое класса, и весь этот код действует как единое целое. Теперь, просто взглянув на имя класса, то есть на “MyBankAccount”, мы можем предположить, что у него есть баланс счета и номер счета (которые он имеет в качестве переменных). Банковские счета связаны с денежными транзакциями, такими как внесение денег, распечатка остатков на счетах и ​​так далее. Эти транзакции выполняются с помощью методов, соответствующих вышеприведенному классу. Как мы видим, это улучшило читаемость и поддержку кода. Предположим, у нас есть 100 классов, и каждый класс имеет от 5 до 10 методов и почти такое же количество переменных. С инкапсуляцией нам намного проще найти определенные методы или переменные, просто предположив, к какому классу они могут относиться.

Java-университет

Как концепция инкапсуляции может помочь в работе?

  • Помогает организовать код лучше и понятнее.
  • Позволяет прилагать меньше усилий при сопровождении большого количества кода.
  • Снижает сложность управления кодом.
  • Разделяет код на части.
  • Повышает читабельность.

А если бы инкапсуляции не было?

  • Код может стать неорганизованным или беспорядочным.
  • Увеличивается сложность поддержки кода.
  • Усложняется отладка кода.
  • Снижается читабельность.

Три способа использования функции Print в Java

Кофе-брейк #166. Зачем нужна инкапсуляция в Java? Три способа использования функции Print в Java - 2

Источник: FreeCodeCamp Далеко не все разработчики знают о трех разных функциях/операторах Print в Java. Автор этой статьи расскажет о них и покажет, как они работают на примерах.

Как использовать функцию println() в Java

Функция println() добавляет новую строку после печати значения/данных внутри нее. Здесь суффикс ln работает как символ новой строки \n . Давайте посмотрим на пример кода:

 public class Main < public static void main(String[] args) < System.out.println("Hello World!"); >> 

Если пока не очень понятно, что именно происходит, то вкратце это можно объяснить так. Когда вы печатаете только одну строку, то получаете на выводе вот что:

Hello World!

А теперь, если вы попытаетесь напечатать несколько разных выражений, используя println() , то ясно видна разница!

 public class Main < public static void main(String[] args) < System.out.println("Hello World!"); System.out.println("Welcome to freeCodeCamp"); >> 

Как можно заметить, после выполнения первого оператора печати добавляется один символ новой строки ( \n ). Таким образом, вы получаете второй оператор печати Welcome to freeCodeCamp в следующей строке. Весь вывод будет таким, как показано ниже:

Hello World! Welcome to freeCodeCamp

Но нет ли способа избежать автоматически сгенерированного символа новой строки в функции print ? Есть! В этом случае вам нужно использовать оператор print() .

Как использовать функцию print() в Java

Для демонстрации этой функции позвольте мне использовать пример, который поможет сразу увидеть разницу:

 public class Main < public static void main(String[] args) < System.out.print("Hello World!"); System.out.print("Welcome to freeCodeCamp"); >> 

Как вы видите, я использовал print вместо использования println , как раньше. Оператор print не добавляет дополнительный \n в качестве символа новой строки после выполнения задачи в нем. То есть, вы не получите еще одну новую строку на выводе, а будет примерно вот так:

Hello World! Welcome to freeCodeCamp
Если хотите, то вы можете решить проблему \n , как показано ниже:

 public class Main < public static void main(String[] args) < System.out.print("Hello World!\n"); System.out.print("Welcome to freeCodeCamp"); >> 

На этот раз \n будет работать как символ новой строки, и вы получите вторую строку. Вот результат:
Hello World! Welcome to freeCodeCamp
Вы также можете распечатать две строки, используя только один оператор print , как показано ниже:

 public class Main < public static void main(String[] args) < System.out.print("Hello World!\nWelcome to freeCodeCamp"); >> 

Вывод будет таким же:
Hello World! Welcome to freeCodeCamp

Как использовать функцию printf() в Java

Функция printf() работает как форматированная функция print . Чтобы лучше понять, вот два сценария: Сценарий 1 . Ваш друг Томми хочет, чтобы вы передали ему PDF-файл по электронной почте. Вы можете просто создать электронное письмо, указать тему по своему усмотрению (например, привет Томми, это Джим). Вы даже можете ничего не писать в основной части электронного письма и отправить пустой e-mail лишь прикрепив PDF-файл. Сценарий 2 . Вы не смогли вчера прийти на занятие. Ваш преподаватель попросил вас предоставить причины отсутствия с доказательствами и отправить документы по электронной почте. Здесь вы не можете отправить письмо своему профессору так, как вы это делали для своего друга Томми. Вам нужно соблюсти некоторую формальность и надлежащий этикет. То есть, в письме вы должны указать формальную тему и написать необходимую информацию в основной части. И последнее, но не менее важное: вы должны прикрепить документ к своему электронному письму после переименования его в соответствии с надлежащим соглашением об именах. Речь о том, что вам нужно отформатировать свою электронное письмо так, как от вас требуют. Функция printf() помогает нам реализовать второй сценарий. Если мы хотим указать какой-либо конкретный формат/стиль печати, мы используем именно функцию printf() . Приведу краткий пример, как это работает:

 public class Main < public static void main(String[] args) < double value = 2.3897; System.out.println(value); System.out.printf("%.2f" , value); >> 

Здесь я объявляю переменную типа double с именем value и присваиваю ей значение 2.3897 . Теперь, когда я использую функцию println() , она печатает все значение с четырьмя цифрами после точки счисления. Вот результат:

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

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

Привет! Это статья про инкапсуляцию — один из принципов ООП. Если Вы не знаете, что такое принципы ООП — почитайте эту статью:

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

В программировании очень важна безопасность. В ООП безопасность обеспечивается по-своему — с помощью принципа инкапсуляции (с англ. «encapsulation»). Инкапсуляцию можно перевести как «положить что-то во что-то», или для простоты «обернуть в капсулу» ��

С помощью инкапсуляции мы защищаем данные от неправомерного использования.

Если еще проще

Как не удивительно, мы можем видеть инкапсуляцию и в повседневной жизни. Например, Ваше имя и фамилия находится в относительно свободном доступе — они известны всем Вашим знакомым. Но Вы не хотели бы, чтобы кто-то знал номер Вашей кредитки и ее пинкод? Если проводить аналогию с методами, Вы не хотели бы, чтобы кто-то, например, ездил на Вашей машине, спал в Вашей кровати и ел Вашу кашу? �� Даже свои секреты мы доверяем ограниченному числу людей — можно сказать регулируем права доступа.

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

Точно так же и в Java — мы пользуемся разными средствами для обеспечения принципа инкапсуляции. Но как же мы это делаем?

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

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

  • Модификаторы доступа (Access modifiers)
  • Геттеры и Сеттеры (Getters and Setters)

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

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

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

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

  • public — «публичный, доступный всем»
  • default — «по умолчанию». Когда мы не пишем модификатора доступа (как мы это делали в наших предыдущих уроках), он по умолчанию имеет значение default. Данные с этим модификатором видны в пределах package.
  • protected — «защищенный». На самом деле это то же самое, что и default, только доступ имеют еще и классы-наследники.
  • private — «частный, личный». Такие данные видны только самому классу.

Модификаторы доступа пишутся перед названиями переменных, методов и даже классов:

Как это обеспечивает безопасность? Давайте попробуем создать класс, в котором будет только одна переменная — String s. Допустим она имеет модификатор public:

Что такое инкапсуляция в Java, Python и C++

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

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

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

Для начала постараемся объяснить, что такое инкапсуляция простыми словами. Мысленно перенесемся примерно лет на 140 в прошлое. Тогда автомобили еще были в диковинку, а первые образцы таких транспортных средств с паровыми моторами вызывали много критических комментариев.

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

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

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

Работа всех деталей скрыта от водителя, который просто нажимает на акселератор и может не иметь никакого представления о том, что в этом момент происходит с инжектором или дросселем. Это действительно можно назвать ощутимым прогрессом. Благодаря тому, что все процессы, которые происходят внутри узлов авто, скрыты, управление транспортным средством является достаточно простой задачей.

Чтобы справиться с ней, не нужно быть инженером или опытным механиком. Зачем мы рассматриваем историю автомобиля? Сокрытие всего происходящего внутри механизмов и есть инкапсуляция. Этот термин используется в самых разных областях. Мы же разберемся, что такое инкапсуляция в программировании. В этом случае речь идет о свойстве системы, позволяющем объединить данные и методы, работающие с ними, в классе и скрыть детали.

Это понятие имеет тесную связь с интерфейсом класса. Практически все элементы, которые не входят в интерфейс, подлежат инкапсуляции в классе.

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

Что такое инкапсуляция, и почему она так важна? Возьмём в качестве примера код масштабного проекта, который весит в совокупности гигабайт. В нем все может быть сильно взаимосвязано между собой. А теперь вопрос: получится ли проанализировать такой код? Представим, что такая возможность есть, но, судя по всему, от преобразования каждого из имеющихся методов будет зависеть уровень стабильности, который в данном случае будет снижен.

Узнай, какие ИТ — профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов
Исполнительный директор Geekbrains

Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.

Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains

Павел Симонов
Исполнительный директор Geekbrains

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Получить подборку бесплатно
Уже скачали 27958

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

Инкапсуляция представляет собой выделение отдельных элементов и позволяет поместить масштабные объемы кода в отдельное хранилище. «Разделяй и властвуй» – эта известная с древних времен мудрость применима и в цифровой сфере. Инкапсуляция способна обезопасить от неполадок. Так, если клавиша клавиатуры будет сломана (она представляет собой инкапсулированный код), компьютер не остановит свою работу.

Числом открытых связей между объектом Х и другими элементами измеряется легкость кода. Учитывая многочисленные внутренние переплетения, можно говорить о сложности восприятия. Наделить объект Х объективным наименование будет даже не так просто, ведь он включает достаточно много различных данных о себе.

Не только в командах private и protected проявляется инкапсуляция. Безо всяких опасений создавайте четырёхъярусные алгоритмы внутри метода класса, ведь он инкапсулирует в себе алгоритм и переменные.

При чтении нечеткого алгоритма программист, нуждающийся в классе, обратит внимание на содержимое метода, а не на его наименование. Это также инкапсуляция, в действие приведен принцип сокрытия. Для программиста не имеет значения внутреннее содержание, однако он представляет, как все взаимодействует.

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

Отличие инкапсуляции от сокрытия

Теперь поговорим о том, что такое инкапсуляция данных и чем она отличается от сокрытия.

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

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

Для нас главное понимать, как получить нужный напиток путем нажатия нескольких клавиш. А то, как устроен автомат внутри, не имеет никакого значения.

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

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

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

Существуют методы регулирования доступа к имеющимся сведениям, среди которых:

  • Ключевые слова доступа (Access modifiers).
  • Геттеры и Сеттеры (Getters and Setters).

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

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