
1. Definición
1.1. Paradigma de programación basado en objetos que representan entidades del mundo real y sus interacciones
2. Ventajas
2.1. Modularidad
2.2. Reutilización de codigo
2.3. Facilidad de Mantenimiento
2.4. Escalabilidad
3. Clases y Objetos
3.1. Clases
3.1.1. Plantilla o modelo para crear objetos
3.1.2. Define atributos (propiedades) y métodos (comportamientos)
3.2. Objetos
3.2.1. Instancia de una clase
3.2.2. Tiene un estado (valores de atributos) y comportamientos (métodos).
4. Encapsulamiento
4.1. Definición
4.1.1. Ocultación de los detalles internos de un objeto y exposición de una interfaz pública.
4.2. Beneficios
4.2.1. Protección del estado interno
4.2.2. Reducción de la dependencia entre componentes
4.2.3. Mejora de la modularidad
4.3. Modificadores de Acceso
4.3.1. public: Accesible desde cualquier parte del programa.
4.3.2. private: Accesible solo dentro de la misma clase
4.3.3. protected: Accesible dentro de la misma clase y sus subclases
5. Herencia
5.1. Definición
5.1.1. Mecanismo que permite a una clase derivada (subclase) heredar atributos y métodos de otra clase (superclase)
5.2. Beneficios
5.2.1. Reutilización de código
5.2.2. Creación de jerarquías
5.2.3. Extensibilidad
5.3. Relaciones
5.3.1. is-a: La subclase es una forma más específica de la superclase
5.3.2. super: Palabra clave para referirse a la superclase
6. Polimorfismo
6.1. Definición
6.1.1. Capacidad de un objeto de tomar muchas formas
6.2. Tipos
6.2.1. Sobrecarga de Métodos
6.2.1.1. Definir múltiples métodos con el mismo nombre pero diferentes parámetros en la misma clase.
6.2.2. Sobrescritura de Métodos
6.2.2.1. Proveer una implementación específica de un método ya definido en la superclase.
6.3. Beneficios
6.3.1. Flexibilidad
6.3.2. Gestión uniforme de objetos de diferentes tipos
6.3.3. Mejora de la escalabilidad