На самом деле это не понятия, а конкретные ключевые слова, которые обычно встречаются (с немного другой семантикой) в популярных языках, таких как C ++ и Java.
По сути, они предназначены для того, чтобы позволить классу ограничить доступ к членам (полям или функциям). Идея состоит в том, что чем меньше одному типу разрешен доступ к другому типу, тем меньше можно создавать зависимости. Это позволяет легче изменять доступ к объекту, не затрагивая объекты, которые к нему относятся.
Вообще говоря, открытый означает, что каждому разрешен доступ, частный означает, что доступ разрешен только членам одного класса, а защищенный означает, что также разрешены члены подклассов. Тем не менее, каждый язык добавляет свои собственные вещи к этому. Например, C ++ позволяет вам наследовать не публично. В Java также есть уровень доступа по умолчанию (пакет), и есть правила для внутренних классов и т. Д.