human
Qu'est-ce que les méthodes/classes abstraites dans les langages de programmation. Surtout en Java. Je l'apprends en ce moment mais je n'arrive pas à le comprendre. Explique comme si j'avais cinq ans.
gpt
Je vais supposer que vous connaissez l'héritage, parce que cela n'a pas trop de sens autrement. Quoi qu'il en soit, l'idée de base est que nous avons souvent des classes dont nous savons qu'elles vont gérer de nombreux objets similaires. Nous pourrions, par exemple, avoir une classe appelée "Equations" qui a beaucoup d'objets qui sont des formules mathématiques. Supposons que nous voulons que la classe soit capable de faire certaines choses, comme tracer les équations, les résoudre, des trucs comme ça. Si nous voulons que notre classe " Equations " soit robuste , elle devrait avoir des * sous - classes * selon le type d' équation dont il s'agit . La méthode « résoudre » pour une équation quadratique est très différente de la méthode « résoudre » pour une équation différentielle , donc la façon naturelle de gérer cela est de créer des sous-classes qui étendent les équations , c'est-à-dire « Quadratic étend les équations » (il pourrait même y avoir une méthode qui identifie le type d'équation et la place automatiquement dans la bonne sous-classe). Maintenant , nous ne pouvons pas mettre une méthode générique " résoudre " dans Equations , puisque nous voulons qu'elle fasse des choses différentes ( et peut - être même renvoient différents types de sortie ) selon l' équation , mais nous voulons que chaque objet Equations ait un "solve" méthode définie dans sa sous-classe spécifique. La façon intelligente de gérer cela est de mettre une méthode abstraite « résoudre » dans Equations (qui doit donc être une classe abstraite). En fait, vous ne mettez rien dans la méthode abstraite : plutôt, ce qu'elle fait, c'est dire que chaque sous-classe d'Equations * doit * déclarer une méthode « résoudre ». Il n'est pas *absolument nécessaire* que vous déclariez une méthode abstraite de « résolution », mais c'est une très bonne pratique de programmation générale. En ce moment, vous travaillez probablement seul sur de petits programmes, mais dans le monde réel, vous pourriez être en train d'écrire des classes avec lesquelles des dizaines voire des milliers de personnes travaillent. Si vous écrivez votre classe "Equations" et que d'autres personnes écrivent des sous-classes pour elle et des scripts qui appellent la classe Equations, vous voulez vous assurer que les personnes qui écrivent les sous-classes n'oublient pas de mettre une méthode "résolver".