Точка инкапсуляции Java

Я пытаюсь понять, почему люди говорят, что это хороший способ запретить доступ к вашему файлу класса, который вам не нужен, но я не могу просто использовать отражение для доступа к классу? Не лучше ли запутать, чтобы предотвратить несанкционированный доступ, потому что никто не знает, что делает ваш код, даже если они используют отражение?

3 ответа

Решение

Точка инкапсуляции заключается в том, чтобы предотвратить доступ к внутренним классам вашей реализации ради более чистого кода, а не в том, чтобы технически помешать пользователям вашего класса получить доступ к экземплярам с помощью отражения или декомпилировать их.

Например, если у вас есть HTTP-клиент, вы должны инкапсулировать используемые вами потоки и буферы и предоставлять запрос и ответ только фактическому пользователю вашего класса. Это сделано для того, чтобы ваш код был более чистым, а не таким, чтобы он никогда не отражался на вашем классе. Кроме того, поскольку доступ к единственному API-интерфейсу имеют только внешние API-пользователи, вы можете по своему усмотрению изменять внутренние компоненты ваших классов или код.

Инкапсуляция - это не предотвращение доступа к внутреннему коду, а представление границы. Это помогает программисту писать код, который легко масштабируется и модифицируется. Отсюда и такие принципы, как "разделение интересов".

Инкапсуляция - это способ сообщить другим программистам, что они должны и не должны делать с вашими данными. Они всегда могут обойти это, но, сделав это немного сложнее, вы эффективно говорите им быть крайне осторожными при доступе к инкапсулированным данным и предупреждаете их, что вы можете изменить свою реализацию в любое время и нарушить любой код, который на нее опирается.

Инкапсуляция не является DRM-подобным методом защиты вашего кода и данных от злонамеренного доступа.

Другие вопросы по тегам