// Auto.cs // Versión 1.0 Fecha: 7-Enero-2003 // Versión 1.1 Fecha: 16-Enero-2003 // Juan Manuel Cueva Lovelle // Ejemplo de Agregación y Composición
#define DEPURACION
using System;
namespace Agregacion { class Carroceria { protected string color="Blanco"; /// <summary> /// Propiedad Color: Color de la carrocería /// </summary> public string Color { set{color=value;} get{return color;} }
/// <summary> /// Contiene el número de Serie de la carrocería /// </summary> protected int numeroSerie; /// <summary> /// Propiedad con sólo get /// </summary> public int NumeroSerie { get{return numeroSerie;} } /// <summary> /// Campo estático /// </summary> protected static int contador; /// <summary> /// Propiedad de un campo estático con sólo get /// </summary> public static int Contador { get{return contador;} } public Carroceria() { numeroSerie=contador++; #if DEPURACION Console.WriteLine("Se ha creado la Carroceria {0}",numeroSerie); #endif } } class Motor { /// <summary> /// Caballos de Vapor /// </summary> protected int cv; public int Cv { set{cv=value;} get{return cv;} } public Motor() { #if DEPURACION Console.WriteLine("Se ha creado un Motor de {0} CV",cv); #endif } } class Rueda { protected string neumatico="Sin marca"; public string Neumatico { set{neumatico=value;} get{return neumatico;} } public Rueda() { #if DEPURACION Console.WriteLine("Se ha creado una Rueda con neumatico "+neumatico); #endif } } /// <summary> /// Contiene objetos de las clases Carroceria, Motor y Rueda /// </summary> class Auto { protected Carroceria c; protected Motor m; protected Rueda r1,r2,r3,r4; /// <summary> /// Constructor de objetos por Composición /// </summary> public Auto() { c=new Carroceria(); m=new Motor(); r1=new Rueda(); r2=new Rueda(); r3=new Rueda(); r4=new Rueda(); } /// <summary> /// Constructor de objetos por Composición /// </summary> /// <param name="color">Color de la carroceria</param> /// <param name="cv">CV del motor</param> /// <param name="neumatico">Neumáticos de las ruedas</param> public Auto(string color, int cv, string neumatico) { c=new Carroceria(); c.Color=color;
m=new Motor(); m.Cv=cv;
r1=new Rueda(); r2=new Rueda(); r3=new Rueda(); r4=new Rueda();
r1.Neumatico=neumatico; r2.Neumatico=neumatico; r3.Neumatico=neumatico; r4.Neumatico=neumatico; } /// <summary> /// Constructor de objetos por agregación /// </summary> /// <param name="c">referencia a Carroceria</param> /// <param name="m">referencia a Rueda</param> /// <param name="r2">referencia a Rueda</param> /// <param name="r3">referencia a Rueda</param> /// <param name="r4">referencia a Rueda</param> public Auto(Carroceria c, Motor m, Rueda r1, Rueda r2, Rueda r3, Rueda r4) { this.c=c; this.m=m; this.r1=r1; this.r2=r2; this.r3=r3; this.r4=r4; }
public override string ToString() { return ("Auto: Código:"+c.NumeroSerie+" Color: "+c.Color+" CV: "+m.Cv+ " Neumaticos: "+r1.Neumatico+"," +r2.Neumatico+"," +r3.Neumatico+"," +r4.Neumatico); }
/// <summary> /// Prueba unitaria de la clase Auto /// </summary> [STAThread] static void Main(string[] args) { //Creación por Composición Auto laguna = new Auto(); Console.WriteLine("Dime lo que sabes de laguna "+laguna);
//Espera una tecla Console.ReadLine();
//Creación por Composición Auto clio = new Auto("azul",12,"Michelín"); Console.WriteLine("Dime lo que sabes del clio "+clio);
//Espera una tecla Console.ReadLine();
laguna.c.Color="Verde"; laguna.m.Cv=100; Console.WriteLine("Dime lo que sabes ahora de laguna "+laguna);
//Espera una tecla Console.ReadLine();
//Creación por agregación Carroceria formula1 = new Carroceria(); formula1.Color="Rojo";
Motor seat = new Motor(); seat.Cv=500;
Rueda michelin = new Rueda(); michelin.Neumatico="300";
Auto prototipo =new Auto(formula1,seat,michelin,michelin,michelin,michelin); Console.WriteLine("Dime lo que sabes ahora de prototipo "+prototipo);
Console.WriteLine("Número de Carrocerías producidas: {0} ",Carroceria.Contador);
//Espera una tecla para finalizar Console.ReadLine();
} } }
|