# data[].attributes.body
Las clases se pueden relacionar de diferentes formas:
1. Asociación: Especifica una relación semántica entre objetos no relacionados. Este tipo de relaciones permiten crear asociaciones  que capturen los participantes en una relación semántica. Es una relación entre clases. Implica una dependencia semántica. Son relaciones del tipo «pertenece_a» o «está_asociado_con». Se da cuando una clase usa a otra clase para realizar algo.
Un departamento tiene un empleado, pero tanto el departamento como el empleado pueden existir independientemente.

Para explicar la forma como se asocian hablamos de la multiplicidad:
Indica el número de instancias de una clase que se asocian con las instancias de la otra clase.
Tipos de multiplicidad:
- uno_a_uno 1 - 1
- uno_a_muchos 1..*
- muchos_a_muchos n - m
La implementación en código suele conseguirse mediante un puntero desde la clase a la clase asociada. Un puntero (referencia), por cada instancia de esa relación.

2. Dependencia: Relación de uso. Uno de los dos objetos depende del otro, los cambios que se realicen al objeto "madre" afectan a los objetos dependientes. Se representa en UML con una línea discontinua. Por ejemplo, la relación entre una laptop y un procesador donde la laptop no puede funcionar/existir sin el procesador.

3. Generalización/especialización (relaciones de herencia): Es una relación de tipo "es un", consiste en factorizar las propiedades comunes de un conjunto de clases en una clase más general. El objetivo principal de la herencia es la reutilización, poder utilizar código desarrollado con anterioridad. La herencia supone una clase base y una jerarquía de clases que contiene las clases derivadas. Las clases derivadas pueden heredar el código y los datos de su clase base, añadiendo su propio código especial y datos, incluso cambiar aquellos elementos de la clase base que necesitan ser diferentes, es por esto que los atributos, métodos y relaciones de una clase se muestran en el nivel más alto de la jerarquía en el que son aplicables.

Tipos de herencia:
- Herencia simple: Una clase puede tener sólo un ascendente. Es decir una subclase puede heredar datos y métodos de una única clase base.
- Herencia múltiple: Una clase puede tener más de un ascendente inmediato, adquirir datos y métodos de más de una clase.

# data[].attributes.body
Las relaciones pueden ser:

- Cardinalidad : representa cuántos objetos de una clase se van a relacionar con objetos de otra clase

- Relación de herencia : La herencia supone una clase base y una jerarquía de clases que contiene las clases derivadas

- Agregación y composición (dependecia) :  una determinada entidad existe como un conjunto de otras entidades. En este tipo de relaciones un objeto componente se integra en un objeto compuesto.

Dependecia: Entre dos clases uno de los elementos es dependiente del otro, viéndose afectado por los cambios que se produzcan en él y no pudiendo funcionar correctamente sin le falta

Agregación : La agregación es una asociación binaria que representa una relación todo-parte (pertenece a, tiene un, es parte de). Los elementos parte pueden existir sin el elemento contenedor y no son propiedad suya.

Composición :La composición es una agregación fuerte en la que una instancia ‘parte’ está relacionada, como máximo, con una instancia ‘todo’ en un momento dado, de forma que cuando un objeto ‘todo’ es eliminado, también son eliminados sus objetos ‘parte’.

- Atributos de enlace : Es posible que tengamos alguna relación en la que sea necesario añadir algún tipo de información que la complete de alguna manera. Cuando esto ocurre podemos añadir atributos a la relación.

Fuente: https://ikastaroak.birt.eus/edu/argitalpen/backupa/20200331/1920k/es/DAMDAW/ED/ED05/es_DAMDAW_ED05_Contenidos/website_34_relaciones_entre_clases.html

# data[].attributes.attachment_link.keywords[]
ikaskuntza plataforma - plataforma de aprendizaje

# data[].attributes.attachment_link.title
Ikaskuntza plataforma - Plataforma de aprendizaje

# data[].attributes.attachment_link.description
Irakaskuntza Birtual eta Digitalizatuen LHI

