Инкапсуляция
Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 17 из 56.
Инкапсуляция — это процесс объединения данных внутри класса в одну единицу.
Это помогает наложить ограничения на прямой доступ к данным класса, что в конечном итоге помогает нам предотвратить любое случайное изменение данных.
Давайте посмотрим на инкапсуляцию в действии на простом примере. Создайте базовый объект с публичными свойствами:
const user = {
name: "John",
email: "john@example.com"
};Любой может напрямую обращаться к этим свойствам и изменять их:
user.name = "Jane"; // Легко изменить извне
console.log(user.email); // Легко получить доступ извнеБолее инкапсулированный подход использует замыкания для скрытия данных:
function createUser(name, email) {
// Эти переменные являются приватными (инкапсулированными)
let userName = name;
let userEmail = email;
// Возвращаем объект с методами для взаимодействия с приватными данными
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");Теперь для взаимодействия с данными:
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
// Невозможно получить прямой доступ к данным
console.log(encapsulatedUser.userName); // undefinedЗадание
Вам предоставлен код, который использует инкапсуляцию для защиты пользовательских данных. Ваша задача — добавить метод getAge() для доступа к возрасту.
Тесты проверят следующее:
- Метод
getAge()существует - Он возвращает правильный возраст
- Информация о возрасте остается приватной
Ожидаемый результат:
john_doe
25
Шпаргалка
Инкапсуляция — это процесс объединения данных внутри класса в одну единицу и ограничения прямого доступа к этим данным, что предотвращает их случайное изменение.
Без инкапсуляции свойства объекта доступны публично:
const user = {
name: "John",
email: "john@example.com"
};
user.name = "Jane"; // Can be modified directly
console.log(user.email); // Can be accessed directlyИспользование замыканий для инкапсуляции данных:
function createUser(name, email) {
// Private variables (encapsulated)
let userName = name;
let userEmail = email;
// Public methods to interact with private data
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined (private data not accessible)Попробуйте сами
import { createUser } from './createUser.js';
// Тестовый код — не изменять
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // Должен вывести "john_doe"
console.log(user.getAge()); // Должен вывести 25
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление