Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2611 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Histoire d'heritage.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Histoire d'heritage.

n°1108217
Chronoklaz​m
Posté le 04-06-2005 à 19:44:29  profilanswer
 

Bonjour, voila j'aimerais resoudre un petit probleme d'heritage ...
 
J'ai :
 - une interface Document  
 - une classe abstract DocumentImpl qui implemente Document
 - une classe SupportCours qui herite de DocumentImpl
 - une classe Tp qui herite de DocumentImpl
 
Sachant qu'un SupportCours contient un attribut privé "cours" , j'aurais donc un accesseur getCours()..  
 
Je voudrais pouvoir faire des :
 

Code :
  1. Document doc_1 = new SupportCours(...);
  2. doc_1.getCours()


 
Or pour que ca marche getCours() doit etre declaré dans l'interface Document, donc je la declare en abstact dans Document, puis pareil dans DocumentImpl et dans SupportCours finallement je la redefini.
 
Le probleme est que je doit aussi la redefinir dans Tp, or dans Tp j'en ai pas besoin ...
 
Comment puis-je eviter d'avoir cette methode dans la classe Tp ??? La declarer abstract me parrait un peu sale. (en plus ca marche pas)
 
Merci.


Message édité par Chronoklazm le 04-06-2005 à 19:46:39

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
mood
Publicité
Posté le 04-06-2005 à 19:44:29  profilanswer
 

n°1108229
Profil sup​primé
Posté le 04-06-2005 à 20:16:41  answer
 

Pourquoi ne pas déclarer doc_1 de type SupportCours ?

n°1108234
Chronoklaz​m
Posté le 04-06-2005 à 20:26:18  profilanswer
 

C'est pas vraiment le but en fait ... y aura aucun polymorphisme avec des objets dont les classes n'appartiennent pas à la meme hierarchie d'heritage.


Message édité par Chronoklazm le 04-06-2005 à 20:26:31

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108235
chrisbk
-
Posté le 04-06-2005 à 20:27:32  profilanswer
 

ca m'a l'air bizarement fagoté ton histoire


---------------
NP: HTTP Error 764 Stupid coder found
n°1108236
Chronoklaz​m
Posté le 04-06-2005 à 20:29:08  profilanswer
 

chrisbk a écrit :

ca m'a l'air bizarement fagoté ton histoire


 
Bein oué desfois c'est compliqué ...


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108237
Profil sup​primé
Posté le 04-06-2005 à 20:29:52  answer
 

Rien compris. :D
 
Mais la solution pragmatique est :
 

Code :
  1. ((SupportCours) doc_1).getCours();


 
Et bien sûr tu ne déclares la méthode getCours que dans la classe SupportCours puisqu'elle n'a de sens que dans cette classe. [:spamafote]


Message édité par Profil supprimé le 04-06-2005 à 20:30:45
n°1108238
chrisbk
-
Posté le 04-06-2005 à 20:31:39  profilanswer
 

je propose meme  
 
 

Code :
  1. try {
  2.    ((SupportCours) doc_1).getCours();
  3. }
  4. catch(ClassCastException e) {
  5.    System.out.println("ah bin non, y'a pas de cours, en fait" );
  6. };



---------------
NP: HTTP Error 764 Stupid coder found
n°1108239
Chronoklaz​m
Posté le 04-06-2005 à 20:34:02  profilanswer
 


 
L'appel de la methode ce fait en fonction du type reel et non du type declaré ... sert a rien ton cast.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108240
Chronoklaz​m
Posté le 04-06-2005 à 20:34:39  profilanswer
 

Bon je vais tester


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108241
chrisbk
-
Posté le 04-06-2005 à 20:35:50  profilanswer
 

hehu ma solution c'etait pour la deconne hein ? [:pingouino]


---------------
NP: HTTP Error 764 Stupid coder found
mood
Publicité
Posté le 04-06-2005 à 20:35:50  profilanswer
 

n°1108242
Profil sup​primé
Posté le 04-06-2005 à 20:36:40  answer
 

Chronoklazm a écrit :

L'appel de la methode ce fait en fonction du type reel et non du type declaré ... sert a rien ton cast.


 
Mais bien sûr. :heink:

n°1108245
Chronoklaz​m
Posté le 04-06-2005 à 20:45:45  profilanswer
 


 
Bein oué, mais la y a une interface donc ... apparament vous avez raison, faut caster.
 
Mais pourtant y a surement un moyen de le faire sans cast, sinon ca serai pas dans un sujet d'examen. Genre la declarer en abstract dans l'interface et dans DocumentImpl ... et la redefinir dans SupportCours et dans Tp en faire une bidon qui renvoi null.


