Обычно обычный пользователь не может получить доступ к внутренним функциям программы. Только если вы намеренно выставите их, тогда обычный пользователь сможет получить к ним доступ. Использование private / protected и publi c в основном используется для целей инкапсуляции. Это ограничивает количество точек доступа внутренним состоянием классов и библиотек.
Немного выше - доступ к модулю, если реализована модульная система. В нем перечислены методы (publi c), к которым можно получить доступ из других модулей. Кроме того, вы получаете удаленный доступ, например, через удаленные вызовы процедур или веб-API. Те должны быть выставлены также.
Наконец, есть пользовательский интерфейс. Пользовательский интерфейс обычно не имеет доступа к функциям программы publi c. Предоставляется только общий ввод / вывод. Конечно, вы все равно должны убедиться, что вы не подвергаете никакому внутреннему состоянию. Переполнения буфера, атаки на ОЗУ и тому подобное могут заставить пользователя полностью пропустить все меры защиты, предлагаемые вышеуказанными мерами.
Таким образом, publi c / private может быть хорошим способом ограничения доступа к внутреннему состоянию программы. Но эти модификаторы доступа обычно не являются первой линией защиты.