Ejemplo de Asociación
Veamos cómo se pueden implementar las relaciones de asociación, que, además, tienen asociada una multiplicidad distinta de cero en alguno de sus extremos. Implementamos el ejemplo en c++ donde la clase "Pelicula" y la clase "Actor" poseían una relación de asociación...
class Actor
{
public:
Actor();
Actor(char [],int);
~Actor();
char * getNombre();
void setNombre(char []);
int getNacimiento();
void setNacimiento(int);
// void mostrarActor();
private:
char nombre[30];
int nacimiento;
};
...lo anterior sería la clase Actor que posee dos atributos base, el nombre y el nacimiento del actor; además contiene los métodos accesores a estos atributos.
//Fichero Actor.cpp
#include <cstring>
/*
establece el valor por defecto de los atributos en el constructor
*/
Actor::Actor(){
strcpy(this->nombre, "");
this->nacimiento = 0;
}
Actor::Actor(char nombre [],int nacimiento){
strcpy(this->nombre, nombre);
this->nacimiento = nacimiento;
}
Actor::~Actor(){}
char * Actor::getNombre(){
return this->nombre; //devuleve el nombre del actor
}
void Actor::setNombre(char nombre []){
strcpy(this->nombre, nombre); // establece el nombre del actor
}
int Actor::getNacimiento(){
return this->nacimiento;//devuleve el numero de nacimiento del actor
}
void Actor::setNacimiento(int nacimiento){
this->nacimiento = nacimiento;
}
//Fichero Pelicula.h
/*
En este fichero podemos observar cómo los actores que
tienen asociados un objeto de la clase Pelicula se representan
por medio de un "array" de objetos de la clase "Actor"
*/
//#include "Actor.h"
class Pelicula
{
public:
Pelicula();
Pelicula(char [], char [], int);
~Pelicula();
char * getTitulo();
void setTitulo(char []);
char * getDirector();
void setDirector(char []);
int getDuracion();
void setDuracion(int);
char * mostrarActores(int);
void introduceActor(Actor);
int getNumeroActores();
private:
char titulo[30];
char director[30];
int duracion;
// Atributos que van a representar la relacion de asociacion
Actor actores[15]; // asigno un maximo de 15 actores
int numeroActores;
};
//Fichero pelicula.cpp
Pelicula::Pelicula(){
strcpy(this->titulo,"");
strcpy(this->director,"");
this->duracion = 0;
this->numeroActores =0;
}
Pelicula::~Pelicula(){}
char * Pelicula::getTitulo(){
return this->titulo;
}
void Pelicula::setTitulo(char nuevo_titulo []){
strcpy(this->titulo,nuevo_titulo);
}
char * Pelicula::getDirector(){
return this->director;
}
void Pelicula::setDirector(char nuevo_director []){
strcpy(this->director, nuevo_director);
}
int Pelicula::getDuracion(){
return this->duracion;
}
void Pelicula::setDuracion(int nueva_duracion){
this->duracion = nueva_duracion;
}
void Pelicula::introduceActor(Actor actor){
if(this->numeroActores < 15)
this->actores[this->numeroActores] = actor;
this->numeroActores++;
}
int Pelicula::getNumeroActores(){
return this->numeroActores;
}
char * Pelicula::mostrarActores(int id){
return this->actores[id].getNombre();
}
/*
en los anteriores métodos establecemos simplemente los get y set
para cada atributo de la clase.
Además el metodo "*introduceActor*" que va almacenando cada uno de
los actores que le son pasados a éste método.
Y el método "*mostrarActores*" que devuelve el nombre del actor
mediante la relacion que se ha hecho en la clase(*Actor actores*) asi
es cómo podemos acceder al metodo que está en la *clase Actor* que devuelve el nombre.
*/
Ahora veamos la implementacion en la vista main
//Fichero con la vista main.cpp
#include <cstdlib>
int main()
{
Pelicula war("Guerra_mmundial_Z", "Brad_Piti",120); //instacia de la clase Pelicula
Actor pedro("Owen_Wilson", 1950);// nuestros objetos *actores*
Actor jean("george_cluni", 1970);
Actor gian("Matt_mumford", 1980);
Actor sergio("Owen_Wilson", 1965);
war.introduceActor(pedro);
war.introduceActor(jean);
war.introduceActor(gian);
war.introduceActor(sergio);
cout << "Nombre de la pelicula es:" << war.getTitulo()<< "\n";
cout << "Tiene un aduracion de :" << war.getDuracion() << " minutos \n";
cout << "En la war trabaja: \n";
for (int i = 0; i < war.getNumeroActores() ; i++)
{
cout << war.mostrarActores(i);
}
return 0;
}