Інкапсуля́ція по́ля (англ. Encapsulate Field) — прийом рефакторингу, що дозволяє полегшити роботу з даними, покращити модульність частин програми та полегшити її підтримку. Забезпечує зближення даних і поведінки над цими даними.
Проблема
Є публічне поле.
C#
class Person { public string name; }
class Person { public: std::string name; };
Рішення
Зробити поле приватним і створити для нього методи доступу чи властивість.
C#
class Person { private string name; public string Name { get { return name; } set { name = value; } } }
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; } };
Причини рефакторингу
Одним із принципів об'єктного програмування є інкапсуляція або можливість приховання даних об'єкту. Інакше всі дані об'єктів були б публічними, а інші об'єкти могли б отримувати та модифікувати дані об'єкту без його відома. При цьому розділяються дані та поведінка, яка пов'язана з цими даними, погіршується модульність частин програми та ускладнюється її підтримка.
Переваги
- Якщо дані й поведінка якогось компоненту тісно пов'язані між собою і знаходяться в одному місці коду, то набагато простіше буде підтримувати та розвивати цей компонент.
- Можна робити якісь складні операції, пов'язані з доступом до полів об'єкту.
Випадки, коли застосувати не можна
Трапляються випадки, коли інкапсуляція полів небажана з міркувань підвищення швидкодії. Ці випадки дуже рідкісні, але іноді цей момент буває дуже важливим.
Наприклад, є графічний редактор, в якому є об'єкти, що мають координати x і y. Ці поля навряд чи змінюватимуться в майбутньому. До того ж, в програмі бере участь дуже багато різних об'єктів, в яких є присутніми ці поля. Тому звернення безпосередньо до полів координат економить значну частину процесорного часу, який інакше витрачався б на виклики методів доступу.
Порядок рефакторингу
- Створити властивості (геттер і сеттер) для поля.
- Знайти усі звернення до поля. Замінити отримання значення з поля — геттером, а установку нових значень в полі - сеттером.
- Після того, як усі звернення до полів замінені, зробити поле приватним.
- Виконати компіляцію і тестування.
Подальші кроки
Інкапсуляція поля є всього лише першим кроком до зближення даних і поведінки над цими даними. Після того, як було створено прості методи доступу до полів, варто ще раз перевірити місця, де ці методи викликаються. Цілком можливо, код з цих ділянок доречніше виглядав би в самих методах доступу.
Схожі рефакторинги
Бореться з запахом
Посилання
- Encapsulate Field [ 18 лютого 2015 у Wayback Machine.]
- Encapsulate Field [ 7 грудня 2014 у Wayback Machine.]
- Інкапсуляція поля [ 11 березня 2016 у Wayback Machine.]
- Рефакторинг для инкапсуляции поля (C#) [ 5 травня 2016 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Inkapsulya ciya po lya angl Encapsulate Field prijom refaktoringu sho dozvolyaye polegshiti robotu z danimi pokrashiti modulnist chastin programi ta polegshiti yiyi pidtrimku Zabezpechuye zblizhennya danih i povedinki nad cimi danimi ProblemaYe publichne pole C class Person public string name C class Person public std string name RishennyaZrobiti pole privatnim i stvoriti dlya nogo metodi dostupu chi vlastivist 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 amp get name const return name void set name const std string amp new name name new name Prichini refaktoringuOdnim iz principiv ob yektnogo programuvannya ye inkapsulyaciya abo mozhlivist prihovannya danih ob yektu Inakshe vsi dani ob yektiv buli b publichnimi a inshi ob yekti mogli b otrimuvati ta modifikuvati dani ob yektu bez jogo vidoma Pri comu rozdilyayutsya dani ta povedinka yaka pov yazana z cimi danimi pogirshuyetsya modulnist chastin programi ta uskladnyuyetsya yiyi pidtrimka PerevagiYaksho dani j povedinka yakogos komponentu tisno pov yazani mizh soboyu i znahodyatsya v odnomu misci kodu to nabagato prostishe bude pidtrimuvati ta rozvivati cej komponent Mozhna robiti yakis skladni operaciyi pov yazani z dostupom do poliv ob yektu Vipadki koli zastosuvati ne mozhnaTraplyayutsya vipadki koli inkapsulyaciya poliv nebazhana z mirkuvan pidvishennya shvidkodiyi Ci vipadki duzhe ridkisni ale inodi cej moment buvaye duzhe vazhlivim Napriklad ye grafichnij redaktor v yakomu ye ob yekti sho mayut koordinati x i y Ci polya navryad chi zminyuvatimutsya v majbutnomu Do togo zh v programi bere uchast duzhe bagato riznih ob yektiv v yakih ye prisutnimi ci polya Tomu zvernennya bezposeredno do poliv koordinat ekonomit znachnu chastinu procesornogo chasu yakij inakshe vitrachavsya b na vikliki metodiv dostupu Poryadok refaktoringuStvoriti vlastivosti getter i setter dlya polya Znajti usi zvernennya do polya Zaminiti otrimannya znachennya z polya getterom a ustanovku novih znachen v poli setterom Pislya togo yak usi zvernennya do poliv zamineni zrobiti pole privatnim Vikonati kompilyaciyu i testuvannya Podalshi krokiInkapsulyaciya polya ye vsogo lishe pershim krokom do zblizhennya danih i povedinki nad cimi danimi Pislya togo yak bulo stvoreno prosti metodi dostupu do poliv varto she raz pereviriti miscya de ci metodi viklikayutsya Cilkom mozhlivo kod z cih dilyanok dorechnishe viglyadav bi v samih metodah dostupu Shozhi refaktoringiBoretsya z zapahomPosilannyaEncapsulate Field 18 lyutogo 2015 u Wayback Machine Encapsulate Field 7 grudnya 2014 u Wayback Machine Inkapsulyaciya polya 11 bereznya 2016 u Wayback Machine Refaktoring dlya inkapsulyacii polya C 5 travnya 2016 u Wayback Machine