Bonjour, je suis en DUT r&t et dans notre module de java. on a vu les méthodes, constructeurs,l'héritage toussa... je sais l’appliquer en TP quand c'est demandé, j'ai des bonnes notes mais clairement, ça sert à quoi? en fait, déjà, je vois pas l’Intérêt d'une méthode. pourquoi ne pas tout mettre dans un main ?
Car par exemple, j'ai une variable dans mon main, eh bah, je ne peux pas l'utiliser dans ma méthode ( même avec public, ça marchait pas )
pour le constructeur, ça veut quoi le this.variable = variable;
donc voilà, je me pose plein de question et je voulais savoir, pourquoi on utilise tout ça.
merci d'avance, j'espère avoir été assez clair dans mon problème
En gros tu te poses des questions sur l'utilité de l'orienté objet c'est ça ??
oui voilà
Le but de l'orienté objet c'est pouvoir mieux organiser l'architecture du logiciel.
Au début c'est pas très évident à voir vu qu'en TP c'est juste pour appliquer des connaissances, mais quand on est amené à faire de gros projets, avec plein de classes, ça aide beaucoup. Ca aide parce que c'est plus facile à debugger, mais aussi parce que quand c'est bien fait, c'est plus facile d'ajouter des fonctionnalités, surtout quand on sait que le client veut tout le temps rajouter des trucs.
Si on met tout dans un même fichier c'est ultra bordélique et c'est dur à debugger.
Je sais pas si tu as vu le Modele Vue Controleur et l'UML, parce qu'en générale ça va ensemble, surtout pour l'UML.
c'est juste une question d'organisation du programme finalement . ok merci.
Oui voilà. De rien ![]()
mais c'est quoi la différence entre créer une méthode et une sousclasse avec l'héritage car les 2 divisent le main en portion?
La méthode c'est :
-une fonction ( elle renvoie quelque chose)
-ou une procédure (elle ne renvoie rien)
Quand tu fait public static void main(String args), le main c'est une méthode.
Une sous-classe ça reste une classe comme les autres, avec des attributs et des méthodes, la seule différence c'est qu'elle hérite des propriétés de la classe mère, les attributs de la classe mère sont aussi les attributs de la classe fille.
L'avantage d'avoir ça c'est pour ne pas avoir des classes qui ont des trucs en commun. Chaque doit avoir des caractéristiques qui lui sont propres. Si tu as au moins deux classes qui ont des attributs ou des méthodes en commun, alors il faut créer une classe mère qui aura ces attributs en commun.
Par exemple, tu as 3 classes. Une classe personne, une classe etudiant, et une classe prof.
L'etudiant et le prof ils ont en commun : un nom, un prénom, un age.
Ces 3 trois attributs tu les mets dans la classe mère, c'est-à-dire Personne. Donc quand tu va instancier la classe enfant, ben il aura les caractéristiques de la classe Personne, tous comme Prof, mais les objets crées sont distincts.
Normalement les méthodes applicable à une classe doivent être définie dans la classe qui a la responsabilité. Etpour les classe il faut avoir un truc du genre
-> une classe = un fichier
Juste pour savoir tu es en premiere ou 2eme année de DUT?
1ere année et merci, j'ai enfin compris !
désolé de vous déranger mais aujourd’hui j'ai fais un td de prog java et on a traité ce programme ![]()

et je comprends pas pourquoi il affiche tel ou tel chose.
donc si vous pourriez me donner un coup de pouce, merci ;)
La prochaine fois, fourni plutôt le code via pastebin ou un service du même tonneau, c'est plus pratique
Vous êtes en train de voir l'héritage, non ?
a1 est déclarée A et est de type A.
a2 est déclarée A et est de type B.
b est déclarée B et est de type B.
Toute la difficulté ici est de déterminer quelle méthode est appelée suivant le type.
a1.f(a1) => A et A. Les deux sont des A, pas besoin d'aller plus loin.
a1.f(a2) => a1 est déclarée A et est A, a2 est déclarée A et est B. La méthode f appelée est celle de A. Nous avons ici pour seule certitude que a2 est A donc "A et A".
a2.f(a1) => a2 est déclarée A et est B, a1 est déclarée A et est A. a2 est B, donc c'est la méthode f de B qui est appelée. a1 étant A => "B et A".
a2.f(a2) => même explication que pour a1.f(a2), sauf que la méthode appelée est celle de B.
a2.f(b) => a2 est déclarée A et est B, b est déclarée B et est B. a2 est B, donc c'est la méthode f de B qui est utilisée. b est B donc => "B et B".
b.f(a2) => même explication que pour a1.f(a2), sauf que c'est la méthode f de B qui est invoquée.
Si tu comptes passer un jour les certifications Java, ce type de question (en plus complexe) est fréquent.
Tout d'abord il faut distinguer 2 choses : le type local de la variable (à gauche du =) et le type dynamique (à droite du =)
Donc quand tu passes un type local dans une fonction, il va prendre le type local. Typiquement pour a1.f(a2) ça donne A et A parce que le type local de a2 est "A" et le type dynamique de a1 est A.
Pour le type dynamique, il va s'appliquer quand tu appelles une méthode depuis celui-ci. Donc faire a2.f(a1) fera B et A car le type dynamique de a2 et "B" et a1 le type local "A". Même raisonnement pour a2.f2(a2). Le premier a2, son type dynamique et B mais son type local et A !
Pour le reste, c'est plus évident.
Si je prend l'exemple "B et A", en fait le but de ce tp c'est de comprendre exactement comment se passe l'appel d'une fonction défini dans tel classe avec en paramètre un objet de type d'une classe désignée.
Dans "B et A" ,B est la classe de l'objet qui appel la fonction, et A est le type de l'objet qui passe en paramètre.
ok merci les gars, je pars lire plus attentivement les réponses
Trois réponses à 4 minutes d'intervalle, c'est beau ![]()
oui c'est vrai, je les remercie mais quand tu dis:
a2 est déclarée A et est de type B.
je comprends pas la différence entre le type et le fait qu'elle soit déclarée A.
désolé de vous déranger encore une fois mais je m'entrainais au niveau de l'héritage toussa et pourquoi j'ai une erreur ici?
![]()