Datos Vs. Objetos:
- Un dato es una representación particular de la información. Los datos sin embargo no pueden realizar funciones, ejecutar tareas o responder a eventos en tiempo real.
- Un objeto sí puede hacerlo, lo que permite modelar nuestros sistemas de manera más realista. Con el objeto no se separan los datos de su representación y sus funciones.
- Encapsulamiento: Un tipo de datos apenas tiene información descriptiva, y no define cómo opera esa información. Además, el programador debe conocer el interior de la definición. En una clase, el aspecto de representación puede -y debe- quedar oculto.
- Mantenimiento: Modificar internamente una clase no debe afectar las funcionalidades que esa clase ofrece.
- Ámbito de aplicación: Una función se puede aplicar en cualquier elemento del tipo de datos, no se puede restringir a ciertos elementos o contextos. Las definiciones de clases permiten que los métodos se puedan definir para ciertos contextos específicos.
- Robustez: Una función puede fallar por causas ajenas a su voluntad y puede además generar efectos colaterales que afecten el funcionamiento de otras funciones. Los métodos restringen (o deben restringir) el tipo de cosas que se pueden modificar