/ / Інкапсуляція - це що таке? Інкапсуляція в програмуванні

Інкапсуляція - це що таке? Інкапсуляція в програмуванні

Інкапсуляція - це одна з трьох основнихособливостей об'єктно-орієнтованого програмування (ООП). Дві інші - поліморфізм і успадкування. Разом вони складають базу ООП, визначальну цілий спектр можливостей написання програм на різних мовах, використовуючи ці три принципи. Об'єктно-орієнтовані мови, в свою чергу, зобов'язані чітко їх дотримуватися.

інкапсуляція це

основи ООП

Об'єктно-орієнтоване програмування стоїть на трьох китах свого світобудови:

  • Поліморфізм, що відповідає на питання, як певну мову програмування трактує об'єкти, що мають між собою зв'язок, подібним чином.
  • Спадкуванні, що дає відповідь, яким чином відбувається стимуляція використання коду багаторазово.
  • Інкапсуляції, що є відповіддю на питання, як відбувається приховування реалізації, а значить і збереження цілісності даних.

Термінологія

Інкапсуляція (програмування) - цевикористання модифікаторів доступу з метою приховування частин програмного коду від кінцевого користувача. Під ним, в свою чергу, мається на увазі розробник або успадковує об'єкт.

поняття інкапсуляція

Суть поняття "інкапсуляція"

Дефініція визначає, що під инкапсуляциеймається на увазі приховування всього або частини програмного коду. Суть же поняття "інкапсуляція" полягає в маніпулюванні модифікаторами доступу. Це означає, що розробник сам вирішує, які властивості, методи і класи будуть відкриті класу-клієнта, а які - приховані.

модифікатори доступу

інкапсуляція програмування
Існують такі модифікатори доступу, якими, в числі інших, здатна маніпулярівать інкапсуляція (програмування Java):

  • public ( "паблік" - публічний, відкритий, доступ) - загальний доступ як для поточних об'єктів і класів, так і для зовнішнього світу;
  • private ( "прайват" - приватний, приватний, прихований доступ) - закритий доступ, суть якого повністю протилежна попередньому. Забезпечує доступ тільки з поточного класу;
  • protected ( "протектед" - захищений, напівсхована, доступ) - доступ для поточного класу і похідних від нього;
  • за замовчуванням - Незазначені модифікатор доступу має на увазі, що поле / метод видно для всього поточного пакета класів.

У мові C # ( "Сі Шарп"), крім зазначених (виключаючи останній), є ще такі модифікатори:

  • internal ( "інтернал" - внутрішній доступ) - загальнодоступність в поточному зборі, закритий доступ по всіх інших випадків;
  • internal protected ( "інтернал протектед" - внутрішній захищений доступ) - об'єднання двох модифікаторів в один, в якому проявляються властивості обох з них.

роль инкапсуляции

Механізм інкапсуляції дозволяє виключити зовнішній вплив на програмний код і невірне використання закладених в ньому даних. Це відбувається за рахунок об'єднання коду і даних в одне ціле.

інкапсуляція програмування приклад

Об'єкт і інкапсуляція

Об'єднання реалізації програмного модуля іданих, закладених в коді, в програмуванні називається об'єктом. Суть зв'язку його з инкапсуляцией полягає в тому, що саме така методика дозволяє підтримувати і забезпечувати цілісне функціонування розглянутого механізму.

перевага инкапсуляции

Інкапсуляція - це спосіб спростити процес кодування. Численні рядки коду залишаються "за лаштунками", а в основному класі робота йде з екземплярами об'єктів.

Ідея захисту даних

Інкапсуляція - це також механізм, якийреалізує ідею захисту даних. Програмна логіка об'єктно-орієнтованого програмування побудована на базі того, що велика частина даних буде прихована модифікатором доступу private (приватний, приватний) або protected (захищений). Зовнішній світ, клієнт випадково або навмисно не зможуть зашкодити реалізації програмного модуля. Оскільки насправді зробити це дуже легко навіть не навмисно, інкапсуляція - це дуже хороший принцип.

одиниці инкапсуляции

