Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compréhension abstract

Quete d'apprentissage

Sujet résolu
    21 janvier 2011 à 21:35:10

    Bonjour à tous,

    Je me suis mis, depuis peu, au Java. Donc, je suis rendu au chapitre de la programmation orientée objet. Tout s'est bien passé jusqu'à temps que je rencontre les classes abstraites. Je réussis à les utiliser (et je compte relire le chapitre) et comprendre le blablabla. Toutefois, ma question est:
    Quelle est la réelle utilité d'une class abstraite ?

    Dans le tutoriel, on m'indique que celle-ci sert à: Les classes abstraites servent à définir une super classe impossible à instancier ! Donc à définir un super type ! Toutefois, je ne comprends pas cela me servirait à quoi de définir une super classe (en l'occurance main ?) impossible à instancier. Donc, j'aimerais bien qu'on m'informe des possibilités de l'abstract et de l'utilité que celle-ci peut avoir dans des projets concrets.

    Merci beaucoup :)
    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2011 à 23:15:03

      Salut lolown et bienvenu dans la communauté java ;)

      Une classe abstraite en effet une classe qu'on ne peut pas instancier.

      Tu veux un exemple d'utilisation ? En reprenant l'exemple de cysboy :
      on veut réaliser un jeu. On veut deux catégories de personnages : soldat et médecin.
      Ces deux catégories sont des classes disposant des méthodes seDéplacer() et action().

      Problème : en supposant que la façon de se déplacer des deux catégories soit la même, doit-on réécrire deux fois la même méthode ? La réponse est non. On va créer une classe abstraite, la classe Personnage, dont hériterons la classe soldat et médecin. Dans la classe Personnage, la méthode seDéplacer() sera défini car elle est commune aux deux personnages. La méthode action() sera quant à elle déclaré abstraite (abstract) car elle est propre à chaque catégorie.

      Second problème : imaginons qu'un autre programmeur souhaite utiliser ces 3 classes, il ne serait pas souhaitable qu'il ait la possibilité d'instancier un objet Personnage, mais plutôt d'instancier un soldat ou un médecin, ou encore une nouvelle classe héritant de Personnage.

      En espérant que ça t'a aidé, bonne soirée !
      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2011 à 1:55:49

        Merci beaucoup de ta réponse

        Donc, si je résume ce que j'ai compris de ta réponse, une classe abstract permet d'avoir un nom de méthode commun, tout en ayant une action différente pour le même nom.

        Exemple:
        Interface Personnage -> méthode vie { la vie se regénère à un rythme x }
        Classe Abstract X -> Méthode déplacer(); Méthode attaquer();
        extends X implements Personnage -> Classe Soldat -> déplacer() { Se déplace lentement }; attaquer() { Attaque fort }; methode vie / deja definie
        extends X implements Personnage -> Classe Voleur -> déplacer() { Se déplace rapidement }; attaquer() { Attaque faible }; methode vie / deja definie
        Classe test -> Exécute tout cela !

        Donc, il y aurait la méthode vie, où chacun (par exemple), gagne 1 point de vie par 10 secondes, commune au soldat et au voleur, venant de l'interface X
        Il y aurait la methode deplacer() et attaquer(), distinctes dépendant de chaque personnage, venant de la classe abstract X
        La classe test contient la main et gère cela
        C'est correct comme cela ?

        Merci :)

        Ps J'ai beaucoup apprécié ton accueil, c'est plus motivant de savoir qu'il y aura des gens comme toi pour nous appuyer, merci ^^
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2011 à 0:01:59

          N'oublie pas de marquer ton sujet comme résolu, et bonne continuation en java ;)
          • Partager sur Facebook
          • Partager sur Twitter

          Compréhension 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