|
Bas de page | |
---|---|
Auteur | Sujet : Abstract |
![]() Publicité | Posté le 15-01-2017 à 22:11:53 ![]() ![]() |
Harkonnen ModérateurUn modo pour les bannir tous | Toutes les méthodes d'une classe abstraite doivent obligatoirement être implémentées dans les classes filles, à la différence des méthodes virtual pour lesquelles ce n'est pas obligatoire. Message édité par Harkonnen le 16-01-2017 à 10:25:15 --------------- J'ai un string dans l'array (Paris Hilton) |
DDT Few understand | Plus simplement il pourrait bouger les méthodes qui n'ont pas de sens dans Vehicule vers AMoteur par exemple. --------------- click clack clunka thunk |
Kagaya | Justement DDT, si je bouge ces méthodes vers AM, je ne pourrais pas les utiliser avec une classe Vehicule. Je serais obligé de faire AMoteur v1 = new Voiture() et v1.approvisionner()...
|
Harkonnen ModérateurUn modo pour les bannir tous | Oui, c'était ça. --------------- J'ai un string dans l'array (Paris Hilton) |
DDT Few understand |
--------------- click clack clunka thunk |
Harkonnen ModérateurUn modo pour les bannir tous | Moi quelque chose me gêne dans tout ça, et DDT a raison : pourquoi absolument vouloir tout mettre dans une classe Véhicule ? OK, un vélo est un véhicule, et une voiture est un véhicule. Mais une classe de base doit définir tous les comportements communs, à toutes ses sous-classes, et de toute évidence, la méthode approvisionner() n'est pas un élément commun, car un vélo n'a pas de réservoir à essence. Pour moi, la classe Vehicule ne devrait définir que la méthode rouler(). Etant donné qu'il peut exister plusieurs façons de rouler pour un véhicule, on ne peut pas définir un comportement commun, donc cette classe devrait effectivement être abstraite comme dans le premier post. Puis en fonction des différents comportements souhaités, on pourrait définir des interfaces correspondantes : une interface Motorisable qui contiendrait les méthodes approvisionner(), enPanne(), transporter2 et transporter3, et une interface NonMotorisable qui contiendrait la méthode transporter1. Un exemple :
Message édité par Harkonnen le 17-01-2017 à 23:56:52 --------------- J'ai un string dans l'array (Paris Hilton) |
Kagaya | C'est ce que j'ai fait au début, mettre les méthodes communes dans les bonnes classes : - La méthode rouler() dans la classe Véhicule. Avec la classe Véhicule comme classe mère, AMoteur et SansMoteur ses classes filles, et Velo,Voiture,Camion leurs classes filles. C'est ce que j'ai fait. Mais comme vous le savez, je ne peux pas accéder aux méthodes filles en créant un Vehicule v1...Seul v1.rouler pourra marcher. v1.approvisionner, transporter, etc...ne fonctionneront pas sauf si je crée des abstracts mais je vais devoir implémenter dans toutes les classes filles... C'est la raison pour laquelle je suis venu poser la question ici. Je veux accéder à toutes les méthodes depuis une classe Principale : Vehicule. C'est pour ça que j'aime bien la méthode de Harkonnen (les méthodes virtuelles) car je peux créer un Vehicule et le code va se charger AUTOMATIQUEMENT de trouver les bonnes méthodes en fonction du type de véhicule. Je peux ajouter des messages d'erreur au cas où. Après, je comprends que ça n'a pas de sens. Mais mon but était d'accéder à toutes les méthodes depuis la classe Vehicule (exercice de cours liaisons dynamiques), alors je pense que ce que m'a dit Harkonnen était le but de l'exercice. J'ai essayé avec les interfaces, mais je peux pas accéder aux méthodes filles depuis la classe Vehicule. Je suppose que je dois créer le vehicule de cette manière : Motorisable voiture = new Voiture() ou encore, Voiture voiture new Voiture() pour accéder aux méthodes de Motorisable et Voiture ? Message cité 1 fois Message édité par Kagaya le 17-01-2017 à 16:50:04 |
Profil supprimé | Posté le 17-01-2017 à 21:24:48 ![]() Bonjour, je connais trop peu java pour donner un conseil ici.
|
Harkonnen ModérateurUn modo pour les bannir tous |
Sinon, tu peux choisir d'instancier un Vehicule par exemple, et tester le type au runtime pour employer des méthodes spécifiques :
Message édité par Harkonnen le 18-01-2017 à 00:08:40 --------------- J'ai un string dans l'array (Paris Hilton) |
![]() Publicité | Posté le 17-01-2017 à 23:49:26 ![]() ![]() |
Kagaya | Je vois, merci beaucoup, j'ai appris pas mal de choses grâce à ce post (notamment instanceof qui me facilite la gestion d'un tableau de Vehicule). J'ai testé avec les instanceof et ça règle tous les problèmes. Merci encore. |
Harkonnen ModérateurUn modo pour les bannir tous | You're welcome --------------- J'ai un string dans l'array (Paris Hilton) |
sebi |
--------------- A religious war is like children fighting over who has the strongest imaginary friend. |
Sujets relatifs | |
---|---|
abstract factory et factory | Champs ou méthode abstract ET statique (vive la POO) |
Abstract Extends et Super... | must implement the inherited abstract |
[Java] héritage abstract | LATEX, probleme pour faire un abstract ... assez urgent |
Abstract Factory Patterns | [java] probleme entre class abstract et methodes abs. |
[JAVA] abstract et interface | |
Plus de sujets relatifs à : Abstract |