# data[].attributes.body
Tipos de relaciones se presentan en un diagrama de clases
Existen distintos tipos de relaciones:
- Asociación (conexión entre clases)
- Dependencia (relación de uso)
- Generalización/especialización (relaciones de herencia)

Un concepto muy importante es la cardinalidad de una relación, representa cuántos objetos de una clase se van a relacionar con objetos de otra clase.

Tipos de cardinalidades:

De uno a uno: un objeto de origen puede relacionarse solo con un objeto de destino.

De uno a muchos: un objeto de origen se puede relacionar con varios objetos de destino.

De muchos a muchos: un objeto de origen puede relacionarse con varios objetos de destino y, a la inversa, un objeto de destino puede relacionarse con varios objetos de origen.

# data[].attributes.body
Cardinalidad:


Es el número de entidades con la cual otra entidad

puede asociar mediante una relación



Considerando una relación binaria entre el juego de

entidades A y el B, la cardinalidad puede ser:



Uno a uno



Uno a muchos ó muchos a uno



Muchos a muchos

1. Asociación: Especifica una relación semántica entre objetos no relacionados. Este tipo de relaciones permiten crear asociaciones  que capturen los participantes en una relación semántica.
Es una relación entre clases. Implica una dependencia semántica. Son relaciones del tipo «pertenece_a» o «está_asociado_con». Se da cuando una clase usa a otra clase para realizar algo.
Por ejemplo, una clase Biblioteca podría tener una asociación uno a muchos con una clase Libro, indicando que cada instancia de Libro pertenece a una instancia de Biblioteca.

2. Dependencia: es un concepto de la programación orientada a objetos que nos indica la relación existente entre dos clases. Como su nombre indica nos está diciendo que una clase depende de otra para realizar su funcionamiento. Cuando trabajamos con clases es una buena práctica que una clase realice una única función.
Ej: Una clase ecuación solicita usa en sus métodos funciones del modulo math

3. Agregación/Composición: Esta relación se presenta entre una clase TODO y una clase PARTE que es componente de TODO. La implementación de este tipo de relación se consigue definiendo como atributo un objeto de la otra clase que es parte-de.

Los objetos de la clase TODO son objetos contenedores. Un objeto contenedor es aquel que contiene otros objetos.
- La agregación es una asociación binaria que representa una relación todo-parte (pertenece a, tiene un, es parte de). Los elementos parte pueden existir sin el elemento contenedor y no son propiedad suya. Por ejemplo, un centro comercial tiene clientes o un equipo tiene unos miembros. El tiempo de vida de los objetos no tiene por qué coincidir.
- La composición es una agregación fuerte en la que una instancia ‘parte’ está relacionada, como máximo, con una instancia ‘todo’ en un momento dado, de forma que cuando un objeto ‘todo’ es eliminado, también son eliminados sus objetos ‘parte’. Por ejemplo: un rectángulo tiene cuatro vértices, un centro comercial está organizado mediante un conjunto de secciones de venta...

4.La herencia es una propiedad que permite a los objetos ser construidos a partir de otros objetos, es decir, la capacidad de un objeto para utilizar estructuras de datos y métodos presentes en sus antepasados.
Tipos:

1. Herencia simple: Una clase puede tener sólo un ascendente. Es decir una subclase puede heredar datos y métodos de una única clase base.

2. Herencia múltiple: Una clase puede tener más de un ascendente inmediato, adquirir datos y métodos de más de una clase.

Representación:

En el diagrama de clases se representa como una asociación en la que el extremo de la clase base tiene un triángulo.

# data[].attributes.body
Hay 6 tipos principales de relaciones entre clases: herencia, realización/implementación, composición, agregación, asociación y dependencia.

1. Herencia: la subclase hereda todas las funciones de la madre y la clase principal tiene todos sus atributos, métodos y subclases

2. Implementación. La implementación se utiliza para especificar la relación entre las interfaces y las clases de implementación