Message édité par Chronoklazm le 04-06-2005 à 20:50:20

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108251
Profil sup​primé
Posté le 04-06-2005 à 20:54:50  answer
 

C'est quoi l'intérêt de déclarer une méthode abstract dans une interface (puisque visiblement c'est possible) ?
 
Et pourquoi diable voudrais-tu déclarer une méthode dans une interface où ça n'a pas de sens ?

n°1108254
Chronoklaz​m
Posté le 04-06-2005 à 20:59:40  profilanswer
 

- Ca je sais pas .. peut etre pour la portée.
 
- Pour faire des Document doc; puis doc.getCours(). (pour moi si c'est dans un exam, ca a un sens   :D )


Message édité par Chronoklazm le 04-06-2005 à 21:02:11

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108363
nraynaud
lol
Posté le 04-06-2005 à 23:31:37  profilanswer
 

pattern Visitor :o


---------------
trainoo.com, c'est fini
n°1108367
Chronoklaz​m
Posté le 04-06-2005 à 23:40:32  profilanswer
 

nraynaud a écrit :

pattern Visitor :o


 
Merci à toi et ta grande clarté.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108378
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-06-2005 à 00:08:50  profilanswer
 

Chronoklazm a écrit :

Merci à toi et ta grande clarté.


et encore, t'as du bol ! à une époque, il ne mettait aucun smiley [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1108423
nraynaud
lol
Posté le 05-06-2005 à 00:46:14  profilanswer
 

de rien, j'aime aider les débutants.


---------------
trainoo.com, c'est fini
n°1108429
nraynaud
lol
Posté le 05-06-2005 à 00:50:23  profilanswer
 

bon explique-nous un peu les traitements qui impliquent de regarder les cours dans un Document ... On va tenter de mettre ça à plat.


---------------
trainoo.com, c'est fini
n°1108478
Chronoklaz​m
Posté le 05-06-2005 à 01:42:26  profilanswer
 

Bein en fait un Support de Cours est lié a un cours (un objet Cours quoi), donc on aura un attribut privé cours dans la classe SupportCours (+ un accesseur), ce qui n'est apparament pas le cas pour un TP. En fait un Tp illustre un Support de cours ... donc pour connaitre le cours auquel est lie un Tp on passera par le SupportCours d'un Tp.
 
DocumentImpl implemente Document ... SupportCours et Tp herite de DocumentImpl.
 
Enfin bon, une prise de tete pas possible pour pas grand chose quoi.
 
Donc la vrai question serai : Peut on implementer certaine methodes d'une Interface ... une selection plutot que tout ?
 
Et aussi, toi qui adore aider les debutants :) Ca sert a quoi de declarer des methodes abstract dans une Interface, ca a une utilité concrete ?  


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108498
benou
Posté le 05-06-2005 à 01:55:46  profilanswer
 

Chronoklazm a écrit :

Ca sert a quoi de declarer des methodes abstract dans une Interface, ca a une utilité concrete ?


ca n'a aucun sens : une interface ne fait que de déclarer des méthodes => elles sont toutes à implémenter (ce qui est la signification d'abstract) => pour peu qu'on puisse déclarer une méthode d'une interface abstract (ce dont je doute), c'est stupide.
 
 
Chronoklaz>
ta méthode getCours n'a rien à faire dans l'interface Document.


Message édité par benou le 05-06-2005 à 01:59:03

---------------
ma vie, mon oeuvre - HomePlayer
n°1108499
Profil sup​primé
Posté le 05-06-2005 à 01:56:52  answer
 

benou a écrit :

ca n'a aucun sens ...


 
Mais c'est possible de le faire (même si ça n'a visiblement aucun effet). :D

n°1108502
Profil sup​primé
Posté le 05-06-2005 à 02:00:29  answer
 

Chronoklazm a écrit :

Bein en fait un Support de Cours est lié a un cours (un objet Cours quoi), donc on aura un attribut privé cours dans la classe SupportCours (+ un accesseur), ce qui n'est apparament pas le cas pour un TP. En fait un Tp illustre un Support de cours ... donc pour connaitre le cours auquel est lie un Tp on passera par le SupportCours d'un Tp.
 
DocumentImpl implemente Document ... SupportCours et Tp herite de DocumentImpl.
 
Enfin bon, une prise de tete pas possible pour pas grand chose quoi.
 
Donc la vrai question serai : Peut on implementer certaine methodes d'une Interface ... une selection plutot que tout ?


 
La vraie question c'est : quel est le rapport entre la première partie de ton message et la question que tu poses à la fin ?
 
