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 :

Génerics et Héritage, comment concilier?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    Par défaut Génerics et Héritage, comment concilier?
    Bon j'explique mon problème :
    J'ai fait une classe AbstractFunction, abstraite, qui va me permettre de modéliser des fonctions quelconques, en y déclarant quelques méthodes comme eval() (calcule l'image en un pt), derive(), integre, ... et y définit des méthodes comme le thm des valeurs intermédiares, thm de Newton, du point fixe, ...

    Jusque-là, tout va bien, une belle classe générale.

    Ensuite je crée une classe Polynome, qui hérite de AbstractFunction, tout va bien, mes coefficients sont réels...
    Seulement voilà, je veux être général par souci de réutilité j'implémente cette classe avec des types génériquesn afin de pouvoir créer des polynômes de matrice par exemple, de la manière suivante : Polynome p = new Polynome<Matrix>( ... );

    Je ne dois globalement pas redéfinir les méthodes qui font + - * /, ni même derive(), integre() de la classe abstraite, tout ça va bien...
    Mais le problème monstrueux est le suivant : comment appliquer le théorême des valeurs intemédiares à un polynôme de matrices? Il n'y a en effet pas d'ordre sur Rn x Rm... A la limite on se dit c'est facile, onj utilise une norme usuelle sur les matrices (je vous épargne la définition) et ça va fonctionner... Et bien non car une norme est >= 0 et je ne peux pas aller dans le négatif, ennuyeux pour le thm...

    Enfin voilà j'espère que je me suis fait comprendre et qu'il y aura qqn pour m'aider, je ne suis peut-être pas au bon endreoit, j'aurais peut-être dû poster du côté algorithmique...

    Merci d'avance pour vos réponses

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    J'avoue ne pas y avoir compris grand chose (il est trop tot ) mais de deux choses :
    * soit ton problème est resolvable mathematiquement mais la ce n'est pas moi qui vais t'aider mais plutot le forum algo, mais le solution peut etre d'utiliser une fonction tierce dans ton algo pour gerer ton cas particulier....

    * soit il s'agit d'un problème de conception et je peut peut etre essayer.

    Je dirais que tu essaye de trop "factoriser" ton code, serait ce pas possible de redefinir la focntion qui te pose problème? Autrement dit, au lieu de passer par une classe abstraite, passe initialement par une interface, et utilise une classe abstraire apres seulement pour regrouper les classes ayant un meme comportement, les autres pouvant directement implémenter l'interface....

  3. #3
    Membre éprouvé
    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 : 40
    Localisation : Chine

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Salut,

    rien ne t'empeche de surcharger dans ta classe fille, le polymorphisme se chargera d'aller chercher la bonne fonction...
    non ?

    mavina

  4. #4
    Membre éclairé 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
    Par défaut
    Oui, surcharger, ok, mais comment pour appliquer le fameux Théorême? Il n'y a pas d'ordre sur les matrices...

    A part faire un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(T instanceof Matrix)
       throw new IllegalPolynomeException("Non comparable Polynome");
    mais faut avouer que c'est pas très beau...

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Tu ne devrais pas avoir une seule classe AbstractFunction... Mais plutôt, par exemple une classe AbstractFunction qui définit les opérations communes à tous les types (add, substract...).
    Ensuite 2 classes abstraites héritant de AbstractFunction (AbstractRealFunction, AbstractMatrixFunction) qui définissent les opérations particulières... Et après tes classes concrètes...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    Si j'ai bien compris, tu ne peux appliquer le théorème que pour des fonctions qui s'appliquent sur un ensemble ordonné.

    Tu peux essayer d'implémenter ton théorème dans une nouvelle classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class TheoremeValeursIntermediaires<T extends AbstractFunction<D>, 
        D extends Comparable>  {
        public D calculerTheoremeValeursIntermediaires(T fonction, 
            D a, D b, D imageC) {
            ..
        }
    }

Discussions similaires

  1. Arraylist et héritage, comment profiter des deux?
    Par Fikus dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/03/2007, 17h09
  2. [conception] Héritage comment faire ?
    Par bohor2gannes dans le forum Modélisation
    Réponses: 11
    Dernier message: 15/02/2006, 17h35
  3. Réponses: 1
    Dernier message: 26/07/2005, 08h33

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