Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo.
En este centro, se trabajaba en simulaciones de naves, que fueron
confundidas por la explosión combinatoria de cómo las diversas
cualidades de diferentes naves podían afectar unas a las otras. La idea
surgió al agrupar los diversos tipos de naves en diversas clases de
objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic)
pero diseñado para ser un sistema completamente dinámico en el cual los
objetos se podrían crear y modificar "sobre la marcha" (en tiempo de
ejecución) en lugar de tener un sistema basado en programas estáticos.
La programación orientada a objetos se fue convirtiendo en el estilo
de programación dominante a mediados de los años ochenta, en gran parte
debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.
Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal,
entre otros. La adición de estas características a los lenguajes que no
fueron diseñados inicialmente para ellas condujo a menudo a problemas
de compatibilidad y en la capacidad de mantenimiento del código. Los
lenguajes orientados a objetos "puros", por su parte, carecían de las
características de las cuales muchos programadores habían venido a
depender. Para saltar este obstáculo, se hicieron muchas tentativas para
crear nuevos lenguajes basados en métodos orientados a objetos, pero
permitiendo algunas características imperativas de maneras "seguras". El
Eiffel
de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con
esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP
en su versión 5 se ha modificado, soporta una orientación completa a
objetos, cumpliendo todas las características propias de la orientación a
objetos.