Клас, як основна одиниця інкапсуляції,описує дані і містить код, який цими даними здатний оперувати. Також він є базою для побудови об'єкта. Останній, в свою чергу, представлений як екземпляр класу.

інкапсуляція програмування java
Використовується також наступна термінологія:

  • члени - це код і дані, що входять в клас;
  • поля, або змінні екземпляра - так називаються дані, які визначає клас;
  • функції-члени - в них міститься сам код. Функції-члени - загальна назва. Окремий випадок - методи.

Інкапсуляція на конкретному прикладі

інкапсуляція програмування це

Інкапсуляція (програмування) приклад:

* Примітка:

description - це опис методу / властивості / змінної, тобто коментування того, що, власне, відбувається в програмі. Продемонстровано за допомогою відкриваються / закриваються тегів

using System;

namespace OOPLibrary.Auto

{

///

/// Даний клас призначений для того, щоб описувати властивості і дії автомобіля

///

public class Auto

{

///

/// створюється змінна для того, щоб в неї записувати, скільки автомобілю років, так як зовнішнє втручання в це властивість розробник вважає зайвим

/// воно позначається модифікатором private, тобто закритий, приватний доступ (див. Опис вище).

///

private int _age;

///

/// булевскому змінна (тільки два можливих значення - або так, або ні), яка описує, чи рухається автомобіль на даний момент

/// Вона також не повинна бути відкрита для кінцевого користувача, ким би він не був. Тому і цієї змінної присвоюється закритий модифікатор доступу "прайват"

///

private bool _isMoving;

///

/// В даній строкової змінної повинна міститися інформація про колір автомобіля. Він може зазнавати змін з боку зовнішнього впливу

/// тому для Кольори обраний модифікатор відкритого доступу "паблік".

///

public string Color;

///

/// В даному конкретному випадку допускаємо, що ім'я автомобіля теж можна міняти

/// присвоюється модифікатор паблік (відкритий доступ для всіх, незалежно від класу або збірки).

///

public string Name;

///

/// Відкривається конструктор класу і все властивості, виражені змінними і задані трохи раніше, отримують свої значення

///

public Auto ()

{

_age = 5;

_isMoving = false;

Color = "Фіолетовий";

Name = "Шкода Октавіа";

}

///

/// Метод реалізує повернення значення віку авто. Навіщо це потрібно?

/// закритий модифікатор доступу робить його можливим для зміни клієнтом.

///

/// Повертає вік автомобіля.

public string GetAge ()

{

return "На даний момент обраної машині" + _age + "років.";

}

///

/// Якщо автомобіль не рухається, цей методреалізує старт руху. Виконується перевірка змінної, помилились, в якому стані знаходиться автомобіль (їде він чи ні), і, в залежності від результатів, виконується відповідна дія / виводиться відповідне повідомлення.

///

public void Start ()

{

if (_isMoving)

{

Console.WriteLine ( "Рух вже було розпочато");

}

else

{

_isMoving = true;

Console.WriteLine ( "На старт, увага .. Вперед! Поїхали!");

}

}

///

/// Якщо рух було розпочато, то цей метод його зупиняє. Та ж програмна логіка, що й у попередньому розглянутому випадку.

///

public void Stop ()

{

if (_isMoving)

{

_isMoving = false;

Console.WriteLine ( "Стоп, машина");

}

else

{

Console.WriteLine ( "Помилка. Автомобіль і так стоїть на місці, не рухається");

}

}

///

/// Здійснюється поворот наліво, якщо має місце руху автомобіля

///

public void MoveLeft ()

{

if (_isMoving)

{

Console.WriteLine ( "Здійснено поворот наліво");

}

else

{

Console.WriteLine ( "Помилка. Автомобіль стоїть на місці. Функція повороту на даний момент недоступна");

}

}

///

/// Аналогічний метод з поворотом направо

///

public void MoveRight ()

{

if (_isMoving)

{

Console.WriteLine ( "Поворот направо був здійснений успішно");

}

else

{

Console.WriteLine ( "Помилка. Автомобіль ще не рухався з місця. Поворот направо є на даний момент дією, неможливим для виконання.");

}

}

}

}