La programación orientada a objetos (en inglés, object-oriented programming, OOP) es un paradigma de programación (programming paradigm), es decir, una manera de organizar los programas, que se basa en los llamados objetos (objects). Un objeto reúne unos datos, llamados atributos (attributes), y las operaciones que se pueden hacer con ellos, llamadas métodos (methods). Los objetos pueden representar cosas físicas, como un coche o un sensor, o conceptos, como una cuenta bancaria, un pedido o una ventana de la pantalla, y se comunican entre sí llamando a los métodos de los demás.
Los objetos se agrupan en clases (classes), que son como moldes: la clase CuentaBancaria define que toda cuenta tiene un titular y un saldo y que admite ingresos y reintegros, y cada cuenta concreta es un objeto o instancia (instance) de esa clase. Sobre esa base se apoyan tres ideas principales. La encapsulación (encapsulation) consiste en ocultar los datos internos de un objeto y permitir cambiarlos solo a través de sus métodos, de modo que nadie pueda dejar una cuenta con un saldo incoherente. La herencia (inheritance) permite definir una clase a partir de otra, heredando lo que tiene y añadiendo lo que le falta: una cuenta de ahorro es una cuenta bancaria con intereses. El polimorfismo (polymorphism) permite tratar de la misma manera objetos de clases distintas que responden al mismo método, cada uno a su modo.
El paradigma nació en Noruega. Ole-Johan Dahl y Kristen Nygaard crearon en el Centro de Cálculo de Oslo el lenguaje Simula, cuya versión de 1967 introdujo las clases y los objetos para programar simulaciones. Alan Kay, que acuñó la expresión orientado a objetos, desarrolló en los años setenta en el centro de investigación de Xerox en Palo Alto el lenguaje Smalltalk, en el que todo era un objeto. La programación orientada a objetos se generalizó con C++, que Bjarne Stroustrup publicó en 1985, y con Java, de 1995. Hoy la admiten la mayoría de los lenguajes de programación de uso general, como Python, C#, JavaScript o Ruby.
Su éxito vino acompañado de críticas. El libro Design Patterns, de 1994, escrito por cuatro autores conocidos como la Banda de los Cuatro, recogía soluciones de diseño probadas y aconsejaba ya preferir la composición de objetos a la herencia, porque las jerarquías de clases profundas se vuelven rígidas y difíciles de cambiar. Otros paradigmas, como la programación funcional, han recuperado terreno desde la década de 2010, y muchos lenguajes actuales combinan los dos. Para guardar los objetos en bases de datos relacionales se usa el mapeo objeto-relacional.