Duda con implementación de clases de UML a C++

Iniciado por novalida, 23 Septiembre 2011, 18:56 PM

0 Miembros y 1 Visitante están viendo este tema.

novalida

Hola!
Soy muy principante en la programación orientada a objetos ya que siempre había utilizado programación estructurada.
Ahora, que quería centrarme en UML y POO dadas sus vetnajas me encuentro con algún que otro problema en cuanto a la implementación a partir de un diseño.

Mi ejemplo:
Tengo dos clases A y B, las cuales mantienen una relación de asociación de A a B de 1:N respectivamente.

Siguiendo el "manual" para implementar diagramas de clase UML a C++ debería implementar en cada una de las clases una instancia de la otra clase, quedando así:



class A
{
    int variable1;
    vector <B> variableB;
}

class B
{
    int variable2;
    A variableA;
}



Ahora el problema que me encuentro es que la implementación de la clase A en B tiene que ser un puntero a un objeto de tipo "clase A", no como se me indica por "manual".

Por otro lado no entiendo por qué razón debería (aunque quizás no sea obligatorio) incluir la clase B una instancia de la clase A.

Además, ¿no se produciría un bucle o error de compilación al asignar valores a cada objeto A contenido B?

He buscado información en internet al respecto pero no logro solventar la duda de la mejor manera de implementar el diseño.


Quizás no me he explicado demasiado bien, pero si se neceista más información, por favor, pedídmela e intentaré explicarme de la manera que se me pida :)

Muchas gracias de antemano y un saludo.

alexg88

Tienes que usar punteros como bien has indicado.

Código (cpp) [Seleccionar]

class A
{
    int variable1;
    vector <B*> variableB;
}

class B
{
    int variable2;
    A  *variableA;
}



Tampoco es obligatorio (como has dicho) poner una referencia de la clase A a la clase B. Todo depende de para que se vaya a usar.

No se producen errores si usas punteros, pero sería imposible hacerlo sin punteros.

novalida

hola alexg88 , muchas gracias por contestar.

Entonces, ¿instanciar un objeto de cada clase es opcional? (En nuestro caso, un puntero a cada tipo de objeto).
Lo pregunto por si tendría alguna utilidad real o algún ejemplo en el que lo más correcto sería hacerlo de esa manera.
Por último, soy incapaz de compilar dos clases haciendo que cada una contenga a la otra. Que sólo una contenga un puntero a la otra sí, pero que cada una de ellas contnga un puntero a un objeto de la otra clase soy incapaz, dándome el error CLASEA does not name a type.
¿Sería posible implementar eso o es que puedo estar haciendo algo mal?
Incluyo la cabecera de cada clase en la declaración de la otra pero no consigo nada :S