Il est où le problème ? Tu veux implémenter certaines méthodes d'une interface est pas d'autres ? Rigoureusement c'est pas possible. En pratique il suffit de les définir vide.
 
A partir de là il n'y a que toi qui sais ce que tu as le droit de faire ou non, ou alors file le vrai sujet, donne une solution possible et on te dit si ça nous paraît correct ou pas. Je vois que ça. [:spamafote]


Message édité par Profil supprimé le 05-06-2005 à 02:01:30
n°1108538
Chronoklaz​m
Posté le 05-06-2005 à 10:38:40  profilanswer
 

benou a écrit :

...
Chronoklaz>
ta méthode getCours n'a rien à faire dans l'interface Document.


 
Je suis d'accord mais pourtant :
 

Citation :


Question 9 : (3 points) Voici un morceau de code :
 
// doc est un support de cours ou un TP, ou tout autre document
Document doc;
Cours cours;
...
// Si le document est associé au cours,...
if (doc.getCours() == cours) {
  . . .
}
 
 
 
Écrivez les méthodes nécessaires pour que ce schéma puisse fonctionner. Pour chaque méthode, indiquez à quelle classe ou interface elle appartient. Expliquez brièvement où le polymorphisme est utilisé.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108540
Chronoklaz​m
Posté le 05-06-2005 à 10:46:37  profilanswer
 


 
 
Quel est le rapport :   Bein j'ai une interface et dans une classe (SupportCours) qui l'implemente je veux redefinir une methode, et dans une autre classe qui l'implemente (Tp) je n'en veux pas ... une selection quoi.
 
Pour le sujet : http://deptinfo.unice.fr/~grin/mes [...] nonce.html
 
Pour la solution : J'en ai deja une ... je cherchai juste a capté comment faire pour ne pas ecrire de methode getCours dans la classe Tp.
 


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1108653
Profil sup​primé
Posté le 05-06-2005 à 14:20:56  answer
 

Le schéma est idiot en lui-même. Pour avoir envie d'appeler getCours qui n'a de sens que dans SupportCours, il faut savoir à l'avance (ou le tester à l'exécution) que "doc" sera en fait un SupportCours. Et dans les deux cas, ça passe par un cast.
 
Si tu te mets à déclarer getCours dans Document pour pas avoir à faire de cast dans ce cas tu vas devoir déclarer tous les accesseurs de toutes les classes qui implémentent ton interface, ce qui est idiot (de toutes façons c'est déjà idiot de le faire pour un seul accesseur). Le sujet précise bien en plus "// doc est un support de cours ou un TP, ou tout autre document".

n°1108663
nraynaud
lol
Posté le 05-06-2005 à 14:38:08  profilanswer
 

benou a écrit :

ca n'a aucun sens : une interface ne fait que de déclarer des méthodes => elles sont toutes à implémenter (ce qui est la signification d'abstract) => pour peu qu'on puisse déclarer une méthode d'une interface abstract (ce dont je doute), c'est stupide.


c'est pas exactement ça.
 
En fait toutes les méthodes d'une interface sont implicitement "abstract" et donc le mot-clef devient optionnel dans les interfaces.
 
par contre :

Citation :

For compatibility with older versions of the Java platform, it is permitted but discouraged, as a matter of style, to redundantly specify the abstract modifier for methods declared in interfaces.


http://java.sun.com/docs/books/jls [...] html#78651
 
chrono > je réponds dans un autre post à la vraie question ...


---------------
trainoo.com, c'est fini
n°1108666
nraynaud
lol
Posté le 05-06-2005 à 14:56:18  profilanswer
 

chrono > c'est très très con :  

Code :
  1. class Tp {
  2.   public Cours getCours() {
  3.     return getSupportCours().getCours();
  4.   }
  5. }


 
(je donne la réponse parce que je pense qu'il est passé à côté)
 
ce qu'il veut dans cette question, c'est tous les documents associé à un cours.


---------------
trainoo.com, c'est fini
n°1108687
Chronoklaz​m
Posté le 05-06-2005 à 15:17:33  profilanswer
 

Ah ouais ptain ... on aura forcement une methode getCours() dans Tp et dans tout document.
 
Merci les gens !


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Histoire d'heritage.

 

Sujets relatifs
Héritage multiple ?[C# .NET] Classes, héritage, 3D
héritage de classehéritage multiple
Héritage - JBuilder 9template iterator héritage, OK pour visual, Erreurs avec Gcc
héritage : ajouter et supprimer des objetsclasse abstraite generique + heritage
Heritage et J2MEUne histoire d'include et d'exit
Plus de sujets relatifs à : Histoire d'heritage.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR