Foros del Web » Programación para mayores de 30 ;) » Java »

problema con las superclases,

Estas en el tema de problema con las superclases, en el foro de Java en Foros del Web. Hola, la verdad es que hace poco que he comenzado seriosamente con JAVA y me he quedado bloqueado en una cosa, os cuento: Yo tengo ...
  #1 (permalink)  
Antiguo 26/06/2007, 22:30
 
Fecha de Ingreso: enero-2007
Mensajes: 55
Antigüedad: 17 años, 3 meses
Puntos: 1
problema con las superclases,

Hola, la verdad es que hace poco que he comenzado seriosamente con JAVA y me he quedado bloqueado en una cosa, os cuento: Yo tengo dos clases "Activated/Desactivated" que descienden de una superclase "FlockBehavior" (pongo los nombres para hacerlo más familiar) y en la superclase tengo un array de tipo int de X posiciones que modifico desde las dos superclases usando super.array[x]=0 (ó el valor que sea). Estas dos clases son comportamientos, por lo que sus saltos son independientes. Mi problema surge que cuando pongo por ejemplo en la subclase Activated super.array[1]=0 lo leo esto mismo en la subclase Desactivated y tien el valor anterior (es como si no se actualizase) ¿por qué es? Tiene alguna solución al llamar a la superclase o algo así (ya os digo que esto de las superclases no lo acabo de dominar). Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 27/06/2007, 00:23
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problema con las superclases,

No acabo de entender que es lo que haces ni cual es el problema, quizá con la declaracion de las clases, el codigo que esperas que cambie valores y no lo hace y como lo lees podamos ayudarte mejor.

De todas formas, desde un punto de vista orientado a objetos, la estructura de clases que comentas suena más bien extraña. Las clases suelen ser "sustantivos" y la relacion de herencia de forma natural deberia poder expresarse con un "un objeto de la clase hija es un objeto de la clase padre, de un tipo especial".

S!
  #3 (permalink)  
Antiguo 27/06/2007, 01:03
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: problema con las superclases,

Wenas.

Esa estructura, mas bien parecen dos clases que comparten un array, pero que no se parecen en nada mas.

Esa relacion no tiene nada que ver con la herencia.
  #4 (permalink)  
Antiguo 27/06/2007, 07:21
 
Fecha de Ingreso: enero-2007
Mensajes: 55
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: problema con las superclases,

import java.util.Enumeration;

import javax.media.j3d.BoundingLeaf;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.WakeupCriterion;
import javax.media.j3d.WakeupOnViewPlatformEntry;
import javax.media.j3d.WakeupOr;


public class Activated extends FlockBehavior{

WakeupCriterion[] ActivatedCriterion;
WakeupOr boundCriterionActivated;

BoundingSphere boundingSphereActivated[]= new BoundingSphere[numberPointsFinal];
BoundingLeaf boundingLeafActivated[]= new BoundingLeaf[numberPointsFinal];

public Activated(BranchGroup branchGroup){
super(branchGroup);
}

public Activated(BranchGroup branchGroup, BoundingSphere boundingSphere[], BoundingLeaf boundingLeaf[]){
super(branchGroup);
boundingSphereActivated = boundingSphere;
boundingLeafActivated = boundingLeaf;
}

public void initialize(){

ActivatedCriterion = new WakeupCriterion[numberPointsFinal];

for(int i=0; i<numberPointsFinal; i++){

ActivatedCriterion[i]=new WakeupOnViewPlatformEntry(boundingSphereActivated[i]);
}
boundCriterionActivated = new WakeupOr(ActivatedCriterion);
wakeupOn(boundCriterionActivated);

System.out.println("Se ha inicializado el Activated");

}

public void processStimulus(Enumeration criteria){

for(int i=0; i<numberPointsFinal; i++){
if(ActivatedCriterion[i].hasTriggered()){
if(super.activatedPoints[i]==0){
(super.activatedPoints[i])=1; //significa que ese punto está dentro del ViewPlatform activado
}
else{
(super.activatedPoints[i])=1;
}
}
}
wakeupOn(boundCriterionActivated);
}

}

///////////////////////////////////////

