elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿En qué estoy fallando en herencia java? auxilio por favor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿En qué estoy fallando en herencia java? auxilio por favor  (Leído 3,228 veces)
miltonprogramador

Desconectado Desconectado

Mensajes: 25



Ver Perfil
¿En qué estoy fallando en herencia java? auxilio por favor
« en: 15 Diciembre 2016, 15:53 pm »

¿En qué estoy fallando en herencia java?

Hola a todos, esta es mi primera vez que pido ayuda en este foro y espero que puedan ayudarme a la brevedad posible porque tengo gran urgencia...

Les explico: Estoy desarrollando un sistema servidor con soporte a multiples clientes en java. Hasta ahora apenas vy por el desarrollo del servidor y mi dificultad en cocreto es mantener los datos de logueo (o sessión) en memoria con los cambios que las clases hijas puedan hacer, es decir, especificamente tengo una super clase denominada "Servidor" y una que hereda de ella denominada "Personas". Colocare las secciones del código que mestran la dificultad:
Código
  1. class Servidor {
  2.    /* Declaración de variables */
  3.    private   Escritorio    escritorio;
  4.    private   Escritorio    vstEscritorio;
  5.    private   Validador     validacion;
  6.    public    Icono         ico;
  7.    public    boolean       estadoSesion, foco;
  8.    //private String        pantallaActiva;
  9.    protected String[][]    validable;
  10.    //Variables de Sesion
  11.    public   boolean        autenticado;
  12.    public   int            idSesionServidor;
  13.    public   String         idUsuarioServidor;
  14.    public   String         privilegioUsuarioServidor;
  15.    public   String         nombreUsuarioServidor;
  16.    public   String         fechaSesionServidor;
  17.    public   String         horaSesionServidor;
  18.    //public   String        ultimaSesionUsuarioServidor;
  19.    public   HashMap        permisosUsuarioServidor;
  20.    //Constructores ...........................................................
  21.    public Servidor(){
  22.    }
  23.    public Servidor(String ini){
  24.        vstEscritorio = new Escritorio();
  25.        mostrarVista(vstEscritorio);
  26.        iniciarVariables();
  27.        escritorio.txtABitacora.setText(
  28.                                escritorio.txtABitacora.getText() +
  29.                                Bitacora.get(                                      
  30.                                        ">> Hola!, el servidor 'nombre del servidor' "
  31.                                        + "está activo.\n>> Por ahora sus "
  32.                                        + "servicios se encuentran apagados.",
  33.                                        this.nombreUsuarioServidor
  34.                                )
  35.                        );
  36.        if ( idSesionServidor != 0 ){
  37.            iniciarConectividad();
  38.        }else{
  39.            escritorio.txtABitacora.setText(
  40.                                escritorio.txtABitacora.getText() +
  41.                                Bitacora.get(                                      
  42.                                        ">> Se requiere Autenticación de Usuario",
  43.                                        this.nombreUsuarioServidor
  44.                                )
  45.                        );
  46.            autenticarUsuario();
  47.            System.out.println(this.nombreUsuarioServidor); // ---> AQUI NO MUESTRA EL NOMBRE DE USUARIO ACTUALIZADO. (E S T A   E S   L A   D I F I C U L T A D )
  48.            if ( autenticado == true ) {
  49.                escritorio.txtABitacora.setText(
  50.                                escritorio.txtABitacora.getText() +
  51.                                Bitacora.get(                                      
  52.                                        ">> Ya pueden iniciarse los servicios",
  53.                                        this.nombreUsuarioServidor   //--->OBVIAMENTE AQUI TAMPOCO MUESTRA EL DATO ACTUALIZADO
  54.                                )
  55.                        );
  56.            }
  57.        }
  58.    }
  59.    private void iniciarVariables(){
  60.        //Variables de sesion
  61.        autenticado = false;
  62.        idSesionServidor = 0; //Variable con el id de la sesion.....
  63.        idUsuarioServidor = "svr";
  64.        privilegioUsuarioServidor = "boot";
  65.        nombreUsuarioServidor = "Servidor";
  66.  
  67.    }
  68.    private void autenticarUsuario() {
  69.        CtrlPersonas vstLogin = new CtrlPersonas();
  70.        escritorio.txtABitacora.setText(
  71.                                escritorio.txtABitacora.getText() +
  72.                                Bitacora.get(                                      
  73.                                        ">> Abriendo el formulario de "
  74.                                        + "Autenticación de Usuario",
  75.                                        this.nombreUsuarioServidor
  76.                                )
  77.                        );
  78.        vstLogin.mostrarVistaLogin(escritorio);
  79.    }
  80. }
  81.  

