Está en la página 1de 17

LAB-121 Laboratorio de INF-121

TEMA 4 : AGREGACION Y COMPOSICION

La agregación es una forma fuerte de asociación, es una clase de asociación con que se modelan
las relaciones de parte-todo entre las cosas. Al todo generalmente se le llama compuesto, en
cambio, las partes no tienen nombre estándar suele designarse simplemente como parte o
componente.

COMPOSICIÓN
Composición es una forma fuerte de composición donde la vida de la clase contenida debe
coincidir con la vida de la clase contenedor. Los componentes constituyen una parte del objeto
compuesto. De esta forma, los componentes no pueden ser compartidos por varios objetos
compuestos. La supresión del objeto compuesto conlleva la supresión de los componentes.

En la composición la vida de la parte coincide (o es un subintervalo) de la vida del todo. Es el todo


quien se tiene que encargar de construir y destruir la parte y la parte no podrá ser compartida por
ningún otro elemento.

El símbolo de composición es un diamante de color negro colocado en el extremo en el que está la


clase que representa el “todo” (Compuesto).

Por ejemplo, un dedo es parte de no más de una mano y una mano puede contener cero o más
dedos. Un dedo solo puede existir dentro de una mano, por lo que la vida del dedo estará
restringida a la vida de la mano que lo posee.

Mano Dedo

Ejemplo:
 Tenemos una clase Empresa.
 Un objeto Empresa está a su vez
compuesto por uno o varios objetos
del tipo empleado.
 El tiempo de vida de los objetos
Empleado depende del tiempo de
vida de
 Empresa, ya que si no existe una
Empresa no pueden existir sus
empleados.

Lic. Carmen R. Huanca Quisbert


Página 1
LAB-121 Laboratorio de INF-121

El Todo

Parte A Parte B Parte C

