Hola!
Difícil pregunta...
Las ventajas son los conceptos básicos de POO:
* Clases, donde el problema que se intenta resolver se puede representar como un objeto (o entidad), lo que ayuda a mantener el código separado y lo más pequeño posible (se aplica la fórmula "divide y vencerás").
* Objetos, que permiten encapsular todas las funciones de una clase en una sola variable (en lugar de un archivo).
* Encapsulamiento, permite ocultar lo esencial de la clase al resto del mundo y solo muestras lo que quieres a los usuarios de tu clase (private, public, protected/friend, abstract, etc.).
* Herencia. Una de las mayores ventajas, en mi opinión. La herencia te permite extender (class X extends N) las funciones de una clase sin tener que volver a definir lo que ya existe.
* Polimorfismo, se refiere a la posibilidad de adoptar muchas formas en una sola clase utilizando una interfaz en común. Por ejemplo, si tuvieras la clase Hombre y Mujer. Ya sea que somos hombres o mujeres, ambos podemos caminar, por ende, una interfaz se podría implementar así:
<?php
interface Acciones {
public function caminar();
public function correr();
}
public Hombre implements Acciones {
public function caminar() {
echo "Caminando...";
}
public function correr() {
echo "Corriendo...";
}
}
class Mujer implements Acciones {
public function caminar() {
echo "Caminar...";
}
public function correr() {
echo "Correr...";
}
}
Esto sería útil, por ejemplo, en caso de que necesitaras crear una animación distinta para distintos tipos (una mujer, generalmente, camina moviendo las caderas, lo que se podría traducir en distintas animaciones).
OOP es muy útil cuando necesitas implementar soluciones que utilizarán otras personas, pues podrás crear una solución donde el usuario no podrá saber cómo realiza las acciones, porque lo importante es el resultado. Por ejemplo, si yo necesito sumar 1 + 1, a mi no me importa cómo lo hará tu clase, me importa que el resultado sea 2, por ende, en tu clase podrías crear 10 (o las que sean) funciones de acceso privado (private) que calcularán el resultado, y una sola con acceso público (public) que me devolverá el resultado.
Intenta hacer algo así con lenguajes estructurados (como C - C++ es un lenguaje orientado a objetos también, aunque la sintaxis es algo "fea") y verás que el código queda feo (difícil de entender) y desordenado.