Este es el constructor y el metodo del problema de la clase Persona que extiende a Servidor

Código
  1. //Constructor
  2.    public CtrlPersonas(){
  3.        super(); // ---->> COLOCANDO ESTA LÍNEA O SIN ELLA IGUAL MENTE PEDO acceder A LAS VARIABLES...
  4.        modPersonas = new ModeloPersonas();
  5.    }
  6.  
  7.  
  8. //Asi se modifican las variables, mismas que al intentar acceder al valor (que ahora deberia ser el colocado en este método) no lo mantiene y se obtiene es el valor original de la super clase
  9.  
  10.  
  11.   this.idUsuarioServidor = resultadoUsuario.getString("rif_personas");
  12.   this.nombreUsuarioServidor = resultadoUsuario.getString("pnombre_personas") + " " + resultadoUsuario.getString("papellido_personas") ;
  13.   this.privilegioUsuarioServidor = resultadoUsuario.getString("privilegio_personas");
  14.   this.fechaSesionServidor = Calendario.get("fecha", null);
  15.   this.horaSesionServidor = Calendario.get("hora", null);
  16.  
  17.  

Reitero, leer las variables desde la clase personas si se ve el cambio registrado pero, al regresar a la clase Servidor no... y creo que ya deberia hacerlo puesto que la clase servidor se mantiene activa en todo momento, de tal forma que las variables estan en memoria susceptibles a las modificaciones...

Pido, con humildad, su ayuda con urgeeeeeeeeeeeencia... porque de los expertos se aprende a serlo también... gracias de ante mano...



En línea

Aprendiendo de los mejores se llega a ser uno de ellos...
miltonprogramador

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: ¿En qué estoy fallando en herencia java? auxilio por favor
« Respuesta #1 en: 15 Diciembre 2016, 19:29 pm »

Aca les dejo dos clases que explican mas claramente lo que necesito resolver...


Esta es la clase principal
Código
  1. public class Clase {
  2.    int num;
  3.    public Clase(){
  4.  
  5.    }
  6.  
  7.    public Clase(String ini) {
  8.        num = 0;
  9.        System.out.println("Clase > Invocando a Hija1");
  10.        Hija1 log = new Hija1();
  11.        System.out.println("Clase > Num:" + num); //Aqui deberia mostrarse el valor de num como 27 ya que es el valor que se le asigno desde la sub clase pero no lo mustra... sigue imprimiendo el valor de cero.... NECESITO que mantenga el valor dado en la sub-clase
  12.    }
  13.    public static void main(String[] args) {
  14.        Clase log = new Clase("ini");
  15.    }
  16. }
  17.  


Esta es la sub clase:

Código
  1. public class Hija1 extends Clase {
  2. public Hija1(){
  3.     System.out.println("Hija1 > El valor num es: " + this.num);
  4.     this.num = 27;
  5.     System.out.println("Hija1 > He cambiado el valor de num a: " + this.num);
  6. }  
  7. }
  8.  


En línea

Aprendiendo de los mejores se llega a ser uno de ellos...
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿En qué estoy fallando en herencia java? auxilio por favor
« Respuesta #2 en: 15 Diciembre 2016, 22:19 pm »