Parte El Todo
class parte class Eltodo
{ { //Atributos
//Atributos private tipo atributo;
private tipo atrib; …….
..... //Objetos
//Constructor por defecto private parte objeto = new parte ();
public garaje () .....
{ //Constructor por defecto
atrib = dato; public Eltodo()
... {
} atributo = dato;
//Constructor con argumentos }
public parte (argumentos) //Constructor con argumentos
{ public Eltodo (argumentos)
atrib = argumento; {
…… atributo =argumento;
} }
//Metodo //metodo
public tipo metodo (parametros) public tipo metodo (paramentros)
{ {
//sentencias //sentencia para atributos
}
} //sentencias para objetos
objeto.metodo();
}
}
Ejemplo 1
CuerpoHumano

Cabeza Tronco Extremidad

using System;
using System.Collections.Generic;

namespace AC1
{
class cabeza

Lic. Carmen R. Huanca Quisbert


Página 2
LAB-121 Laboratorio de INF-121

{
string forma;
string color;
public cabeza ()
{
forma = "REDONDA";
color = "NEGRO";
}

public void leer ()


{
Console.WriteLine("Introduzca la forma de la cabeza");
forma = Console.ReadLine();
Console.WriteLine("Introduzca el color del cabello");
color = Console.ReadLine();
}

public void mostrar ()


{
Console.WriteLine(forma);
Console.WriteLine(color);
}
}
class tronco
{
private int tamano;
public tronco ()
{
tamano = 60;
}

public void leer ()


{
Console.WriteLine("Introduzca el tamano del tronco");
try{
tamano = int.Parse(Console.ReadLine());
}
catch(Exception ex1)
{Console.WriteLine("Error!....debes introducir un numero");
tamano=50;
}
}

public void mostrar ()


{
Console.WriteLine(tamano+" cm.");
}
}

class extremidad
{
private int tamano;
private string tipo;

Lic. Carmen R. Huanca Quisbert


Página 3
LAB-121 Laboratorio de INF-121

public extremidad ()
{
tamano = 80;
tipo = "superior izquierdo";
}
public extremidad ( int t, string p)
{
tamano = t;
tipo = p;
}

public void leer ()


{
Console.WriteLine("Introduzca el tamano de la extremidad");
try{
tamano = int.Parse(Console.ReadLine());
}
catch(Exception ex2)
{Console.WriteLine("Error!...debes introducir un numero");
tamano=80;
}
Console.WriteLine("Introduzca el tipo de extremidad");
tipo = Console.ReadLine();
}

public void mostrar ()


{
Console.WriteLine(tamano);
Console.WriteLine(tipo);
}
}

class cuerpohumano
{
float peso;
int talla;
cabeza A = new cabeza ();
tronco B = new tronco ();
extremidad d1 = new extremidad ();
extremidad d2 = new extremidad (80,"Superior Derecho");
extremidad d3 = new extremidad (90,"Inferior Izquierdo");
extremidad d4 = new extremidad (90,"Inferior Derecho");

public cuerpohumano ()
{
peso = 35;
talla = 154;
}

public void leer ()


{
Console.WriteLine("Introduzca su peso");
peso = float.Parse(Console.ReadLine());
Console.WriteLine("Introduzca su talla");

Lic. Carmen R. Huanca Quisbert


Página 4
LAB-121 Laboratorio de INF-121

talla = int.Parse(Console.ReadLine());

Console.WriteLine("Introduzca datos para la cabeza");


A.leer ();
Console.WriteLine("Introduzca datos para el tronco");
B.leer ();
Console.WriteLine("Introduzca datos de las extremidades");
d1.leer ();
d2.leer ();
d3.leer ();
d4.leer ();
}

public void mostrar ()


{
Console.WriteLine(peso);
Console.WriteLine(talla);
A.mostrar ();
B.mostrar ();
d1.mostrar ();
d2.mostrar ();
d3.mostrar ();
d4.mostrar ();

}
}

class MainClass
{
public static void Main(string[] args)
{
cuerpohumano Z = new cuerpohumano ();
Z.mostrar ();
Z.leer ();
Z.mostrar ();
Console.ReadLine();

}
}
}

Lic. Carmen R. Huanca Quisbert


Página 5
LAB-121 Laboratorio de INF-121

Ejemplo 2
Libro

tapa pagina

using System;
using System.Collections.Generic;

namespace AC2
{

class tapa
{
string tipo;
string color;
string ubic;
public tapa ()
{
tipo = "carton";
color = "blanco";
ubic = "frontal";
}
public tapa (string a, string b, string c)
{ tipo = a;
color = b;
ubic = c;
}
public void leer ()
{
Console.WriteLine ("Tipo de tapa: ");
tipo = Console.ReadLine();
Console.WriteLine ("Color de tapa: ");
color = Console.ReadLine();
Console.WriteLine ("Ubicacion Frontal o Posterior: ");
ubic = Console.ReadLine();
}
public void mostrar ()
{
Console.WriteLine ("Tipo de tapa: " + tipo);
Console.WriteLine ("Color de tapa: " + color);
Console.WriteLine ("Ubicacion de la tapa: " + ubic);
}
}
class pagina
{ private string npag;
private string tam;
public pagina ()
{ npag = "i";
tam = "27x21";

Lic. Carmen R. Huanca Quisbert


Página 6
LAB-121 Laboratorio de INF-121

}
public pagina (string a, string b)
{ npag = a;
tam = b;
}
public void leer ()
{ npag = Console.ReadLine();
tam = Console.ReadLine();
}
public void mostrar ()
{
Console.WriteLine ("Numero de pagina: " + npag);
Console.WriteLine ("Tamano: " + tam);

}
}
class libro
{
private string titulo;
private string autor;
private int ned;//numero de edicion
private int cantpag;//cantidad de paginas
private tapa t1;
private tapa t2;
private pagina[] p = new pagina [100];
public libro ()
{
int i;
titulo = "Programacion";
autor = "Joyanes";
ned = 3;
cantpag = 5;
t1 = new tapa ();
t2 = new tapa ("Dura", "Azul", "Posterior");
for (i = 1 ; i <= cantpag ; i++)
p [i] = new pagina ("1", "24x20");

}
public libro (string a, string b, int c, int d, tapa e, tapa f, pagina g)
{
int i;
titulo = a;
autor = b;
ned = c;
cantpag = d;
t1 = e;
t2 = f;
for (i = 1 ; i <= cantpag ; i++)
p [i] = g;
}
public void leer ()
{
int i;
titulo = Console.ReadLine();

Lic. Carmen R. Huanca Quisbert


Página 7
LAB-121 Laboratorio de INF-121

autor = Console.ReadLine();
ned = int.Parse(Console.ReadLine());
cantpag = int.Parse(Console.ReadLine());
t1.leer ();
t2.leer ();
for (i = 1 ; i <= cantpag ; i++)
p [i].leer ();
}
public void mostrar ()
{
int i;
Console.WriteLine ("Titulo : " + titulo);
Console.WriteLine ("Autor : " + autor);
Console.WriteLine ("Numero de Edicion : " + ned);
Console.WriteLine ("Cantidad de Paginas : " + cantpag);
t1.mostrar ();
t2.mostrar ();
Console.WriteLine ("Paginas del Libro ");
for (i = 1 ; i <= cantpag ; i++)
{
Console.WriteLine ("Pagina Nro : " + i);
p [i].mostrar ();
}
Console.WriteLine("---------------o---------------o--\n\n");
}
}

class MainClass
{
public static void Main(string[] args)
{
libro A = new libro ();
tapa t = new tapa ();
pagina p = new pagina ();
libro B = new libro ("fisica", "abc", 1, 20, t, t, p);
A.mostrar ();
B.mostrar ();
A.leer ();
A.mostrar ();
}
}
}

Lic. Carmen R. Huanca Quisbert


Página 8
LAB-121 Laboratorio de INF-121
Ejemplo 3
Edificio

Departamento Oficina Garaje

using System;
using System.Collections.Generic;

namespace AC3
{
class oficina
{
private int nof;
private int npiso;
private string tipo;

public oficina ()
{
nof = 1;
npiso = 1;
tipo = "xxx";
}

public oficina (int a, int b, string c)


{
nof = a;
npiso = b;
tipo = c;
}

public void leer ()


{
Console.WriteLine ("Nro de oficina :");
nof = int.Parse(Console.ReadLine());
Console.WriteLine ("Nro de piso :");
npiso = int.Parse(Console.ReadLine());
Console.WriteLine ("tipo de oficina:");
tipo = Console.ReadLine ();
}
public void mostrar ()
{ Console.WriteLine("Nro.Oficina: " + nof);
Console.WriteLine("Nro.Piso: " + npiso);
Console.WriteLine("Tipo oficina: " + tipo);
}
}
class depart
{ private int ndpto;
private int npiso;
private int nhab;
public depart ()

Lic. Carmen R. Huanca Quisbert


Página 9
LAB-121 Laboratorio de INF-121

{ ndpto = 1;
npiso = 1;
nhab = 1;
}
public depart (int a, int b, int c)
{ ndpto = a;
npiso = b;
nhab = c;
}
public void leer ()
{
Console.WriteLine ("nro departamento:");
ndpto = int.Parse(Console.ReadLine());
Console.WriteLine ("Nro de piso :");
npiso = int.Parse(Console.ReadLine());
Console.WriteLine ("Nro de habitaciones :");
nhab = int.Parse(Console.ReadLine());

public void mostrar ()


{
Console.WriteLine("Nro.Departamento: " + ndpto);
Console.WriteLine("Nro.Piso: " + npiso);
Console.WriteLine("Nro.Habitaciones: " + nhab);

}
}
class Edificio
{ private string nombre;
private string dir;
private int npisos;
private int nofs;
private int ndptos;
private oficina[] o = new oficina [50];
private depart[] d = new depart [30];
private garaje g;
public Edificio ()
{ int i;
nombre = "zzzzz";
dir = "wwwww";
npisos = 25;
nofs = 15;
ndptos = 10;
for (i = 1 ; i <= npisos ; i++)
o [i] = new oficina ();
for (i = 1 ; i <= ndptos ; i++)
d [i] = new depart ();
g = new garaje (10, 100, "subterraneo");
}
public Edificio (string a, string b, int c, int f, int e, oficina x, depart y, garaje z)
{
int i;
nombre = a;
dir = b;

Lic. Carmen R. Huanca Quisbert


Página 10
LAB-121 Laboratorio de INF-121

npisos = c;
nofs = f;
ndptos = e;
for (i = 1 ; i <= nofs ; i++)
o [i] = x;
for (i = 1 ; i <= ndptos ; i++)
d [i] = y;
g = z;
}
public void leer ()
{
int i;
Console.WriteLine ("Nombre del edificio:");
nombre = Console.ReadLine ();
Console.WriteLine ("Direccion:");
dir = Console.ReadLine ();
Console.WriteLine ("Numero de Pisos:");
npisos = int.Parse(Console.ReadLine());
Console.WriteLine ("Cantidad de oficinas:");
nofs = int.Parse(Console.ReadLine());
Console.WriteLine ("Cantidad de Dptos:");
ndptos = int.Parse(Console.ReadLine());
Console.WriteLine("OFICINAS");
for (i = 1 ; i <= nofs ; i++)
o [i].leer ();
Console.WriteLine("DEPARTAMENTOS");
for (i = 1 ; i <= ndptos ; i++)
d [i].leer ();
Console.WriteLine("GARAJE");
g.leer ();
}
public void mostrar ()
{
int i;
Console.WriteLine("Nombre: " + nombre);
Console.WriteLine("Direccion: " + dir);
Console.WriteLine("Nro.Pisos: " + npisos);
Console.WriteLine("Numero de oficinas: " + nofs);
Console.WriteLine("Numero de departamentos: " + ndptos);
Console.WriteLine("OFICINAS ");
for (i = 1 ; i <= nofs ; i++)
o [i].mostrar ();

Console.WriteLine("DEPARTAMENTOS");
for (i = 1 ; i <= ndptos ; i++)
d [i].mostrar ();
Console.WriteLine("GARAJE");
g.mostrar ();
}

}
class garaje
{
private int nest;
private int m2;

Lic. Carmen R. Huanca Quisbert


Página 11
LAB-121 Laboratorio de INF-121

private string tipo;

public garaje ()
{
nest = 1;
m2 = 1;
tipo = "YYY";
}

public garaje (int a, int b, string c)


{
nest = a;
m2 = b;
tipo = c;
}

public void leer ()


{
Console.WriteLine ("nro de estacionamientos :");
nest = int.Parse(Console.ReadLine());
Console.WriteLine ("superficie :");
m2 = int.Parse(Console.ReadLine());
Console.WriteLine ("tipo:");
tipo = Console.ReadLine ();

public void mostrar ()


{
Console.WriteLine("Cantidad estacionamiento: " + nest);
Console.WriteLine("Area: " + m2);
Console.WriteLine("Tipo : " + tipo);

}
}
class MainClass
{
public static void Main(string[] args)
{
Edificio x, y;
x = new Edificio ();
y = new Edificio ();
x.mostrar ();
y.mostrar ();
x.leer ();
x.mostrar ();
}
}
}

Lic. Carmen R. Huanca Quisbert


Página 12
LAB-121 Laboratorio de INF-121

AGREGACION

La agregación compartida o simplemente agregación, significa que la multiplicidad en el extremo


del compuesto puede ser más de una, se denota con un diamante en blanco. Indica que la parte
puede estar en muchas instancias compuestas.

La agregación es un tipo de asociación que indica que una clase es parte de otra clase
(composición débil). Los componentes pueden ser compartidos por varios compuestos (de la
misma asociación de agregación o de varias asociaciones de agregación distintas). La destrucción
del compuesto no conlleva la destrucción de los componentes. Habitualmente se da con mayor
frecuencia que la composición.

La agregación se representa en UML mediante un diamante de color blanco colocado en el


extremo en el que está la clase que representa el “todo”.

Por ejemplo:

