Reflection

In addition to its basic responsibilities, a reflective object can describe itself to other objects. This is useful in applications that allow third-party plug-ins such as browsers and IDEs:

In these situations the platform programmer can't anticipate what the plug-ins will do, so he programs the platform to ask.

Reflection in Java

Reflection in C++

Prototypes in C++