Partage
  • Partager sur Facebook
  • Partager sur Twitter

Class Vecteur héritée de Matrice

problème constructeur - super()

Sujet résolu
    18 mai 2012 à 23:50:46

    Bonsoir,

    J'ai une classe Matrice et j'aimerais créer une classe Vecteur qui hérite de Matrice.
    Un vecteur à deux orientation possible : VERTICAL ou HORIZONTAL, et une dimension.
    Donc lorsque que je crée un Vecteur j'aimerais pouvoir lui indiquer une dimension une orientation puis dire que c'est une matrice de tant de ligne et tant de colonne en fonction des paramètres...
    Ça tombe (presque :) ) bien puisque j'ai justement un constructeur de Matrice qui permet de faire ça.
    Mais voilà je ne peux appeler la méthode super(int ligne, int colonne) qu'au tout début de mon constructeur, du coup impossible.

    Comment je pourrais faire?

    Merci d'avance!
    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2012 à 0:20:42

      Ceci ne fonctionne pas ?

      public Vecteur (Orientation o, int dimension) {
          super (o == Orientation.HORIZONTAL ? dimension : 1,
              o == Orientation.HORIZONTAL ? 1 : dimension);
      }
      

      En supposant que Orientation est une énumération sur la direction de la matrice.
      • Partager sur Facebook
      • Partager sur Twitter
      Je ne réponds pas aux MP techniques, les forums sont là pour ça / Danser le rock à Lille / BetaSeries
        19 mai 2012 à 0:27:38

        Bah en fait non :) parce que justement l'orientation n'est pas une énumération sur la direction de la matrice.
        En fait les attributs de la Matrice c'est juste : double[][] mat, int colonne et int ligne.

        Je veux bien faire comme ça mais ma classe matrice n'aura plus de sens. Parce qu'une matrice quelconque horizontale et une matrice quelconque verticale... mouais ^^.
        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2012 à 0:41:42

          Citation : Vodkada

          En fait les attributs de la Matrice c'est juste : double[][] mat, int colonne et int ligne.


          Redondance : ton nombre de lignes et nombre de colonnes sont normalement définis par ton tableaux qui contient les données de la matrice.

          Sinon la solution de Naked Snake fonctionne pour moi, je ne vois pas où est le problème. L'orientation n'est pas une énumération sur la direction de la matrice mais juste un artifice pour le constructeur ; une version plus complète serait :
          public class Vecteur extends Matrice {
              public enum Orientation {
                  HORIZONTAL,
                  VERTICAL,
              }
              
              public Vecteur (int longueur, Orientation orientation) {
                  super(  Orientation.HORIZONTAL.equals(orientation) ? longueur : 1,
                          Orientation.VERTICAL.equals(orientation) ? longueur : 1);
              }
          }
          


          PS : Si c'est l'enum qui te perturbe, ici tu peux le remplacer par un booléen - c'est juste moins lisible.
          • Partager sur Facebook
          • Partager sur Twitter
            19 mai 2012 à 1:00:30

            Citation : SpaceFox

            Redondance : ton nombre de lignes et nombre de colonnes sont normalement définis par ton tableaux qui contient les données de la matrice.



            Effectivement! Je prends note et je modifierais ça!

            Sinon oui effectivement (encore une fois), j'avais très mal lu ce que disait Naked Snake... Je mets ça sur le compte de la fatigue. C'est parfait en fait! J'y penses jamais à ces "?". Je me souviens même plus de leur nom tient. Tu pourrais me le rappeler stp histoire que je puisse comprendre exactement comment ils fonctionnent? Ou leur utilisation se limite à ton exemple (qui à une faute si j'ai bien compris :p )?

            Merci en tout cas !
            • Partager sur Facebook
            • Partager sur Twitter
              19 mai 2012 à 1:52:30

              Ah oui, alors ça c'est un peu tricky : la structure suivante (opérateur ternaire) :
              a ? b : c
              

              veut dire "si la condition A est vérifiée, renvoyer la valeur B, sinon la valeur C".

              C'est obligatoire ici parce que l'instruction super() si elle existe doit être la première instruction d'un constructeur (logique, il faut que l'objet parent soit construit avant de pouvoir créer le fils). Donc on ne peut pas faire de
              if (test) { super(x, y); } else { super(z, w) ; }
              
              • Partager sur Facebook
              • Partager sur Twitter
                19 mai 2012 à 9:49:39

                Ok merci beaucoup SpaceFox!
                Et oui c'est assez logique en fait pour l'instruction super mais assez contraignant aussi :)

                ++
                • Partager sur Facebook
                • Partager sur Twitter

                Class Vecteur héritée de Matrice

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown