Check the new version here

Popular channels

Entra y te explico las relaciones entre clases [UML]






Hablemos un poco sobre POO y UML: una de las primeras cosas que se tocan al aprender sobre la Programación Orientada a Objetos es la parte de UML (un lenguaje que nos permite el modelado de sistemas) que generalmente comienza por definir las relaciones que pueden existir entre las clases involucradas en nuestro proyecto.

Es muy importante conocer los conceptos básicos de POO para entender el tema de relaciones entre clases.


  • Asociación
  • Dependencia
  • Agregación
  • Composición
  • Generalización

A términos prácticos, veamos a una clase como una plantilla para construir objetos; eventualmente nos daremos cuenta que dichas plantillas pueden necesitar de otras plantillas para generar dichos objetos de alguna u otra manera. Si nosotros nos encontramos en la parte del diseño del sistema entonces nos vendrá de maravilla conocer las siguientes relaciones entre clases y saber diferenciarlas:

Relaciones entre clases: Asociación

La asociación indica cuando una clase está ligada a otra, esto es que una primera clase necesita de cierta información de la segunda clase pero su existencia no se ve afectada si una de estas clases no existe. Aquí se hace uso de la cardinalidad, que indica la cantidad de objetos que podrán ser utilizados. Ejemplo:

Un vendedor puede tener uno o más locales de comida distribuidos por la ciudad, pero cada local pertenecen única y exclusivamente a ese vendedor.


¿Por qué se utiliza una asociación?: porque el vendedor puede inclusive tener cero locales y existir en nuestro sistema hasta que consiga el dinero suficiente y pueda crear uno. Como la clase LocalComida no es parte esencial del vendedor (no es un órgano vital o algo por el estilo que le permita existir) entonces se considera a esto como una asociación.

Relaciones entre clases: Dependencia

La dependencia es una relación que indica cuando una clase depende de otra clase para funcionar. Ejemplo:

Una aplicación escrita en Python necesita de una computadora para funcionar.


¿Por qué se utiliza una dependencia?: porque a simples rasgos sería imposible correr una aplicación escrita en Python en un ordenador que no existe. ¿O cómo correrías esa aplicación, por ejemplo, para robarle el Wi-Fi a tu vecino? No vale decir que los correrías en un smartphone o algún dispositivo como un Raspberry Pi, porque a final de cuentas son eso, computadoras.

Relaciones entre clases: Agregación

La agregación es utilizada cuando una clase se compone de otras clases, aunque si quitamos alguna de ellas entonces la primera seguirá funcionando normalmente. Ejemplo:

Una escuela tiene cafetería y biblioteca, aunque si destruimos alguna de ellas entonces sigue siendo escuela.


¿Por qué se utiliza una agregación?: porque si quitamos alguna de ellas, por ejemplo la cafetería, seguirá siendo escuela porque su propósito es para impartir clases, no para hacer juntadas con los amigos a la hora del desayuno y ver cómo Argentina se culea a México en el Mundial Brasil 2014.

Relaciones entre clases: Composición

La composición es muy similar a la relación anterior, con la diferencia de que si una clase hace falta entonces la principal se verá afectada. Ejemplo:

Una escuela se compone de aulas. Si no tuviera aulas entonces ¿qué sería?


¿Por qué se utiliza una composición?: porque una escuela siempre tendrá aulas para ser escuela, sin importar el estado de éstas. Es cierto que una escuela obligatoriamente tiene también alumnos y profesores, pero ¿recuerdas el concepto de abstracción en POO? En este caso estamos mirando todo respecto al punto de vista físico, no organizacional.

Relaciones entre clases: Generalización

La generalización es posiblemente la relación más importante ya que hace uso de uno de los conceptos base de la POO: la herencia. Ejemplo:

Un blog, un foro y una red social son distintos tipos de sitios web. Todos tienen, al menos, un nombre y un dominio como por ejemplo MultiAportes (multiaportes.com), Evoshare (evoshare.net) y Twitter (twitter.com)


¿Por qué se utiliza una generalización?: porque todo sitio web tiene, entre otras cosas, un nombre y un dominio propios, además de que cada uno de ellos tiene sus particularidades, por ejemplo un blog tiene artículos, un foro tiene hilos de discusión y una red social tiene listas de contactos. Por cierto, puede que en algunas cosas existan similitudes pero en realidad se consideran distintas por el variado funcionamiento que tiene cada plataforma web.

Para finalizar

Después de haber escrito todo esto, debo decir que la fuente ha sido principalmente los apuntes de mis materias de Programación Orientada a Objetos y Análisis y Diseño Orientado a Objetos, junto a ejemplos propios que se me ocurrieron en el momento.

Espero que todo esto te sea de ayuda y te ayude a comprender rápidamente las diferencias entre las relaciones entre clases.

0
0
0
2
0No comments yet
      GIF
      New