Relaciones Entre - Clases C# Y UML

C# Y UML DEPENDENCIA Definición: Es una relación de uso entre dos clases (una usa a la otra). Esta relación es la más

Views 120 Downloads 23 File size 906KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

C# Y UML

DEPENDENCIA Definición: Es una relación de uso entre dos clases (una usa a la otra). Esta relación es la más básica entre clases y comparada con los demás tipos de

relación, la más débil. Es una relación de uso, es decir que una clase utiliza a otra. Y si esta ultima se altera, la anterior se puede ver afectada. En código se suelen traducir principalmente como las clases donde se hace la instanciación de un objeto. En nuestro ejemplo l a clase viaje realiza los new de los distintos objetos. En este momento puede que te preguntes como puede hacer un new de una clase abstracta, jeje. No realiz a los new de la clase abstracta, si no de sus hijas. Seria algo así como MedioDeTransporte medio = new Auto(); También se sostiene que este tipo de relación hace referencias, a los parámetros que se pasan en un método, bajo este concept o, en java, podría ser algo así como: public void crearViaje(MedioDeTransporte medio) {} Por ultimo también se sostiene que podemos codificar esta relación realizando un return del tipo de dato en algún método. Representación UML

Se representa con una flecha discontinua que parte desde una clase y apunta a otra. El sentido de la flecha nos indica quien usa a quien.

Interpretación    

La ClaseA usa a la ClaseB. La ClaseA depende de la ClaseB. Dada la dependencia, todo cambio en la ClaseB podrá afectar a la ClaseA. La ClaseA conoce la existencia de la ClaseB pero la ClaseB desconoce que existe la ClaseA.

En la práctica este tipo de relación se interpreta como que la ClaseA hace uso de la ClaseB ya sea instanciandola directamente, o bien, recibiéndola como parámetro de entrada en uno de sus métodos. Implementación

 Tenemos una clase Impresora..  Tenemos una clase Documento con un atributo texto.  La clase Impresora se encarga de imprimir los Documentos

Traduciendo a código: class Impresora { Traduciendo a código: Class Documento { private String texto; public Documento(String texto) { this.texto = texto; }

En funcionamiento public String getTexto() {

} return this.texto; Documento miDocumento = new Documento("Hello World!"); } Impresora miImpresora = new Impresora(); } miImpresora.imprimir(miDocumento);

public Impresora() { } public void imprimir(Documento documento) { String texto = documento.getTexto(); System.out.println(texto); }

ASOCIACION Definición: Es una relación uni direccional de estructura entre clases en la que una entidad se construye a partir de otra u otras. Se representa con una flecha continua qu e parte desde una clase y apunta a otra. El sentido de la flecha nos indica la clase que se compone (base de la flecha) y sus c omponentes (punta de la flecha). Representación UML

Interpretación    

La ClaseA depende de la ClaseB. La ClaseA está asociada a la ClaseB. La ClaseA conoce la existencia de la ClaseB pero la ClaseB desconoce que existe la ClaseA. Todo cambio en la ClaseB podrá afectar a la ClaseA.

Esto significa que la ClaseA tendrá como atributo un objeto o instancia de la ClaseB (su componente). La ClaseA podrá acceder a las funcionalidades o atributos de su componente usando sus métodos. Implementación 1. 2. 3. 4.

Tenemos una clase Taxi con un atributo matricula. Tenemos una clase Chofer con un atributo nombre. Cada Taxi necesita ser conducido por un Chofer. Taxi necesita acceder a algunos de los atributos de su Chofer (por ejemplo, su nombre).

Traduciendo a código (Direccional): Traduciendo a código (Bidireccional): class Chofer { private String nombre; } public Chofer(String nombre) { this.nombre = nombre; } class Taxi { private Chofer chofer; private String matricula; }

En funcionamiento Chofer miChofer = new Chofer("Pedro"); Taxi miTaxi = new Taxi(miChofer, "AHJ-1050"); miTaxi.printChofer(); miTaxi.printMatricula();