3. Composición. La relación entre el todo y una parte, pero sin posibilidad de separación. Human (body/head)

4. Agregación. La relación entre el todo y una parte, pero con posibilidad de separación. Human (body/head)

5. Asociación. Una propiedad de una clase contiene una referencia a una instancia(s) de otra clase. Hay 4 tipos.

6. Dependencia. Las dependencias se reflejan en  los métodos de una clase que utilizan el objeto de otra clase como parámetro

Fuente: ¿Cuáles Son Los Seis Tipos De Relaciones En Los Diagramas De Clases UML? - Visual Paradigm Blog Español (visual-paradigm.com)

# data[].attributes.body
Hay diferentes tipos de relaciones:

1. Asociación (conexión entre clases)

2. Dependencia (relación de uso)

3. Generalización/especialización (relaciones de herencia)

CARDINALIDAD: Forma de relacionar cada entidad a otras entidades. (Imagen superior)

Tipos:

Uno a uno:  Se da cuando un elemento A se relaciona con una entidad B

Uno a muchos: Una entidad se relaciona a con cero a varias entidades.

Mucho a Muchos:  Una entidad se relaciona con 0 o varios registros de la entidad B, y cuando la entidad B se relaciona con uno o varios registros de A

fuente: http://contenidos.sucerman.com/nivel2/web1/unidad2/leccion3.html

# data[].attributes.body
Fundamentos para caracterizar las relaciones:

1. Tiempo de vida de los objetos que se deriven de las clases.

2. Grado de dependencia o cohesión entre los objetos.

La cardinalidad de una relación especifica el número de objetos de la clase de origen que se pueden relacionar con uno o varios objetos en la clase de destino. Representa cuántos objetos de una clase se van a relacionar con objetos de otra clase.

Los cuatro tipos de relaciones más comunes que se dan entre clases:

1. Herencia (generalización/ especialización): la herencia nos permite definir una clase que hereda todos los métodos y propiedades de otra clase. La clase padre (parent class) es la clase de la que se hereda, también llamada clase base. La clase hija (child class) es la clase que hereda de otra clase, también llamada clase derivada.

2. Composición: La Composición es un tipo de relación de alto grado de dependencia entre la clase contenedora (Persona) y las clases que la componen (Cabeza, Tórax, Pierna, etc.), es decir, cuando se crea una instancia de la clase contenedora, deben crearse, como parte de su conformación, instancias de los objetos que la componen.

3. Agregación: Representa relaciones de “uno a muchos”, “muchos a muchos” o “todo-parte” entre múltiples objetos. Bajo agregación, un objeto “tiene” un conjunto de otros objetos y sirve como un contenedor o colección.

4. Asociación: En una asociación, dos instancia de una clase A y B que  se encuentran relacionadas existen de manera independiente, es decir la creación o eliminación de una de las instancias no implica que se cree o destruya la relación del otro, solamente se crea o destruye a relación propia.

# data[].attributes.attachment_link.description
Este blog es para aprender los fundamentos de la POO utilizando el lenguaje de programación Java.

# data[].attributes.body
Las relaciones entre clases pueden deberse a un estado o comportameinto común, tambien a que la clase necesite usar otra clase.
En el documento que hemos creado lo explica mejor :D

#respuesta!

# data[].attributes.body
Existen 6 tipos de relaciones:
1) Herencia (Creación de una clase a partir de otra)
2) Implementación (Relación entre interfaces y funciones)
3) Composición (Clases que componen una clase más grande general, sin ellas la clase deja de exisitir)
4) Agregación (añadir información a una clase sin ellas la clase se mantiene)
5) Asociación (Conexión entre objetos y la más utilizada)
6) Dependencia ( Una clase necesita de la clase padre para existir Animal-gato)

Cardinalidad:

Representa cuántos objetos de una clase se van a relacionar con objetos de otra clase. En una relación hay dos cardinalidades, una para cada extremo de la relación y pueden tener los siguientes valores:

1 = Uno y solo uno

