IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Constantes abstraites??


Sujet :

Langage Java

  1. #1
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut Constantes abstraites??
    est-il possible de définir dans une classe abstraite un constante abstraite, càd une constante que je devrais définir dans les sous classes, dans mon cas, on a la classe abstraite MathObject :

    et je veux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static abstract  final MathObject IDENTITY;
    le but étant de redéfinir IDENTITY. Dans le cas de la sous-classe Matrix, il représentera la matrice identité, dans le cas d'un nombre complexe, le complexe 1 + 0 i , etc...

    Comment peux-t-on faire?
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  2. #2
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Il n'est pas possible de créer des variables abstraites, et puis tu aurais pu le voire, ca ne passe pas à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public abstract class Test
     {
      public static abstract final Test test;
     }
    D:\projets\developpez.com\Test.java:5: modifier abstract not allowed here
    public static abstract final Test test;
    ^
    1 error
    Par contre, tu ne peux pas définir une variable d'une classe abstraite en final, ça n'a pas de sens...

    mavina
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Impossible de créer des constantes abstraites.... soit...

    Mais pourquoi ne pas utiliser des méthodes qui devront renvoyer cette fameuse constante !?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    interface I {
      int getConst();
    }
    ...
    class C1 implements I {
      public int getConst(){return 1;}
    }
    class C2 implements I {
      public int getConst(){return 2;}
    }
    ...
    Il faut juste que les classes qui implémentent l'interface respectent son contrat, à savoir que plusieurs appels successifs à la méthode getConst doivent toujours renvoyer la même valeur...

    Si on y réfléchit, nul besoin d'utiliser des constantes abstraites, les méthodes peuvent les remplacer avantageusement...

    C'est bien foutu Java quand même...

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  4. #4
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    bah, j'ai résolu le problème autrement : je mets ici le bout de code, il entre dans la conception d'une librairie mathématique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
         /**
         * Returns a MathObject at the power n.     
         * @param n the power to apply to the MathObject.
         * @param obj the MathObject to get the power.
         * @return a MathObject at the power n.
         **/
        public static MathObject pow(int n, MathObject obj)
        {        
            if(n == 0)
            {
                if(obj instanceof ComplexNumber)
                {
                    ComplexNumber cplx = (ComplexNumber)obj;
                    return new ComplexNumber(1);
                }
                else if(obj instanceof Polynome)
                    return new Polynome(1);
                else if(obj instanceof Matrix)
                {
                    Matrix mat = (Matrix)obj;
                    return new Matrix(mat.getNbrRows(), Matrix.IDENTITY, null);
                }
            }
        else if(n % 2 == 0)        
            obj = pow(2 , pow(n/2 , obj));        
        else
            obj.multpiply(pow(2 , pow(n/2 , obj)));
        return obj;
        }
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  5. #5
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    lol c'est peut-être un peu obscur, mais pour ne pas vous mettre tous les codes, new Polynome(1) construit un polynome constant (le seul terme étant égal à 1), new ComplexNumber(1) construit le réél 1, et la dernière instruction construit une matrice identité.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Le problème avec ton implémentation c'est que le jour où tu voudras gérer d'autres types de MathObj, tu seras obligé de modifier le code de la méthode pow(). Il serait plus judicieux d'utiliser le polymorphisme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public abstract class MathObject {
       ...
       public abstract MathObject valueOf(int n);
    }
     
    public class ComplexNumber {
       public MathObject valueOf(int n) {
          return new ComplexNumber(n);
       }
    }
     
    public class Matrix {
       public MathObject valueOf(int n) {
          return new Matrix(this.getNbrRows(), IDENTITY.multiply(n), null);
       }
    }
     
    public static pow(int n, MathObject obj) {        
       if (n == 0) {
          return obj.valueOf(1);
       ...
    }

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 859
    Points
    22 859
    Billets dans le blog
    51
    Par défaut
    Et meme la c'est pas super complet puisque si mes (faibles et tres lointains) souvenirs de maths sont bons ca ne permet pas de faire des racines (ex : racine carrree (4) = 4 ^ ½) et autres puissances negatives (ex: nottation scientifique 10 ^ -1)...
    Autant coder la fonction puissance* directement avec des simplification/surcharges speciales quand on a des nombres entiers.

    * xª = e ^ (a ln x)

    X appartient a IR+
    a appartient a IR
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    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

  8. #8
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    oui mais pour les puissances le problème n'est pas résolu... Vu qu'on utilise des fonctions exponentielles et logarithmiques, que je ne VEUX pas utiliser.

    Pour les racines je m'en sors comme suit :
    Pour la reice nième de u, je construis le polynome x^n - u = 0.
    J'applique l'algotithme de Newton, (je suis certain que les hypothèses sont vérifiées car les polynômes sont simples) et je trouve une racine réelle : racine n-ième de u...

    Il fallait y penser ;-)
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  9. #9
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    c'est bon j'ai trouvé je ne m'y prenais pas bien... Il suffit de créer un interface Identity, avec une seule méthode, identity(), que je devrais implémenter dans toutes mes classes matrice, polynome, complex, ...
    Tout simplement.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des constantes
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/06/2003, 16h23
  2. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27
  3. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02
  4. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo