В области объектно-ориентированного программирования, если бы существовал защитный экран, гарантирующий, что данные остаются в безопасности от любопытных глаз внешнего мира, это называлось бы инкапсуляцией. Первый столп нашей серии — инкапсуляция — играет важную роль в укреплении структуры ООП. Но что именно это означает? Как это реализовано в C++ и Java? Давайте углубимся.

Что такое инкапсуляция?
В ООП инкапсуляция заключается в объединении данных (атрибутов) и методов (функций), которые работают с данными. в единый модуль, называемый классом (чертеж объекта) и ограничивающий прямой доступ к некоторым компонентам объекта. По сути, это защитный барьер, который предотвращает прямое манипулирование данными или доступ к ним извне. Инкапсуляция помогает защитить целостность данных, позволяя только назначенным функциям получать доступ к ним и изменять их. Это гарантирует сохранение корректного состояния объекта и снижает вероятность неожиданного поведения.
Никто не любит технический жаргон, поэтому давайте разберемся в этом более подробно на примерах из реальной жизни. Давайте возьмем автомобиль в качестве аналогии, подумаем об инкапсуляции как о конструкции автомобиля, которая включает в себя как части (данные), такие как двигатель, колеса и фары, так и методы их использования, такие как turn. включение, ускорение и торможение(функция). Более того, вы не можете напрямую изменить внутреннее состояние автомобиля (например, количество топлива в баке), не используя назначенные методы например, заправку.
Представьте себе, что вы покупаете кофемашину. Чтобы управлять им, вы нажимаете кнопку, и кофе выходит. Вас не обязательно беспокоят сложные детали внутри, например, как нагревается вода или как измельчаются кофейные зерна. Все эти сложные процессы «инкапсулированы» внутри машины.

Преимущества инкапсуляции
1. Контроль: вы лучше контролируете доступ к данным и их изменение.
2. Гибкость и обслуживание : Разрешая изменять данные только определенным образом, вы можете обеспечить более согласованное поведение, что упрощает отладку и поддержку кода.
3. Защита: защищает. целостность данных, позволяя изменять их только четко определенными способами.

Инкапсуляция в C++
В C++ инкапсуляция реализуется с помощью спецификаторов доступа. Наиболее распространенными являются публичный, частный и защищенный.

class CoffeeMachine
{
private:
     int waterAmount;
     bool isHeated;

public:
     void makeCoffee()
    {
        // function to make coffee
    }
    void fillWater(int amount)
    {
         waterAmount += amount;
    }
};

Здесь fuelAmount и speed инкапсулированы в класс Car, блокируя прямой внешний доступ.

Инкапсуляция в Java
Как и в C++, в Java для реализации инкапсуляции используются модификаторы доступа: публичный, частный, защищенный em> и по умолчанию.

public class Car {
    private int fuelAmount;
    private int speed;

    public void accelerate() {
        // Increase speed
    }

    public void refuel(int amount) {
        fuelAmount += amount;
    }
}

Как и в примере C++, fuelAmount и speed инкапсулированы в класс Car.

Различия между C++ и Java в инкапсуляции
1. Доступ по умолчанию:
C++: уровень доступа по умолчанию для членов класса частный .
Java: Уровень доступа по умолчанию для членов класса — default (часто называемый «частным для пакета»). Это означает, что члены доступны в одном и том же пакете, но не из других пакетов.
2. Дружественные функции:
C++: представляет концепцию дружественных функций. или занятия. Другая функция или класс в C++ может обращаться к частным и защищенным членам другого класса. Эта функция допускает различные виды нарушения инкапсуляции для особых сценариев.
Java: понятия дружественных функций или классов не существует. Инкапсуляция в Java в этом отношении остается строгой.
3. Структуры:
C++: даже структуры (struct) могут использовать спецификаторы доступа, аналогичные классам и предоставить другой способ реализации инкапсуляции
Java: Java не имеет struct, поэтому для инкапсуляции он полагается исключительно на классы.

В общем, инкапсуляция, защитный механизм ООП, гарантирует, что данные остаются защищенными и контролируемыми. И C++, и Java предлагают надежные инструменты для реализации этого принципа. Знакомство с этими основополагающими концепциями ООП и их применением на разных языках открывает путь к более качественному и безопасному проектированию кода.

В следующей статье мы рассмотрим второй столп ООП — абстракцию.