In der objektorientierten Programmierung (OOP) spricht man von Reflexion bzw. Reflektion (engl. reflection), wenn zur Laufzeit eines Programmes Informationen über Eigenschaften von Typen und deren Mitgliedern gesammelt werden.
Ein Type ist dabei i. d. R. eine Klasse, die wiederum verschiedene Mitglieder (Attribute, Eigenschaften, Methoden, Schnittstellen) besitzt, die ebenfalls über Eigenschaften verfügen.
Reflexion ermöglicht es nun, zur Laufzeit Informationen über Klassen oder deren Instanzen abfragen zu können. Bei einer Methode sind das u. a. deren Sichtbarkeit, die Art des Rückgabewertes oder die Art der Übergabeparameter. Die Umsetzung ist dabei sprachspezifisch realisiert.
Hochsprachen wie Java (java.lang.reflect) oder die propietäre Sprache C# (System.Reflection)des .NET-Frameworks bieten dazu entsprechende Pakete bzw. Namespaces an.
Eine wichtige Rolle spielt die Verwendung von Reflexion bei der aspektorientierten Programmierung, im Zusammenhang mit Generizität (d. h. der typsicheren Programmierung) aber auch in Fragen der Persistenz (persistente Datenhaltung von Objekten und deren Beziehungen).