Este es el código de la clase Activated (el de la clase Desactivated es casi igual lo que en vez de poner activatedPoints[] a 1 lo pone a 0

Como veis son comportamientos en java 3d, y se supone que saltan con la condición de disparo, mi problema sale cuando entro en Activated cambio el activatedPoints[0] a 1 (cambiandolo en la superclase con super.activatedPoints[0]=1) y luego salta el Desactivated y me dice que activatedPoints[0] vale 0 (siendo que antes le había dicho que fuese 1) ¿Por qué sucede esto? Gracias de antemano por vuestra ayuda
  #5 (permalink)  
Antiguo 27/06/2007, 08:39
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: problema con las superclases,

activatedPoints esta declarada como static?
Si no es así cada instancia de la case tendrá su propio activatedPoints que no vera la otra instancia.

Pero como te comentaban esto más bien parece dos clases que comparten un dato, que una herencia.
  #6 (permalink)  
Antiguo 27/06/2007, 09:01
 
Fecha de Ingreso: enero-2007
Mensajes: 55
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: problema con las superclases,

pues activatedPoints simplemente la he declarado con un array de int, no he puesto nada de static ¿puede ser por eso? Esque este array (el activatedPoints[]) está declarado en FlockBehavior y Activated/Desactivated son extenxiones de FlockBehavior, por eso yo pensaba que si cambiabas en Activated o Desactivated este array como super. se actualizaban para los dos al estar en su clase extendida. ¿entonces puede ser por eso del static?
  #7 (permalink)  
Antiguo 27/06/2007, 10:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problema con las superclases,

Creo que, además de la cuestión del static, el problema es un error de concepto. Cuando tu heredas de una clase, los objetos que crees de las clases hijas son objetos de las clases hijas, y punto. No hay dos objetos, uno de la clase hija y otro de la clase padre, y el usar super no se usa mas que cuando estas "sobre-escribiendo" un atributo o metodo, pero si no es lo mismo que lo pongas como si no.

Para explicarme mejor, cuando tu creas una instancia de Activated, el atributo activatedPoints[] es de esa instancia, no de FlockBehavior ni de ninguna instancia de esa clase.

Por otro lado, los atributos/metodos de static "no se heredan", si no que son de la clase que los declara. Así que declarando activatedPoints[] como static podras accederlo desde Activated/Desactivated, pero no por que lo hereden sino por su naturaleza de "static".

Finalmente, quizá la herencia si sea apropiada, tampoco se ve tanto como para decirlo, pero lo que si parece bastante desafortunada es la eleccion de nombres. Es más claro usar sustantivos, ya que usar adjetivos suele dar lugar a confusión.

S!
  #8 (permalink)  
Antiguo 27/06/2007, 11:01
 
Fecha de Ingreso: enero-2007
Mensajes: 55
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: problema con las superclases,

Creo que he entendido lo que me estás diciendo, yo simplemente quiero modificar los datos de activatedPoints[] de FlockBehavior (que es donde luego lo utilizo en otros métodos y donde realmente le saco jugo) y solo puedo cambiarlo en Activated/Desactivated. Por tanto, la solución será usar static ¿no? Yo simplemente quiero usar este activatedPoints[] en FlockBehavior pero la única manera de actualizarlo es en Activated/Desactivated que es donde me dice si han interseccionado o no, y que si modificio activatedPoints[0]=1 en Activated automaticamente cuando salte Desactivated tenga el valor de activatedPoints[0]=1.

Perdonad, pero esque me acabo de meter de lleno en Java y yo siempre programaba en C/C++ y es la falta de costumbre. Pero GreenEyed ¿por que dices que la herencia si sería lo apropiado? (yo quiero que activatedPoints si se modifica en Activated luego en Desactivated también vea ese cambio), sobre lo de los nombres es verdad que tienes razón, debo usar sustantivos pero es que es lo primero que se me ocurrió, me pasa por ir deprisa y corriendo.

Muchísimas gracias GreenEyed y a todos los demás, me habeis ayudado mucho. MUCHÍSIMAS GRACIAS!!
  #9 (permalink)  
Antiguo 27/06/2007, 13:13
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problema con las superclases,

Hola,

Lo que quería decir es que quiza usar herencia sea apropiado (no para acceder a activatedPoints sino por diseño de las clases) pero que solo con lo que hemos visto no se puede saber.

Respecto a acceder a activatedPoints..., no, usar herencia para acceder a ello desde Activated/Desactivated no es lo apropiado, puesto que como ya has visto: o no se hereda o si usas static en realidad la herencia no aparece.

Para estos casos lo habitual, si es una aplicacion de escritorio, es usar un array de tipo "static" y acceder a el con los controles de sincronizacion apropiados, si hace falta y hay threads entre medias. O usar el patro "singleton" en vez de un array estático, segun lo OO que quieras ser y el uso que vayan a tener esos datos .

Las aplicaciones web son animales de otro pelaje y yo recomendaría otra solución, pero eso es ya otra historia .

S!

PD: Bienvenido a Java y tranquilo que al principio se hace duro pero luego le pillas la filosofia y es otra cosa
  #10 (permalink)  
Antiguo 27/06/2007, 15:39
 
Fecha de Ingreso: enero-2007
Mensajes: 55
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: problema con las superclases,

Pues probaré primero a declararlo en FlockBehavior como static int activatedPoints[] y a ver como se comporta. Si no me funciona probaré eso que me has dicho de "singleston" o algo asi (aunque en estos momentos no tengo ni idea de que significa) y sino ya os comentaré algo. Muchas gracias por tu atención y tu tiempo GreenEyed (y también a todos los demás). Muchas gracias de nuevo, de verdad.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:38.