Ayuda OOP

ItNaS

Hola, estoy empezando a hacer mis pinitos con la programacion orientada a objetos y me gustaria que me indicarais como hariais lo siguiente:

Tengo una clase principal llamada malla, dentro de la cual hay dos tipos de objetos, Nodos y elementos:

Malla
|
|---Nodos
|
|---Elementos

Nodos es un array de objetos Nodo que contienen informacion tales como la posicion y la velocidad

Elementos es otro array de objetos Elemento que contiene basicamente un array de conectividades (los numeros de los nodos que lo forman)

Mi duda es la siguiente:
Me gustaria crear un metodo dentro de la clase Elemento de manera que me devuelva la informacion que esta contenida en el objeto Nodo. Es decir que yo pudiera obtener con una sola linea un array con la posicion de los nodos que forman dicho elemento.

Es esto posible?

Un saludo y muchas gracias!

dagavi

Si te lo montas tu obviamente puedes hacer todo lo que te de la gana.

Parece que desde elementos tienes que llegar a los elementos Nodos de la misma Malla, por lo que tendrás que saber desde Elemento, de alguna forma, cual es la Malla (ej: poniendo la malla como un atributo al que le puedas pedir todos sus Nodos, o ciertos Nodos).

BLZKZ

Y más facil por qué no haces metodos en nodos para que tengas acceso a todo lo que quieras desde maya? te ahorras la clase elementos xD

1 respuesta
ItNaS

#3 es que lo importante son los elementos :S Para el calculoq eu he de hacer el ciclo es en los elementos y de la otra forma se me volveria muy ineficiente.

1 respuesta
BLZKZ

#4 entonces lo planteas mal o yo no me entero. ¿Sirven para algo los nodos o aportan algo directamente a malla? si no es asi, dentro de la clase elementos haz que tenga un atributo array de nodos y ya. De todas formas para acceder directamente a todo lo que quieras de la parte privada (atributos) de nodos tienes que hacer geters y setters cuanto menos.

¿Ineficiente? cual es el concepto de eficiencia que tienes? xD

En cualquier caso:

Elementos es otro array de objetos Elemento que contiene basicamente un array de conectividades (los numeros de los nodos que lo forman)

Por otro lado esto me recuerda muy y mucho a los grafos, yo me lo miraria ;)

1 respuesta
eisenfaust

Ineficiente es usar POO (xddd, he dicho POO) gratuitamente y porque sí. Como es el caso.

ItNaS

#5 no es para grafos es para elementos finitos, el problema de no poder meter los nodos dentro de la clase elementos es que hay elementos que comparten nodos y cuando se actualizara la posicion de los nodos tendria que mirar a ver que elementos tienen dicho nodo (por eso decia lo de que seria ineficiente)

EL array de conectividades que hay dentro del elemento es como si fuera un puntero a los nodos que forman dicho elemento.

no se si me explico xD

gracias!

1 respuesta
BLZKZ

#7 que tienen los grafos de infinito?

1 respuesta
ItNaS

#8 no me he explicado xd

los elementos finitos son a muy grandes rasgos un metodo para modelizar ecuaciones diferenciales y que desde un punto de vista mas general sirven para modelizar fenomenos que se expliquen mediante estas ecuaciones.

http://es.wikipedia.org/wiki/M%C3%A9todo_de_los_elementos_finitos

en la imagen de la dereach se ve una malla tipo

1 respuesta
BLZKZ

#9 y? xD quiero decir, esa malla yo en programacion la puedo representar como un grafo xD

Como sea, o cambias el chip o cualquier cosa que te digamos te parecerá absurda, cuando lo ilogico aquí es el planteamiento que tienes xD pero bueno...

1 respuesta
ItNaS

#10 es que creo que no te pillo, y a lo mejor he dicho algo que no tenia que decir.

En esta imagen

los elementos son cada uno de los triangulos.

Cada elemento contiene un array de nodos que apunta a los nodos que lo forman y informacion sobre el material de ese triangulo (diferentes colores en el dibujo).

En un programa de elemenots finitos se hace un bucle en los elementos, donde se integran unas cosas y con lo que obtienes vas llenando una matriz.

Cuando acabas de llenar la matriz resuelves un sistema con esa matriz y obtienes los valores de lo que sea estes calculando en nodos.

Pero es que no te puedes cargar los elementos xd, en los nodos no tienes la suficiente informacion para caracterizar el medio.

BLZKZ

pues a ver, siguiendo lo que estabas haciendo me quoteo:

"De todas formas para acceder directamente a todo lo que quieras de la parte privada (atributos) de nodos tienes que hacer geters y setters cuanto menos."

Simplemente es implementar metodos en Nodo que te devuelvan lo que necesites para elementos. Luego accedes a ello en otro metodo de malla haciendo this->nodos.loquesea(loquesea); (si no usas punteros, si usas punteros es con -> en vez de . como imagino que sabras si los usas xD)

1 respuesta
ItNaS

#12 estudiare un poquillo porque todavia lo tengo muy verde xD tenog una duda, porque a veces se hace una archivo .h con las definiciones a parte y aveces se pone en el mismo archivo donde estan todas las cosas?

BLZKZ

en el .h solo debe ir la "interfaz" de las clases. Si viene más es porque es un template (plantilla) y por algún lado viene <template>. Si no es así es o bien no es necesario el .h porque son interfaces virtuales (tipicas interfazes de java más o menos) o no era necesario por cualquier otro motivo.

Usuarios habituales

  • BLZKZ
  • ItNaS
  • eisenfaust
  • dagavi