Quedándome con la esencia (y omitiendo factores técnicos) te puedo indicar que la programación orientada a objetos es una metodología que intenta abstraer la programación de un conjunto de funciones lógicamente ordenadas a un conjunto de elementos (objetos) generados a partir de un patrón (clase) con atributos y métodos. Intenta asemejarse de alguna forma lo que ves en tu día a día, por ejemplo, una silla:
La silla fue creada a partir de un plano o patrón que definía que una silla tenía que tener una forma definida, un material, un color y tenía que servir para sentarse.
clase Silla {
atributo forma_de_silla = "Cuatro patas, un respaldo, ..."
atributo color = ?
atributo material = ?
contructor Silla(nuevo_color, nuevo_material) {
color = nuevo_color
material = nuevo_material
}
funcion senrase() {
.....
}
}
Ese patrón, como puedes ver, define la forma de la silla e indica que el color y el material es libre (se le puede asignar un valor coherente a gusto del usuario). Y bajo estos atributos aparece un “constructor" que justamente lo que hace es que te pide ingresar un nuevo color y un nuevo material y esos dos datos lo usara para crear la silla y entregártela.
Una vez tienes la silla ves que además tiene un "método" o función llamado sentarse(), entonces te das cuenta que con esa clase podrías crear distintos tipos de silla con distintos colores, etc.
silla1 = nueva Silla(rojo, plastico)
silla2 = nueva Silla(amarillo, plastico)
silla3 = nueva Silla(cafe, madera)
silla1.sentarse()
silla2.sentarse()
silla3.sentarse()
Y al sentarse te das cuenta que las tres funcionan igual ya que todas vienen de un mismo patrón (clase).
Entonces un patrón es una clase y cada elemento creado a partir de él es un objeto.Con el tiempo te das cuenta que también existe una clase mesa, que era idéntica a la silla solo que la forma cambia y el cómo se usa también. Entonces para no crear una mesa desde un plano creado desde 0 y siempre tener una base para crear un plano de un mueble, se te ocurre crear un plano "padre" el cual definirá todo lo que puede tener un mueble: material, color, utilidad. Luego a tu plano mesa y silla le dices "ustedes, hereden de mueble todo lo que tiene y luego yo modifico su forma y utilidad" de esa forma te ahorras líneas de código...
A la larga te das cuenta que la programación orientada objetos no es más que un conjunto de patrones e instancias del mismo, cada uno con sus funcionalidades y atributos.
(He omitido aspectos como la encapsulación u otros, que quizás sea más oportuno ver con un ejemplo completo del paradigma)