# data[].attributes.body
Un método abstracto es un método declarado pero no implementado, es decir, es un método del que solo se escribe su nombre, parámetros y tipo devuelto pero no su código.

Los métodos abstractos se escriben sin llaves {} y con ; al final de la declaración.

Por ejemplo:

public abstract double area();

Un método se declara como abstracto porque en ese momento (en esa clase) no se conoce cómo va a ser su implementación.

Por ejemplo: A partir de una clase Polígono se pueden derivar las clases Rectángulo y Triángulo. Ambas clases derivadas usarán un método área. Podemos declararlo en la clase Polígono como método abstracto y dejar que cada clase lo implemente según sus necesidades.

Al incluir el método abstracto en la clase base se obliga a que todas las clases derivadas lo sobrescriban con el mismo formato utilizado en la declaración. Si la clase derivada no implementa el método abstracto que ha heredado, deberá ser declarada como abstracta.

Si una clase contiene un método abstracto se convierte en clase abstracta y debe ser declarada como tal.

La forma general de declarar un método abstracto en Java es:

[modificador] abstract tipoDevuelto nombreMetodo([parámetros]);

# data[].attributes.body
Las clases abstractas funcionan como una clase que declara la existencia de métodos pero no su implementación.
Las clases abstractas son clases que no pueden ser instanciadas directamente, sino que se utilizan como base para otras clases que las extienden. Algunas características de las clases abstractas son:
-Pueden contener tanto definiciones de miembros como implementaciones concretas de los mismos.
-Pueden tener miembros abstractos, que son definiciones de métodos sin implementación, que deben ser implementados por las clases derivadas.
-Las clases derivadas pueden heredar solo de una clase abstracta, ya que no se permite la herencia múltiple de clases en la mayoría de los lenguajes de programación orientada a objetos.

# data[].attributes.body
Las interfaces proporcionan una forma de definir la estructura de una clase sin especificar su implementación. En otras palabras, una interfaz establece un contrato que las clases que la implementen deben seguir. Algunas características de las interfaces son:
-Las interfaces solo pueden contener definiciones de métodos, propiedades, eventos o indexadores, pero no su implementación.
-Todos los miembros de una interfaz son públicos y abstractos por defecto.
-Las clases pueden implementar múltiples interfaces, lo que permite lograr la herencia múltiple.
-Las interfaces se utilizan para establecer un contrato común entre clases que pueden tener funcionalidades diferentes pero deben seguir una estructura específica.

# data[].attributes.headline
RELACION DE ASOCIACION COMPOSICIONY AGREGACION 

# data[].attributes.subject
RELACION DE ASOCIACION COMPOSICIONY AGREGACION 

# data[].attributes.body
Asociación

Es generalmente, una relación estructural entre clases, es decir, que en el ejemplo, existe un atributo de la clase medio de transportes, que es del tipo Conductor. La navegabilidad nos muestra donde esta ubicado el atributo. Es decir cual es la clase que tiene contiene el atributo si ésta no lo mostrase.

Agregación

Es una relación que se derivó de la asociación, por ser igualmente estructural, es decir que contiene un atributo, que en todos los casos, será una colección, es decir un array, vector, etc, y además de ello la clase que contiene la colección debe tener un método que agregue los elementos a la colección. También se puede leer como que un medio de transporte tiene varias ruedas.

Nos esta diciendo que los objetos rueda forman parte del objeto medio de transporte. Pero, su ciclo de vida no esta atado al del objeto medio de transporte. Es decir si el automóvil se destruye las ruedas pueden seguir existiendo independientemente.

Composición

Al igual que en la agregación, es una relación estructural pero se le suma, que tiene un método de destrucción de los objetos. Y a diferencia de la asociación, el ciclo de vida del objeto area está relacionado con el del objeto ruta. Es decir que si la ruta de viaje se levanta, las áreas que surgían a partir de ella desaparecen. También se puede leer como que una ruta tiene varias áreas de cobertura.

Mucho se ha discutido a cerca de las agregaciones y las composiciones, el debate es casi tan caliente como el de los include y extends de los casos de uso. Ya que algunos sostienen que los lenguajes orientados a objetos, tienen garbage collector, por lo que no necesitan métodos de destrucción de los objetos (relacionados a los ciclos de vida en la composición). Y que la programación es la misma para las composiciones y las agregaciones, y que la diferencia es meramente conceptual entre una y otras. Es mas existen varias interpretaciones, pero la expuesta es la cual yo me adhiero.