Este enfoque tiene numerosas ventajas. Mencionemos algunas:
- Resulta más sencillo de entender, pues la ejecución del programa se reduce a comprender la interfaz de los objetos y cómo éstos interactúan entre sí
- Es posible crear clases a partir de otras clases ya existentes, lo que elimina el código redundante y minimiza la posibilidad de cometer errores. Por ejemplo, si estamos gestionando un parque zoológico, podemos tener un objeto "animal" que represente a cualquier animal del zoo, con información sobre su edad, registro médico, etc. Y crear los objetos "hipopótamo" o "cebra" a partir del objeto "animal" que hereden todas las características de éste último y que nos permitan añadir atributos o métodos específicos que tengan sentido solo para dichas especies (y no para todas).
- Una vez creada una clase, podemos reutilizarla en otros programas sin necesidad de reescribir el código, con la ventaja que esto supone en los tiempos de desarrollo y en la fiabilidad de nuestros programas.
- Los cambios en el código interior de una clase no afectan al programa entero.
- El hecho de que el interior de un objeto no sea visible desde el exterior (más allá de sus atributos y métodos) nos permite crear código más seguro, sabiendo que una parte del código no va a modificar por error los datos utilizados en otra parte del código.
- El estar dividiendo el problema en partes más pequeñas nos permite probarlas de forma independiente, lo que redunda en una mayor fiabilidad del software.