Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 14

Tema: Java, compiladores y herencia

  1. #1

    Predeterminado Java, compiladores y herencia

    Hola a todos.

    Quería preguntaros una tontería que se me ha planteado y que no sé cómo solucionar. A ver si me podéis echar una mano.

    Estoy escribiendo un scanner (analizador léxico) en Java. Hasta ahora, por cada tipo de token había definido una clase adecuada, que heredaba de una clase general llamada TokenClass a secas. Mi idea era que en el método scanner.nextToken() me devolviese esa clase general, pero yo habría creado cada uno de los token que heredaban de esa clase en vez de ser ella. ¿Mi problema? Pues que me he dado cuenta que no puedo devolver clases heredas si en la firma del método he puesto a la clase padre.

    Mi pregunta es bien sencilla. ¿Cómo podría solucionar esto? Una idea sería usar la clase Token padre y luego crear las hijas en otra parte, pero precisamente al usar las hijas quería ahorrarme todo este problema. No quiero tener una clase Token gigante, sino muchas pequeñas que extiendan a Token.

    Gracias por adelantado.

    Un saludo.

  2. #2

    Predeterminado Re: Java, compiladores y herencia

    No tengo mucha idea de Java, pero me extraña mucho que lo que quieres no se pueda hacer. En .NET sí que se puede...

    Se me ocurre una cosa, a lo mejor puedes hacer que todas tus clases implementen una interface, y que el método NextToken() devuelva esa interface en lugar de la clase padre? Es una idea...

    Salu2.
    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs,
    and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. [Rich Cook]
    Que todavía no has leído las Normas del Foro?

  3. #3

    Predeterminado Re: Java, compiladores y herencia

    Yo estoy casi seguro de que eso sí se puede hacer en Java... ¿qué error de compilación te da exactamente?

    Igual podrías poner aquí los fragmentos de código relevantes (las definiciones de las clases y la línea del return, para empezar por algo) y vemos qué puede pasar...
    Sobremesa:Intel i5 2500K @ 4.4GHz + Noctua NH-U9 / ASUS P8Z68-V / G-Skill Ripjaws DDR3 1600 CL7 1.6v 2x2GB / Crucial M4 256GB
    Seagate 7200.10 250GBx2 RAID0 / X-Fi XtremeGamer / CF 2xSapphire 280X / Dell U2713HM / CM HAF932 / Corsair HX750 / Zalman MFC-1

    HTPC:AMD 720x3 + Shuriken B / Gigabyte GA-MA78GPM / Corsair DDR2 667 4x1GB / Seagate 7200.11 2TB + 1.5 TB + Crucial M4 128GB
    OCZ ModXstream Pro 600W / Antec Fusion Remote Black / HD250x / Panasonic 46PZ86 / Onkyo SR-606 / PS-204 + SLW12
    ¡Cuida tu ortografía un poco, leñe! / Mi guía de audio multicanal / ¿Me añades en steam? (MP!)

  4. #4

    Predeterminado Re: Java, compiladores y herencia

    Efectivamente, si que se puede hacer...

    http://download.oracle.com/javase/tu...turnvalue.html

    Salu2.
    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs,
    and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. [Rich Cook]
    Que todavía no has leído las Normas del Foro?

  5. #5
    El señor de los forillos Avatar de lastMonkey
    Ubicación
    http://localhost:8080
    Mensajes
    4,853

    Predeterminado Re: Java, compiladores y herencia

    Joder, CLARO que se puede hacer, justamente esa es la "magia" de la herencia y el polimorfismo... manejar muchas clases como una superior generica, olvidanodose de las particularidades de cada subclase.

    Pon si quiere el problema de compilación que te da, o el código que estás utilizando para echarle un ojo.

    Q9550 | EP45-DQ6 | 8GB DDR2 1066 HyperX | M4 128 + r0 F3x2 | GTX 550Ti | Hiper Type M 730W | TT Armor | Thermalright Ultra 120 ... >> W8 Review

  6. #6

    Predeterminado Re: Java, compiladores y herencia

    A ver, os pego lo interesante, a ver si me podéis echar una mano. Me extrañaba a mí que lo que hacía no se pudiera hacer.

    Primero importo el <<package>> en donde tengo todos los token que voy a usar.
    import tokenPack.*;
    Esta es la firma del método que uso para devolver las variable Token genérica
    public TokenClass nextToken () throws InternalExceptionClass { ...
    Y esto es un ejemplo de cómo construyo un tipo de token según lo que leí de la entrada:
    tokenPack.OpGTokenClass token = new OpGTokenClass(this.lineNumber); ...
    Al final del método hago lo que cabría esperar:
    return token;
    El error que me da Eclipse es el siguiente:
    token cannot been resolved to a variable
    Se me ocurre que quizás debería declarar token como estático o algo así.

    ¿Qué pensáis?

  7. #7

    Predeterminado Re: Java, compiladores y herencia

    Pon también el constructor de la la clase OpGTokenClass...

    Salu2.
    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs,
    and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. [Rich Cook]
    Que todavía no has leído las Normas del Foro?

  8. #8
    El señor de los forillos Avatar de lastMonkey
    Ubicación
    http://localhost:8080
    Mensajes
    4,853

    Smile Re: Java, compiladores y herencia

    Cita Iniciado por marine_fran Ver mensaje
    tokenPack.OpGTokenClass token = new OpGTokenClass(this.lineNumber); ...
    Esto no me queda nada claro (lo que puse en rojo) ...token de qué tipo se eupone que es??.

    Lo normal sería que tengas algo como:
    /* Clase abstracta o superClase */
    public Abstract Class TockenClass {}

    /* Dos implementaciones tontas de la clase "NO concreta" TockenClass */
    public Class TockenConcreto1 extends TockenClass {}

    public Class TockenConcreto2 extends TockenClass {}

    ...

    /* Y luego en el metodo que devuelve una instancia concreta has de utilizarlo de la siguiente forma: */

    public TockenClass obtenerTocken(...) {

    /* Aquí instancias la clase concreta que haga falta, la que sea. */
    TockenClass myTokenConcreto= new TockenConcreto1(...);
    return myTokenConcreto;
    }
    Te recomiendo que no intentes implementar este tipo de cosas copiando y pegando si es que NO has comprendido cómo funciona y/o su utilidad... aunque pueda parecer algo tonto has de comprender y ser capaz de "ver" los conceptos que en esas 3 lineas se aplican, que basicamente son herencia y polimorfismo.
    Última edición por lastMonkey; 05/04/2011 a las 12:45
    Q9550 | EP45-DQ6 | 8GB DDR2 1066 HyperX | M4 128 + r0 F3x2 | GTX 550Ti | Hiper Type M 730W | TT Armor | Thermalright Ultra 120 ... >> W8 Review

  9. #9

    Predeterminado Re: Java, compiladores y herencia

    Os comento.

    Cuando hago
    tokenPack.OpGTokenClass token = new OpGTokenClass(this.lineNumber); ...
    Token quiero que sea de clase OpGTokenClass, lo hago así para cargarlo desde el paquete en donde tengo todos los token.

    Este es el código del token OpGTokenClass
    package tokenPack;

    public final class OpGTokenClass extends TokenClass {

    private String typeOp;
    private String typeRes;

    public OpGTokenClass (int new_line) {
    super (new_line, "OpG");
    this.typeOp = "Int";
    this.typeRes = "Bool";
    }

    public String GetTypeOp () {
    return typeOp;
    }

    public String GetTypeRes () {
    return typeRes;
    }
    }
    Y este la clase del token general que hace de padre de la herencia:
    package tokenPack;

    public class TokenClass {

    private int line;
    private String type;

    public TokenClass (int new_line, String new_type) {
    assert new_line > 0;
    this.line = new_line;
    this.type = new_type;
    }

    public int GetLine () {
    return this.line;
    }

    public boolean PutLine (int new_line) {
    this.line = new_line;
    if (new_line > 0)
    return true;
    else {
    this.line = new_line;
    return false;
    }
    }

    public String GetType () {
    return this.type;
    }

    public boolean PutType (String new_type) {
    if (new_type.length() <= 0)
    return false;
    else {
    this.type = new_type;
    return true;
    }
    }
    }
    Como veréis, tengo algunos atributos y métodos ya definidos en la clase padre, y luego en las hijas la extiendo con nuevos atributos y métodos. Nada raro ahí.

    A ver si veis el fallo, que debe ser o muy tonto o un error de conceptos.

    Saludos.

  10. #10
    El señor de los forillos Avatar de lastMonkey
    Ubicación
    http://localhost:8080
    Mensajes
    4,853

    Predeterminado Re: Java, compiladores y herencia

    Puedes poner el método completo en donde haces: "Y esto es un ejemplo de cómo construyo un tipo de token según lo que leí de la entrada:" ??

    Desde ya te digo que el problema no tiene nada que ver con herencia, lo tienes bien implementado.
    Q9550 | EP45-DQ6 | 8GB DDR2 1066 HyperX | M4 128 + r0 F3x2 | GTX 550Ti | Hiper Type M 730W | TT Armor | Thermalright Ultra 120 ... >> W8 Review

Página 1 de 2 12 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •