Процесс написания очередного набора классов вызвала вот какую философскую мысль.
Все эти private, public, protected, и даже friend-ы — это полумеры. В действительности, всех пользователей класса (под пользователями я имею в виду другие классы) можно разделить на группы: одним надо то, другим сё, третьим и то и сё. Фактически это раздача пользователям ролей. Соответственно, хочется чтобы пользователям было доступно только то подмножество интерфейса нашего класса, которое необходимо для его роли. Вот. Это я попытался чётко сформулировать то, что хотят программисты в лице меня :)
А все эти public / protected — это корявенький, неполный, неестественный, но легковесный способ реализации желания упомянутых программистов. Какой-то шаг в направлении моих мыслей был сделан с появлением такой абстракции, как Interface в Delphi. Аналоги есть и в других языках. (в Java, например). Однако идея всё ещё не развита до той степени, до которой могла бы быть развита... К примеру, всё ещё нельзя при наследовании от класса указать внутренности каких интерфейсов мы будем менять, а каких, нет и тп.