La programación orientada a objetos (POO) es un modelo de lenguaje de programación que se centra en el uso de objetos en lugar de acciones para realizar tareas. Esto implica adoptar un enfoque más atento a los datos y menos preocupado por la lógica, que es más común en otros paradigmas de programación. La vista de los objetos y las acciones es la inversa de como es en otros lenguajes, y el énfasis está en los objetos mismos más que en la ejecución de las tareas que emplean los objetos. De igual manera, la estructura no considera decidir cómo emplear la lógica, sino la definición de los datos que se utilizarán en la programación.
El diseño de software de computadora con programación orientada a objetos comienza con la definición de los objetos que serán manipulados por el programa. Luego, el programador comenzará a identificar la relación entre cada objeto, un proceso que generalmente se denomina modelado de datos. Esencialmente, el programador busca colocar los objetos en una clasificación, por lo tanto, ayuda a definir los datos que forman parte de la herencia que cada objeto aporta a la tarea. De hecho, el proceso de definir estas clases y subclases de datos normalmente se denomina herencia.
La programación orientada a objetos también ayuda a clasificar los objetos de una manera que permite que se produzca el polimorfismo. Es decir, diferentes objetos podrán responder a un mensaje común, pero cada uno de una manera diferente que es única para ese objeto. Al mismo tiempo, este tipo de programación permite el encapsulado de un objeto, ocultando o protegiendo eficazmente los datos asociados con el objeto de una fácil visualización sin acceso de seguridad.
Una de las ventajas de la programación orientada a objetos es que el proceso hace un buen uso de la modularidad, lo que significa que los objetos y las tareas se agrupan de manera que cada módulo es capaz de ser considerado de forma independiente. Esto puede ser de gran ayuda al realizar mejoras en un programa, ya que la modularidad permite abordar la tarea de realizar cambios en la configuración de una parte de la programación sin afectar la estructura y función de los otros módulos.