0..1 = Cero o uno

N..M = Desde N hasta M

* = Cero o varios

0..* = Cero o varios

1..* = Uno o varios (pero al menos 1)

# data[].attributes.body
Las relaciones entre los elementos utilizados en un diagrama de clases se define mediante líneas o flechas. Dichas relaciones pueden ser de:

Asociación

Dependencia

Generalización / Especialización (Herencia)

Realización

- En la Asociación se especifica que dos clases u objetos están relacionados pero siendo un elemento independiente del otro.

Mediante la multiplicidad o cardinalidad se indica cuántas instancias de una clase pueden surgir fruto de la relación, y se indican mediante:

1 --> sólo uno

0..1 --> cero o uno

n --> mediante un número entero se indica cuántas relaciones pueden haber.

n..m --> varios a varios

* --> cero o más

0..* --> cero o más (lo mismo que el anterior)

1..* --> uno o más

Existen dos variantes de las relaciones de Asociación :  la Agregación  y la Composición.

En la Agregación el conjunto de elementos relacionados forman un "TODO", aunque los elementos relacionados podrían existir y "funcionar" independientemente de él. Se representan mediante una línea con un rombo sin relleno en un extremo.

Por otro lado la Composición es básicamente lo mismo, pero los elementos relacionados no podrían existir y "funcionar" independientemente si no formasen parte de dicho "TODO". Se representan mediante una línea con un rombo con relleno en un extremo.

- En la Dependencia entre dos clases uno de los elementos es dependiente ('Coche'  -- >  Motor) del otro, viéndose afectado por los cambios que se produzcan en él y no pudiendo funcionar correctamente si le falta

- En cuanto a la Generalización, indica una relación de herencia entre dos clases u objetos (el elemento hijo comparte la misma estructura que el elemento padre)

- Mediante la Realización uno de los elementos define características que deberá desarrollar el que lo implemente. En los diagramas de clases se utilizan para representar las relaciones con interfaces.

Fuente: https://informaticapc.com/poo/uml.php#rel1

# data[].attributes.body
Los objetos de una clase pueden relacionarse con objetos de otra clase.

Tipos de relaciones entre clases (ver imagen).

Asociación:  las instancias de un elemento del modelo están conectadas a instancias de otro elemento del modelo.

Agregación: una clase es parte de otra clase.

Composición: una instancia de una clase contiene instancias de otras clases que implementan las funciones deseadas.

Uso: los objetos tienen una relación no persistente (tras la misma, se termina todo contacto entre los objetos).

Generalización:  un elemento del modelo es una especialización de otro elemento del modelo.

https://www.ibm.com/docs/pt-br/rsas/7.5.0?topic=diagrams-relationships-in-class

# data[].attributes.body
Existen distintos tipos de relaciones:
- Asociación (conexión entre clases)
- Dependencia (relación de uso)
-Generalización/especialización (relaciones de herencia)

APUNTES:
https://elvex.ugr.es/decsai/java/pdf/3C-Relaciones.pdf
https://pythones.net/clases-y-metodos-python-oop/

https://www.c-sharpcorner.com/article/types-of-relationships-in-object-oriented-programming-oops/

# data[].attributes.body
Una relación es una conexión entre dos clases que incluimos en el diagrama cuando aparece algún tipo de relación entre ellas en el dominio del problema.

Se representan como una línea continua. Los mensajes "navegan" por las relaciones entre clases, es decir, los mensajes se envían entre objetos de clases relacionadas, normalmente en ambas direcciones, aunque a veces la definición del problema hace necesario que se navegue en una sola dirección, entonces la línea finaliza en punta de flecha.

La relaciones se caracterizan por su cardinalidad, que representa cuántos objetos de una clase se pueden involucrar en la relación, y pueden ser:

De herencia.

De composición.

De agregación.

Un concepto muy importante es la cardinalidad de una relación, representa cuántos objetos de una clase se van a relacionar con objetos de otra clase. En una relación hay dos cardinalidades, una para cada extremo de la relación y pueden tener los siguientes valores: (foto 1 )

