Нет, рефлексия не нарушает идею частных методов.По крайней мере, не по сути.Ничто не говорит о том, что отражение не может подчиняться ограничениям доступа.
Плохо спроектированное отражение нарушает идею частных методов, но это не имеет ничего общего с отражением как таковым: что-нибудь , которое плохо спроектировано, может разрушить идею частных методов.В частности, плохой дизайн частных методов также может разрушить идею частных методов.
Что я подразумеваю под плохо разработанным ?Ну, как я уже говорил выше, ничто не мешает вам иметь язык, на котором рефлексия подчиняется ограничениям доступа.Проблема заключается в том, что, например, отладчикам, профилировщикам, инструментам покрытия, IntelliSense, IDE, инструментам в целом требуется , чтобы иметь возможность нарушать ограничения доступа.Поскольку невозможно представить разные версии отражения разным клиентам, большинство языков предпочитают инструменты безопасности.(Е является контрпримером, который не имеет абсолютно никаких отражающих способностей, как осознанный выбор дизайна.)
Но кто говорит, что вы не можете представить разные версии отражения разным клиентам?Проблема в том, что в классической реализации отражения все объекты отвечают за отражение самих себя, и поскольку существует только один из каждого объекта, может существовать только версия отражения.
Итак, гдеприходит идея плохой дизайн ?Хорошо, обратите внимание на слово «ответственный» в вышеприведенном абзаце.Каждый объект отвечает за размышления о себе.Кроме того, каждый объект отвечает за то, для чего он был написан в первую очередь.Другими словами: каждый объект имеет как минимум две обязанностей.Это нарушает один из основных принципов объектно-ориентированного проектирования: принцип единой ответственности.
Решение довольно простое: разбить объект.Оригинальный объект просто отвечает за то, для чего он был изначально написан.И есть еще один объект (называемый Mirror , потому что это объект, который отражает другие объекты), который отвечает за отражение.И теперь, когда ответственность за отражение разбита на отдельный объект, что мешает нам иметь не один, а два, три, много Зеркальных объектов?Тот, который учитывает ограничения доступа, тот, который позволяет объекту отражать только себя, но не любые другие объекты, тот, который допускает только самоанализ (то есть только для чтения), тот, который позволяет отражать только информацию о месте вызова только для чтения (то есть дляпрофилировщик), который дает полный доступ ко всей системе, включая нарушение ограничений доступа (для отладчика), тот, который предоставляет доступ только для чтения к именам и сигнатурам методов и соблюдает ограничения доступа (для IntelliSense) и т. д.
В качестве приятного бонуса это означает, что зеркала - это, по сути, возможности (в смысле слова «возможности-безопасность») для отражения.IOW: Зеркала - это Святой Грааль в десятилетнем стремлении согласовать безопасность и динамическое метапрограммирование во время выполнения.
Концепция зеркал была изобретена в Self , откуда она перешла в Animorphic Smalltalk / Strongtalk , а затем Newspeak .Интересно, что интерфейс отладки Java основан на зеркалах, поэтому разработчики Java (или, скорее, JVM) ясно знали о них, но отражение Java не работает.