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

Інкапсуля́ція по́ля (англ. Encapsulate Field) — прийом рефакторингу, що дозволяє полегшити роботу з даними, покращити модульність частин програми та полегшити її підтримку. Забезпечує зближення даних і поведінки над цими даними.

Проблема

Є публічне поле.
C#

class Person
{
    public string name;
}


C++

class Person
{
public:
    std::string name;
};


Рішення

Зробити поле приватним і створити для нього методи доступу чи властивість.
C#

class Person 
{
    private string name;
 
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}


C++

class Person 
{
private:
    std::string name;

public:
    const std::string &get_name() const
    {
        return name;
    }
    void set_name(const std::string &new_name)
    {
        name = new_name;
    }
};


Причини рефакторингу

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

Переваги

  1. Якщо дані й поведінка якогось компоненту тісно пов'язані між собою і знаходяться в одному місці коду, то набагато простіше буде підтримувати та розвивати цей компонент.
  2. Можна робити якісь складні операції, пов'язані з доступом до полів об'єкту.

Випадки, коли застосувати не можна

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

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

Порядок рефакторингу

  1. Створити властивості (геттер і сеттер) для поля.
  2. Знайти усі звернення до поля. Замінити отримання значення з поля — геттером, а установку нових значень в полі - сеттером.
  3. Після того, як усі звернення до полів замінені, зробити поле приватним.
  4. Виконати компіляцію і тестування.

Подальші кроки

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

Схожі рефакторинги

  • Самоінкапсуляція поля

Бореться з запахом

  • Клас даних

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.