Código
  1. public class Clase {
  2.    int num;
  3.    public Clase(){
  4.  
  5.    }
  6.  
  7.    public Clase(String ini) {
  8.        num = 0;
  9.        System.out.println("Clase > Invocando a Hija1");
  10.        Hija1 log = new Hija1();
  11.        System.out.println("Clase > Num:" + num); //Aqui deberia mostrarse el valor de num como 27 ya que es el valor que se le asigno desde la sub clase pero no lo mustra... sigue imprimiendo el valor de cero.... NECESITO que mantenga el valor dado en la sub-clase
  12.    }
  13.    public static void main(String[] args) {
  14.        Clase log = new Clase("ini");
  15.    }
  16. }
  17.  
Código
  1. public class Hija1 extends Clase {
  2. public Hija1(){
  3.     System.out.println("Hija1 > El valor num es: " + this.num);
  4.     this.num = 27;
  5.     System.out.println("Hija1 > He cambiado el valor de num a: " + this.num);
  6. }  
  7. }
  8.  

Heredar implica que la clase hija tendrá los métodos y las variables de la clase padre.
Cuando haces Hija1 log = new Hija1();, estás generando una nueva Hija1, y por tanto, una nueva Clase. Clase tiene su campo num, y es el que estás modificando. Si en evz de eso, pones:
Código
  1. public class Clase {
  2.    int num;
  3.    public Clase(){
  4.  
  5.    }
  6.  
  7.    public Clase(String ini) {
  8.        num = 0;
  9.        System.out.println("Clase > Invocando a Hija1");
  10.        Hija1 log = new Hija1();
  11.        System.out.println("Clase > Num:" + log.num); //Aqui deberia mostrarse el valor de num como 27 ya que es el valor que se le asigno desde la sub clase pero no lo mustra... sigue imprimiendo el valor de cero.... NECESITO que mantenga el valor dado en la sub-clase
  12.    }
  13.    public static void main(String[] args) {
  14.        Clase log = new Clase("ini");
  15.    }
  16. }
Nótese  el System.out.println, que ahora pone log.num.
Ahora sí que debería mostrarte 27, porque el num que ha sido modificado es el del objeto que acabas de crear.
En línea

miltonprogramador

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: ¿En qué estoy fallando en herencia java? auxilio por favor
« Respuesta #3 en: 15 Diciembre 2016, 23:11 pm »

Muchas Gracias por responderme ivancea96... entiendo lo que dices y esta muy correcto... ahora mi inquietud es ¿Entonces no puedo modificar las variables de la superClase y dejar esos cambios presentes para las otras clases? Esto lo necesito para mantener las variables de sesión de mi aplicación cargadas en memoria... darme un indicio que como podria lograrlo?
En línea

Aprendiendo de los mejores se llega a ser uno de ellos...
miltonprogramador

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: ¿En qué estoy fallando en herencia java? auxilio por favor
« Respuesta #4 en: 16 Diciembre 2016, 00:27 am »

Hola... como solución lo siguiente:

crear una nueva clase llamada Sesión.java para colocar en ella los atributos de sesion... esta no sera heredada por nadie pero si instanciada por la clase principal y pasada por parametros las a las demás clases.... Estos son los códigos:

1.- La clase de sesion..
Código
  1. public class Sesion {
  2.    int num;
  3.    public Sesion(){
  4.        num=20;
  5.    }
  6. }
  7.  

2.- La clase principal..
Código
  1. public class Clase {
  2.    protected int num;
  3.    public Sesion sesion;
  4.    public Clase(){
  5.  
  6.    }
  7.    public Clase(String ini) {
  8.        sesion = new Sesion();
  9.        System.out.println("Clase > Invocando a Hija1");
  10.        Hija1 log = new Hija1(sesion);
  11.        System.out.println("Clase > Num:" + sesion.num);
  12.    }
  13.    public static void main(String[] args) {
  14.        Clase log = new Clase("ini");
  15.    }
  16. }
  17.  

