# data[].attributes.body
Jerarquía de clase
La relación padre-hijo entre clases puede representarse desde un punto de vista jerárquico, denominado vista de clases en árbol.

Herencia múltiple

Una clase puede heredar los atributos de otras dos superclases.
https://padlet.com/nacho_torre98/7wog2bwgd9a5

# data[].attributes.body
Es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando.

Funciones:

Se reserva memoria cada vez que el programador crea un objeto, pero éste no tiene que saber cuánta memoria se reserva ni cómo se hace esto.

Cuando se compila el programa, automáticamente se incluye en éste una subrutina correspondiente al recolector de basura. Esta subrutina también es invocada periódicamente sin la intervención del programador.

# data[].attributes.body
Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo lo está con los métodos.
Hay tres tipos de polimorfismo: el polimorfismo de sobrecarga,
-el polimorfismo paramétrico  y -el polimorfismo de inclusión.

El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que son completamente independientes una de otra.

Por ejemplo, la clase complex, la clase image y la clase link pueden todas tener la función "display". Esto significa que no necesitamos preocuparnos sobre el tipo de objeto con el que estamos trabajando si todo lo que deseamos es verlo en la pantalla.

El polimorfismo paramétrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parámetros diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona automáticamente el método correcto a aplicar en función del tipo de datos pasados en el parámetro.

Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition() efectuando una suma de valores.

*El método int addition (int,int) devolvería la suma de dos números enteros.
*El método float addition (float, float) devolvería la suma de dos flotantes.
*El método char addition (char, char) daría por resultado la suma de dos caracteres definidos por el autor.

La habilidad para redefinir un método en clases que se hereda de una clase base se llama especialización. Por lo tanto, se puede llamar un método de objeto sin tener que conocer su tipo intrínseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, enmascarándolos con una interfaz común (siendo esta la clase básica).

# data[].attributes.body
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase.

El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado.

Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas.

Se refiere a la capacidad de agrupar y condensar en un entorno con límites bien-definidos distintos elementos.

Existen tres niveles de acceso para el encapsulamiento, los cuales son:

Público (Public): Todos pueden acceder a los datos o métodos de una clase que se definen con este nivel, este es el nivel más bajo, esto es lo que tu quieres que la parte externa vea.

Protegido (Protected): Podemos decir que estás no son de acceso público, solamente son accesibles dentro de su clase y por subclases.

Privado (Private): En este nivel se puede declarar miembros accesibles sólo para la propia clase.

# data[].attributes.body
Es un mecanismo que consiste en organizar datos y métodos de una estructura, conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier otro medio distinto a los especificados. Por lo tanto, la encapsulación garantiza la integridad de los datos que contiene un objeto.

Existen tres niveles de acceso: público, las funciones de todas las clases pueden acceder a los datos o métodos de una clase que se define con el nivel de acceso público. Este es el nivel de protección de datos más bajo; protegido, el acceso a los datos está restringido a las funciones de clases heredadas, es decir, las funciones miembro de esa clase y todas las subclases; privado, el acceso a los datos está restringido a los métodos de esa clase en particular. Este es nivel más alto de protección de datos.

# data[].attributes.body
Las características especificas de un objeto, aquellas que lo distinguen de los demás tipos de objetos y que logran definir límites conceptuales respecto a quien está haciendo dicha abstracción del objeto.

Por ejemplo, un sistema puede tener varios capas de abstracción por el que se exponen diferentes significados y cantidades de detalle del programador; bajo nivel capas de abstracción exponen los detalles de la hardware de computadora donde el programa carreras, mientras que alto nivel capas lidiar con el lógica de negocio del programa.