Partage
  • Partager sur Facebook
  • Partager sur Twitter

A quoi sert abstract ?

Anonyme
    30 novembre 2015 à 18:48:03

    Bonjour,

    Je suis débutant en JAVA et je suis en train d'apprendre la POO, mais je ne comprend pas l'utilité du mot clé abstract, et je n'ai pas trouvé de réponse claire sur google. Quelqu'un pourrait-il m'aider ?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2015 à 19:23:53

      Bonsoir.

      abstract permet de définir :

      • une classe comme "abstraite"
        Cela veut dire que ta classe n'est pas complètement implémenté, c'est à dire qu'il y a des méthodes abstraites.
      • une méthode comme abstraire
        Cela veut dire que tu ne dis pas ce qu'elle fait mais ce qu'elle devra faire. Ainsi les classes filles devront implémenter cette méthode manquante.
      • Partager sur Facebook
      • Partager sur Twitter
      Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
      Anonyme
        30 novembre 2015 à 19:35:47

        Mais dans ce cas , pourquoi ne pas créer une classe normale et rajouter les fonctions dans les classes fille ? De tout façon, elle seront tapées dans la classe fille...
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2015 à 19:53:29

          C'est l'intermédiaire entre la classe (normale) et l'interface (aucune implémentation).
          Cela permet de bénéficier notamment de l'héritage.

          Au cours de ton apprentissage tu rencontreras surement la problématique et tu verras quels sont les avantages (je n'ai pas d'exemple en tête).

          -
          Edité par Pinguet62 30 novembre 2015 à 19:54:02

          • Partager sur Facebook
          • Partager sur Twitter
          Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
          Anonyme
            30 novembre 2015 à 20:01:43

            :/ Merci comme-même :) , je verrai bien plus tard...
            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2015 à 22:43:46

              L'intérêt d'une classe abstraite, c'est qu'il peut y avoir plusieurs classes filles. Si tu as une méthode dont le code est identique pour toutes les classes filles (ou une majorité d'entre elles), tu l'écris dans la classe abstraite. Elle sera transmise à toutes les classes filles grâce à l'héritage. Ca évite de faire du copier-coller. Et puuis si tu veux corriger, modifier ou optimiser ta méthode, tu le fais une fois dans ta classe abstraite et les changements sont immédiatement propagés à toutes les classes filles.
              • Partager sur Facebook
              • Partager sur Twitter
                1 décembre 2015 à 23:11:21

                brubru777 a écrit:

                L'intérêt d'une classe abstraite, c'est qu'il peut y avoir plusieurs classes filles. Si tu as une méthode dont le code est identique pour toutes les classes filles (ou une majorité d'entre elles), tu l'écris dans la classe abstraite. Elle sera transmise à toutes les classes filles grâce à l'héritage. Ca évite de faire du copier-coller. Et puuis si tu veux corriger, modifier ou optimiser ta méthode, tu le fais une fois dans ta classe abstraite et les changements sont immédiatement propagés à toutes les classes filles.

                C'est plutôt l'héritage "normal", pouvant être fait sans être abstrait. :soleil:

                • Partager sur Facebook
                • Partager sur Twitter
                Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                  1 décembre 2015 à 23:46:40

                  Oui, c'est vrai aussi. :) La différence entre une classe abstraite et "normale", c'est qu'on ne peut pas instancier une classe abstraite.En gros, c'est une classe "incomplète" qui contient deux sortes de méthodes.

                  - Des méthodes dont le code est identique pour les classes filles et qui sont implémentées dans la classe abstraite.

                  - Des méthodes qui sont définies, mais pas implémentées dans la classe abstraite, qu'il faudra obligatoirement implémenter dans les classes filles (sauf si elles sont elles-mêmes abstraites).

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    2 décembre 2015 à 12:08:58

                    Si j'ai bien compris une classe abstraite doit juste obliger une classe fille à réécrire la méthode abstraite , c'est ça ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 décembre 2015 à 13:46:10

                      brubru777 a écrit:

                      Si tu as une méthode dont le code est identique pour toutes les classes filles (ou une majorité d'entre elles), tu l'écris dans la classe abstraite. Elle sera transmise à toutes les classes filles grâce à l'héritage. Ca évite de faire du copier-coller. Et puuis si tu veux corriger, modifier ou optimiser ta méthode, tu le fais une fois dans ta classe abstraite et les changements sont immédiatement propagés à toutes les classes filles.

                      Euh le besoin auquel répond l'héritage, c'est la substituabilité. Si c'est juste pour factoriser du code, la composition convient sans problèmes. Elle convient même mieux car elle impose moins de travail pour respecter les contrats (notamment l'invariant de la classe).

                      Nada#3 a écrit:

                      Si j'ai bien compris une classe abstraite doit juste obliger une classe fille à réécrire la méthode abstraite , c'est ça ?

                      On peut voir les classes abstraites comme une spécialisation du concept de l'interface vers le concept de la classe :

                      • comme dans une classe, l'implémentation établit et assure ses contrats (invariant de la classe), pour autant,
                      • comme dans une interface, on demande aux classes dérivées et définir certaines fonctions pour pouvoir être instanciées.

                      -
                      Edité par Ksass`Peuk 2 décembre 2015 à 14:29:58

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                      A quoi sert abstract ?

                      × 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