# data[].attributes.body
- Asociación (conexión entre clases): conexión entre dos objetos o clases (unidireccional , bidireccionales).

Una relación es una asociación entre diferentes entidades. Es un vínculo que nos permite definir una dependencia, es decir, nos permite exigir que varias entidades compartan ciertos atributos de forma indispensable.
Si tomamos como ejemplo la entidad “Estudiante” y la entidad “Libros” dentro del contexto de un colegio, podríamos ver que entre estas existe una relación, la cual llamaremos “Prestar”, dado que el estudiante presta libros y análogamente estos libros son prestados por estudiantes.

- Dependencia (relación de uso):

Relación (más débil que una asociación) que muestra la relación entre un cliente y el proveedor de un servicio usado por el cliente:
1.- Cliente es el objeto que solicita un servicio.
2.- Servidor es el objeto que provee el servicio solicitado

- Generalización/especialización (relaciones de herencia):
La relación entre una superclase y sus subclases (hereda métodos y atributos de las superclases).

- Cardinalidad:

Llamada también multiplicidad. Indica la cantidad de elementos o instancias de una entidad A que se relacionan con una instancia de una Entidad B y viceversa. Esta puede ser de 3 tipos:

Uno a Uno (1:1).
Uno a Muchos (1:M).
Muchos a Muchos (N:M).

Fuente:
https://elvex.ugr.es/decsai/java/pdf/3C-Relaciones.pdf

http://contenidos.sucerman.com/nivel2/web1/unidad2/leccion2.html

# data[].attributes.body
Cardinalidad: indica cuántas instancias de una clase pueden surgir fruto de la relación entre dos clases u objetos.
En una relación hay dos cardinalidades, una para cada extremo de la relación y pueden tener los siguientes valores:

1 --> sólo uno

0..1 --> cero o uno

n --> mediante un número entero se indica cuántas relaciones pueden haber.

n..m --> varios a varios

* --> cero o más

0..* --> cero o más (lo mismo que el anterior)

1..* --> uno o más

Cuando la multiplicidad mínima es cero, indica que la relación es opcional. Cuando es uno, la multiplicidad mínima es mayor o igual a uno indica que la relación es obligatoria.

fuente: https://informaticapc.com/poo/uml.php

# data[].attributes.body
-Asociación: Una asociación es una relación estructural que describe una conexión entre objetos. Suelen ser bidireccionales pero es importante a veces hacerlas unidireccionales para restringir su navegación en un solo sentido.

-Dependencia: Relación (más débil que una asociación) que muestra la relación entre un cliente y el proveedor de un servicio usado por el cliente.

-Herencia: (generalización y especialización) La relación entre una superclase y sus subclases.