3.- y la clase hija que será la que reemplazara el valor del atributo e sesión, mismo que debería matnerse presente durante toda la aplicación
Código
  1. public class Hija1 extends Clase {
  2. public Hija1(){
  3.  
  4. }  
  5. public Hija1(Sesion obj){
  6.     System.out.println("Hija1 > El valor num es: " + this.num);
  7.     obj.num = 37;
  8.     System.out.println("Hija1 > He cambiado el valor de num a: " + this.num);
  9. }  
  10. }
  11.  


Haciendolo de esta manera me mantinene el 37 en la clase principal

MI pregunta es: ¿esto es correcto o es un barbarismo?

guienme por favor...
[/b]
En línea

Aprendiendo de los mejores se llega a ser uno de ellos...
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: ¿En qué estoy fallando en herencia java? auxilio por favor
« Respuesta #5 en: 16 Diciembre 2016, 02:00 am »

Citar
¿Entonces no puedo modificar las variables de la superClase y dejar esos cambios presentes para las otras clases? Esto lo necesito para mantener las variables de sesión de mi aplicación cargadas en memoria... darme un indicio que como podria lograrlo?
Todas las variables que crees en las clases, son de objeto, eso quiere decir que al hacer un cambio en esa variable, se vera reflejada en el objeto y solo en ese objeto, si quieres que se haga que el cambio afecte a todos los objetos puedes declarar esa variable como estática, de esta manera al hacer un cambio se vera reflejado en todos los objetos que instancies de esa clase.

Así se veria una variable estática:
Código
  1. static int numero = 10;


Citar
Haciendolo de esta manera me mantinene el 37 en la clase principal

MI pregunta es: ¿esto es correcto o es un barbarismo?
Es correcto, ya que cuando pasas un objeto por parámetro, java lo pasa por referencia, es decir que esa variable apuntara también al objeto original, de modo que ambas variables apuntarían al mismo objeto en memoria, y si modificas uno, en realidad no modificas el otro, si no que afectara a ambos por que apuntan a lo mismo objeto.

Espero me entiendas, si no coméntame tu duda.

Saludos.
En línea

miltonprogramador

Desconectado Desconectado

Mensajes: 25



Ver Perfil
Re: ¿En qué estoy fallando en herencia java? auxilio por favor
« Respuesta #6 en: 16 Diciembre 2016, 02:30 am »

uff hermano habia olvidado por completos los atributos estáticos jejeje... creo que eso resuelve mi problema perfectamente.... de todas maneras estoy abierto a nuevas recomendaciones para el manejo de sesiones para aplicaciones de escritorio en java....


Te agradezco infinitamente... Por eso siempre digo "Aprendiendo de los mejores se lega a ser uno de ellos"...

Esta es mi primera consulta resuelta en tiempo record... puntito para elhacker.net  ;-)
En línea

Aprendiendo de los mejores se llega a ser uno de ellos...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
en que estoy fallando?..gracias(codigo java)
Java
FAKEz 2 2,687 Último mensaje 20 Septiembre 2006, 00:45 am
por FAKEz
herencia en java
Java
bengy 3 2,458 Último mensaje 20 Marzo 2014, 05:48 am
por Mitsu
Nose en que estoy fallando - Ejercicio con Punteros
Programación C/C++
palacio29 1 2,158 Último mensaje 18 Septiembre 2016, 16:59 pm
por AlbertoBSD
¿En que estoy fallando? THC-Hydra
Hacking
Revelition 1 3,092 Último mensaje 20 Octubre 2017, 21:56 pm
por D3Maxwell
Kali linux Me esta fallando AYUDAAA ESTOY MUY PERDIDO
GNU/Linux
Mariiio 1 2,822 Último mensaje 11 Abril 2018, 12:39 pm
por CybeRoot
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines