Reflection is the ability to examine, understand, and modify the internal structure of an object through reading/writing of metadata at runtime. Most statically typed languages have a built-in reflection capability, most likely through the use of a library. It is important to understand that because reflection happens at runtime there is no type checking at compile time for reflection based code. This can lead to unpredictable behavior and bugs. Reflection also has a performance impact, as it requires a lot of runtime processing to perform in order to manipulate objects in memory.

Software Coupling

Coupling refers the to strength of dependencies in your code. Coupling can be either explicit or implicit. For example, if an application has code that depends on other code that is coupling. If there are modules which depend on other modules that is coupling. Coupling occurs in many forms and is...