(Fuente: https://elvex.ugr.es/decsai/java/pdf/3C-Relaciones.pdf )

+ La cardinalidad de una relación es el número de filas relacionadas de cada uno de los objetos en la relación. Las filas se relacionan mediante la expresión de la relación; normalmente, esta expresión hace referencia a las claves principal y foránea de las tablas subyacentes.

(Fuente:IBM)

# data[].attributes.body
Hay diferentes tipos de relaciones entre clases:
- Asociación (conexión entre clases)
- Multiplicidad / Cardinalidad
- Dependencia (relación de uso)
- Generalización / Especialización (relaciones de herencia)

Asociación:
Diremos que dos (o más) clases tiene una relación de asociación cuando una de ellas tenga que requerir o utilizar alguno de los servicios (es decir, acceder a alguna de las propiedades o métodos) de las otras.

Cardinalidad:
La cardinalidad de una relación representa cuántos objetos de una clase se van a relacionar con objetos de otra clase. Cuando se crea una clase de relación, se crea con las cardinalidades de uno a uno, de uno a muchos o de muchos a muchos. Si la cardinalidad de un conjunto es un número entero, entonces el conjunto se dice que es finito. De lo contrario, el conjunto se dice que es infinito.

Agregación y composición

Aunque la herencia de clases nos permite modelar una gran cantidad de casos de uso en términos de «is-a» (es un), existen muchas otras situaciones en las que la agregación o la composición son una mejor opción. En este caso una clase se compone de otras cases: hablamos de una relación «has-a» (tiene un).

Hay una sutil diferencia entre agregación y composición:

La composición implica que el objeto utilizado no puede «funcionar» sin la presencia de su propietario.

La agregación implica que el objeto utilizado puede funcionar por sí mismo.

# data[].attributes.attachment_link.description
Existen distindos tipos de relaciones entre clases, entre ellas tenemos: Asociación (conexión entre clases) Dependencia (relación de uso) Generalización/especialización (relaciones de herencia) Una asociación es una relación estructural que describe una conexión entre objetos. En la figura 1 podemos observar una relación entre la clase Cliente y la clase Dirección.

# data[].attributes.body
Las relaciones pueden ser de:

Asociación (se refiere a la relación entre clases u objetos no dependientes entre sí mediante multiplicidad o cardinalidad)

Dependencia (se refiere a una relación en la que sí dependen el uno del otro, por ejemplo, "persona" y "corazón")

Generalización (relación de herencia entre dos clases u objetos)

Realización (instancialización de esa clase)

Hay otro tipo de relaciones Agregación y Composición.

Fuente: https://informaticapc.com/poo/uml.php

# data[].attributes.attachment_link.readable_text
Cuando para el desarrollo de una aplicación se decide utilizar un lenguaje de programación orientado a objetos, para representar de forma visual tanto las clases que serán utilizadas como las relaciones existentes entre ellas se usa el lenguaje UML (Unified Modeling Language, o Lenguaje de Modelado Unificado en español), que define una serie de reglas para crear diagramas UML.

Si te encuentras leyendo esto porque deseas aprender a programar de forma autodidacta, debes tener claro que antes de comenzar a escribir la primera línea de código fuente es muy recomendable (sino imprescindible muchas veces) realizar previamente un análisis del problema a resolver, así como de los requisitos y pasos que debe cumplir la aplicación para que una vez finalizada cumpla con su objetivo sin que se produzcan errores.

Con UML se pueden crear los siguientes tipos de diagramas:

Estáticos

De clases: modelan la estructura estática de las clases.

De objetos: para modelar la estructura estática de los objetos.

De componentes: para modelar los componentes.

De despliegue: modelan la distribución del sistema.

Dinámicos

De casos de uso: modelan los procesos de negocio.

De secuencia: modelan el traspaso de mensajes entre objetos.

De colaboración: representan las interacciones entre los objetos.

De estados: representan el comportamiento de casos de uso, objetos y operaciones.

De actividades: modelan el comportamiento de los casos de uso, objetos u operaciones

El objetivo del presente tutorial es enseñarte algunos de los conceptos básicos necesarios para que puedas comenzar a crear tus propios diagramas, sin detenernos a explicar conceptos de la Programación Orientada a Objetos (consulta para ello el capítulo anterior).

Asimismo, antes de lanzarte a la aventura de crear tus propios programas es imprescindible que tengas también claro el resto de lo explicado anteriormente en nuestro curso de Teoría de la Programación.

Por último, para crear los diagramas puedes utilizar los programas gratuito ArgoUML, StarUML, OpenAmeos o Umbrello UML Modeller por ejemplo.

Pongamos por ejemplo una Clase 'Coche' que tiene como atributos o propiedades 'marca', 'modelo', 'bastidor'... y como métodos 'arrancar()', 'acelerar()'...

Las clases se representan escribiendo como encabezado en un rectángulo el nombre de la misma, seguido por los nombres de los atributos y a continuación los de sus acciones o métodos.

El nombre de la clase comenzará con letra mayúscula. Cuando se trate de palabras compuestas se unen ambas quedando en mayúscula la primera letra de cada una de ellas:

Los nombres de atributos y métodos comienzan con letra minúscula. Cuando se trate de palabras compuestas se unen quedando sólo en mayúscula la primera letra de la segunda palabra.

El signo '-' delante de sus nombres indica que su visibilidad es privada (private) y el '+' que es pública (public). Cuando es protegido (protected) se utiliza la almohadilla '#'. Si estamos utilizando lenguajes como Java con '~' indicamos que la visibilidad es sólo a nivel del paquete en el que se encuentra la clase.

Por otro lado, para representar una Clase abstracta (abstract) escribiremos sobre su nombre en cursiva:

Asimismo, se escriben en cursiva los nombres de los métodos que no se encuentren implementados en la misma, debiendo serlo en las clases que hereden de ella (puede tener algunos ya implementados pero otros que no lo estén).

Para representar una Instancia u objeto de una Clase escribiremos en el encabezado el nombre del mismo (comenzando con minúscula) seguido por dos puntos y a continuación el nombre de la clase:

Las Interfaces se representan escribiendo el nombre en cursiva y opcionalmente sobre él , constando también los nombres de los métodos que deberán ser definidos en la clase que la implemente (en la interface no se implementa ninguno):

También se puede representar mediante un círculo y escribiendo su nombre junto a él:

Las relaciones entre los elementos utilizados en un diagrama de clases se define mediante líneas o flechas. Dichas relaciones pueden ser de:

Asociación

Dependencia

Generalización

Realización

Cada tipo de relación se representa en un diagrama con un tipo de flecha:

En la Asociación se especifica que dos clases u objetos están relacionados pero siendo un elemento independiente del otro.

Mediante la multiplicidad o cardinalidad se indica cuántas instancias de una clase pueden surgir fruto de la relación, y se indican mediante:

1 --> sólo uno

0..1 --> cero o uno

n --> mediante un número entero se indica cuántas relaciones pueden haber.

n..m --> varios a varios

* --> cero o más

0..* --> cero o más (lo mismo que el anterior)

1..* --> uno o más

Observa los siguientes ejemplos:

En el primer ejemplo de la imagen se define que una instancia de 'Persona' puede estar relacionada sólo con una de 'Color', que a su vez puede estar relacionada con varias instancias de 'Persona'.

En el segundo, una instancia de 'Club' puede estar relacionada con varias de 'Persona', y cada una de ellas puede estar relacionada con varias de 'Club'.

En el tercero, una instancia de 'Equipo' puede estar relacionada con 11 instancias de 'Jugador', y cada una de ellas a su vez con sólo una de 'Equipo'.

Por otro lado, si la asociación es entre objetos de la misma clase nos encontramos ante un asociación reflexiva. En la imagen se muestra que un empleado jefe está relacionado con ninguno o varios empleados, y que un empleado tiene sólo un jefe:

En la Dependencia entre dos clases uno de los elementos es dependiente ('Coche' según la imagen de ejemplo) del otro, viéndose afectado por los cambios que se produzcan en él y no pudiendo funcionar correctamente sin le falta:

Ello no implica que el elemento dependiente deba obligatoriamente contener al otro como uno de sus atributos (puede que lo necesite como parámetro o que lo utilice en un método, por ejemplo).

En lugar de la Dependencia es recomendable definir la relación como Asociación, a menos que sea importante representarla como tal debido a que un cambio en un elemento del que depende(n) otro(s) pueda afectar al funcionamiento del elemento dependiente.

En cuanto a la Generalización, indica una relación de herencia entre dos clases u objetos (el elemento hijo comparte la misma estructura que el elemento padre):

Mediante la Realización uno de los elementos define características que deberá desarrollar el que lo implemente. En los diagramas de clases se utilizan para representar las relaciones con interfaces.

En la siguiente imagen de ejemplo se representa cómo dos clases implementan la interfaz 'IPersona':

La relación se puede representar también la clase con la interface representada mediante un círculo. De este modo también indica que la clase 'Profesor' exporta la interfaz 'IPersona':

Aparte de las comentadas en el punto anterior existen dos variantes de las relaciones de Asociación y que dadas su definiciones suelen resultar algo confusas: Agregación y Composición.

En la Agregación el conjunto de elementos relacionados forman un "TODO", aunque los elementos relacionados podrían existir y "funcionar" independientemente de él. Se representan mediante una línea con un rombo sin relleno en un extremo.

En este ejemplo, si los departamentos de una institución educativa cerrasen los profesores continuarían existiendo como tales (el departamento al estar conectado por el rombo representa el "TODO"):

Por otro lado la Composición es básicamente lo mismo, pero los elementos relacionados no podrían existir y "funcionar" independientemente si no formasen parte de dicho "TODO". Se representan mediante una línea con un rombo con relleno en un extremo.

Según la imagen de ejemplo, el cierre de la universidad provocaría que desapareciesen también los departamentos (la universidad al estar conectada con el rombo representa el "TODO"):

Si deseamos agregar algún texto con información a nuestros diagrama de clases y objetos, insertaremos el mismo en un rectángulo con una de sus esquina doblada:

Las notas pueden estar en cualquier parte del diagrama sin mantener relación con ningún elemento en particular, aunque se utilizar una línea discontínua para especificar a qué elemento hacen referencia:

# data[].attributes.attachment_link.description
Cuando para el desarrollo de una aplicación se decide utilizar un lenguaje de programación orientado a objetos, para representar de forma visual tanto las clases que serán utilizadas como las relaciones existentes entre ellas se usa el lenguaje UML (Unified Modeling Language, o Lenguaje de Modelado Unificado en español), que define una serie de reglas para crear diagramas UML.

# data[].attributes.body
Investigar acerca de las relaciones entre clases y los tipos de relaciones que existen (cardinalidad).

# data[].attributes.body
relación entre clases: nos indican cómo se comunican las relaciones existentes de esas clases entre sí.

Las relaciones entre clases pueden deberse a un estado o comportamiento común, también a que la clase necesite usar otra clase. Aunque algunas clases pueden existir de forma aislada, la mayoría no pueden y deben cooperar unas con otras.

Tipos de relación:
- Asociacion. Dos clases que siendo independientes, están relacionadas para cumplir metas. Ex: Cliente- Orden de Compra
- dependencia. Una de las clases es dependiente de la otra. Cuerpo depende de su corazón
- generalizacion/herencia. Una clase hereda de otra. Perro de Animal
-Composición. Una clase está compuesta por otra, ordenador hecho de piezas

# data[].attributes.headline
Relaciones entre clases - cardinalidad SALA 18

# data[].attributes.subject
Relaciones entre clases - cardinalidad SALA 18

# data[].attributes.body
Distintas clases se pueden comunicar entre sí y colaborar por medio del paso de mensajes.

Cardinalidad o multiplicidad de la relación Un concepto muy importante es la cardinalidad de una relación, representa cuántos objetos de una clase se van a relacionar con objetos de otra clase. En una relación hay dos cardinalidades, una para cada extremo de la relación y pueden tener los siguientes valores:

Cardinalidad Significado
1 → Uno y sólo uno
0..1 → Cero o uno
N..M → Desde N hasta M
* → Cero o varios
0..* → Cero o varios
1..* → Uno o varios (al menos uno)

Existen distintos tipos de relaciones:

- Asociación/agregación (conexión entre clases) persona > dirección (usa un). Cuando una clase tiene que acceder a los atributos o métodos de otra clase. Crean enlaces entre objetos. La mejor forma de identificar si nos encontramos ante una relación de
agregación es preguntarnos si la clase que queremos definir “tiene un” (en
inglés, “has - a”) atributo de la otra clase que estemos usando (de ahí que en
ciertas referencias se definan como relaciones “has - a”).

- Dependencia/Composición (relación de uso) casa > habitación (tiene un)

- Generalización/Especialización (relaciones de herencia) animal > perro (es un)