Отражение во многих языках, таких как .NET и Java, - это исправления для плохих синтаксисов, которые не позволяют свободно взаимодействовать с объектами.
В действительно объектно-ориентированных языках, таких как Smalltak или Self, вам вряд ли когда-нибудь понадобится рефлексия, и, если нужно, она намного более мощная, чем те, что предлагаются в .NET и Java.
Сказав это, я верю, что рефлексия - это обратный инжиниринг, учитывая, что RE больше похож на понимание кода, чтобы что-то с ним сделать, а не на нарушение защиты других.
В настоящее время я много работаю с Drupal (на основе PHP), который использует такие уродливые вещи, как объединение имен модулей в предопределенные имена ловушек, чтобы найти, существует ли эта функция, поэтому ее можно вызывать позже (например, module_hook_name).
Это очень удобно, но я верю в настоящие ОО-языки, которых можно избежать, если подклассифицировать абстрактный класс, который может ответить на любое сообщение, а подклассы могут это переопределить.
Отражение не следует использовать, за исключением экстремальных обстоятельств, в которых вы можете увидеть недостатки языков программирования.