 Tenemos una clase Empresa.


 Tenemos una clase Cliente.
 Una empresa agrupa a varios
clientes.

Una agregación compartida es una en las que las partes pueden ser partes en cualquier todo.

El Todo

Parte 1 Parte 2 Parte 3

Parte El Todo

Lic. Carmen R. Huanca Quisbert


Página 13
LAB-121 Laboratorio de INF-121

class parte class Eltodo


{ {
private tipo atrinb1; //Atributos de la clase
....... private tipo atrib;
.......
//Constructor por defecto
public parte () // Objetos parte de la clase
{ private Parte Objeto=new Parte();
atrib1=dato; .......
}

//Constructor con argumentos //Constructor con argumentos


public parte (argumentos) public Eltodo (argumentos para atributos y
{ para objetos)
nombre = argumento; {
…. atrib = argumento atributo;
} ......
objeto=argumento objeto;
//metodo . ......
public tipo metodo (parametros) }
{ //Metodos
//sentencias public tipo metodo ()
} {
} //Sentenciass;
}
}
Por ejemplo coche(el todo) tiene cuatro ruedas(la parte). Se ha modelado como una agregación
porque la rueda puede existir antes que el coche como entidad propia o incluso después(se
desarma el coche y se dejan las ruedas) e incluso se puede cambiar alguna de las ruedas de un
coche a otro.

Coche Rueda

Un equipo se compone de diferentes miembros(personas).Una persona puede ser miembro de


muchos equipos, es decir las persona son las partes compartidas. La agregación es compartida si
la multiplicidad en el todo es distinta de uno.

Equipo Persona

Ejemplo 1
Computador

Lector Impresora

using System;
using System.Collections.Generic;

Lic. Carmen R. Huanca Quisbert


Página 14
LAB-121 Laboratorio de INF-121

namespace AC4
{
class Lectora
{
private string marca;
private int vel;
private string color;
public Lectora ()
{ marca = "eeee";
vel = 52;
color = "ssss";
}
public void Leer ()
{ Console.WriteLine ("Escriba la marca del lector ");
marca = Console.ReadLine ();
Console.WriteLine ("Escriba la velocidad ");
vel = int.Parse(Console.ReadLine());
Console.WriteLine ("Escriba el color del lector ");
color = Console.ReadLine ();
}
public void Mostrar ()
{ Console.WriteLine ("La marca del lector es: " + marca);
Console.WriteLine ("La velocidad es: " + vel);
Console.WriteLine ("El color es: " + color);
}
}
class Impresora
{ private string tipo;
private string marca;
public Impresora ()
{ tipo = "aaaa";
marca = "nnnn";
}
public void Leer ()
{ Console.WriteLine ("Escriba el tipo de impresora ");
tipo = Console.ReadLine ();
Console.WriteLine ("Escriba la marca de la impresora ");
marca = Console.ReadLine ();
}

public void Mostrar ()


{ Console.WriteLine ("El tipo de impresora es: " + tipo);
Console.WriteLine ("la marca de la impresora es:" + marca);
}
}

class Computador
{
private string marca;
private string color;
Impresora I = new Impresora ();
Lectora L = new Lectora ();
public Computador (Impresora a, Lectora b)
{

Lic. Carmen R. Huanca Quisbert


Página 15
LAB-121 Laboratorio de INF-121

marca = "xxxx";
color = "zzzz";
I = a;
L = b;
}
public void Leer ()
{
Console.WriteLine ("Escriba la marca ");
marca = Console.ReadLine ();
Console.WriteLine ("Escriba el color ");
color = Console.ReadLine ();
I.Leer ();
L.Leer ();
}
public void Mostrar ()
{
Console.WriteLine ("Marca: " + marca);
Console.WriteLine ("Color: " + color);
I.Mostrar ();
L.Mostrar ();
}
}

class MainClass
{
public static void Main(string[] args)
{
Impresora X = new Impresora ();
Lectora Y = new Lectora ();
Computador Z = new Computador (X, Y);
Z.Mostrar ();
Z.Leer ();
Z.Mostrar ();
}
}
}

Lic. Carmen R. Huanca Quisbert


Página 16
LAB-121 Laboratorio de INF-121

Lic. Carmen R. Huanca Quisbert


Página 17

También podría gustarte