Інкапсуляція - це одна з трьох основнихособливостей об'єктно-орієнтованого програмування (ООП). Дві інші - поліморфізм і успадкування. Разом вони складають базу ООП, визначальну цілий спектр можливостей написання програм на різних мовах, використовуючи ці три принципи. Об'єктно-орієнтовані мови, в свою чергу, зобов'язані чітко їх дотримуватися.
Об'єктно-орієнтоване програмування стоїть на трьох китах свого світобудови:
Інкапсуляція (програмування) - цевикористання модифікаторів доступу з метою приховування частин програмного коду від кінцевого користувача. Під ним, в свою чергу, мається на увазі розробник або успадковує об'єкт.
Дефініція визначає, що під инкапсуляциеймається на увазі приховування всього або частини програмного коду. Суть же поняття "інкапсуляція" полягає в маніпулюванні модифікаторами доступу. Це означає, що розробник сам вирішує, які властивості, методи і класи будуть відкриті класу-клієнта, а які - приховані.
У мові C # ( "Сі Шарп"), крім зазначених (виключаючи останній), є ще такі модифікатори:
Механізм інкапсуляції дозволяє виключити зовнішній вплив на програмний код і невірне використання закладених в ньому даних. Це відбувається за рахунок об'єднання коду і даних в одне ціле.
Об'єднання реалізації програмного модуля іданих, закладених в коді, в програмуванні називається об'єктом. Суть зв'язку його з инкапсуляцией полягає в тому, що саме така методика дозволяє підтримувати і забезпечувати цілісне функціонування розглянутого механізму.
Інкапсуляція - це спосіб спростити процес кодування. Численні рядки коду залишаються "за лаштунками", а в основному класі робота йде з екземплярами об'єктів.
Інкапсуляція - це також механізм, якийреалізує ідею захисту даних. Програмна логіка об'єктно-орієнтованого програмування побудована на базі того, що велика частина даних буде прихована модифікатором доступу private (приватний, приватний) або protected (захищений). Зовнішній світ, клієнт випадково або навмисно не зможуть зашкодити реалізації програмного модуля. Оскільки насправді зробити це дуже легко навіть не навмисно, інкапсуляція - це дуже хороший принцип.
Клас, як основна одиниця інкапсуляції,описує дані і містить код, який цими даними здатний оперувати. Також він є базою для побудови об'єкта. Останній, в свою чергу, представлений як екземпляр класу.
Інкапсуляція (програмування) приклад:
* Примітка:
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 ( "Помилка. Автомобіль ще не рухався з місця. Поворот направо є на даний момент дією, неможливим для виконання.");
}
}
}
}
</ P>