class Chofer { private String nombre; private Taxi taxi; } class Taxi { private Chofer chofer; private String matricula; }

AGREGACION Definición: Es muy similar a la relación de Asociación solo varía en la multiplicidad ya que en lugar de ser una relación "uno a uno" es de "uno a muchos". Representación UML

Se representa con una flecha que parte de una clase a otra en cuya base hay un rombo de color blanco.

Interpretación



La ClaseA agrupa varios elementos del tipo ClaseB



La forma de traducir ambos tipos de relación a código es tener un atributo en la clase compuesta donde almacenaremos una colección de los objetos que la componen. Dependiendo del lenguaje podremos utilizar diferentes estructuras de datos que nos permitan almacenar la colección de objetos, aunque generalmente se utilizan arreglos para este fin. Además, debemos de proporcionar un método para agregar elementos a la colección.

Implementación   

Tenemos una clase Agenda. Tenemos una clase Contacto. Una Agenda agrupa varios Contactos.

Traduciendo a Código

Traduciendo a código:

Traduciendo a código:

class Agenda { private Contactos contactos[]; public Construct() { }

Class Contacto { private nombre; private $_telefono; public Construct(nombre, telefono) { this.nombre = nombre; this.telefono = telefono; } }

En funcionamiento /* Creamos una instancia de Agenda */ $miAgenda = new Agenda(); /* Agregamos algunos Contactos*/ $miAgenda->addContacto(new Contacto("Pepe", "3-21-54-87")); $miAgenda->addContacto(new Contacto("Juan", "3-32-65-98")); $miAgenda->addContacto(new Contacto("Luis", "3-78-13-46"));

public addContacto(Contacto contacto) { This.contactos[] = contacto; } }

COMPOSICION Definición: Similar a la relación de Agregación solo que la Composición es una relación mas fuerte. Aporta documentación conceptual ya que es una "relación

de vida", es decir, el tiempo de vida de un objeto está condicionado por el tiempo de vida del objeto que lo incluye. Representación: Se representa con una flecha que parte de una clase a otra en cuya base hay un rombo de color negro.

Interpretación   

La ClaseA agrupa varios elementos del tipo ClaseB. El tiempo de vida de los objetos de tipo ClaseB está condicionado por el tiempo de vida del objeto de tipo ClaseA. Se crea un objeto de la claseA, el cual estra compuesto por uno o mas objetos de la claseB, ClaseC, tec.

Implementación   

Tenemos un objeto automovil clase Automovil. Un objeto Automovil está a su vez compuesto por un motor objetos del tipo Motor y un obejto estereo de tipo Estero. El tiempo de vida de los objetos automóvil y estéreo dependen del tiempo de vida del objeto automovil, ya que si no existe un automovil no pueden existir su motor, ni su estereo.

Traduciendo a Código

public class Automovil{ public Motor motor; // Referencias a la clase Motor public Estereo estéreo; // Referencia a la clase Estero public Automovil (){ // Se define el Constructor motor = new Motor () // Se instancia un obejeto de la clase Motor estereo = new Estereo () // Se instancia un obejeto de la clase Estereo } } Por tanto, al crear un objeto Automovil, se crea (estará compuesto) con los objetos motor y estéreo.

REALIZACIÓN (Interface) Definición: Es una relación de contrato con otra clase. Se la utiliza para implementar una interfaz. En lenguajes como java o php utilizamos la palabra reservada implements, pero en C# se implementa igual que la herencia.

Traduciendo a Código en Java public interface ICascador { public void cascarNueces(); } class Zapato implements ICascador { private int talla; private String color; public void cascarNueces() { System.out.println("Crick Crack"); } } Traduciendo a Código en C# public interface ICascador { public void cascarNueces(); } class Zapato:ICascador { private int talla; private String color; public void cascarNueces() { System.out.println("Crick Crack"); } }