Java pour les développeurs Android

Unir héritage et polymorphisme

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Votre formateur vous explique comment combiner le polymorphisme et l'héritage. Découvrez toute leur puissance lors de l'utilisation d'une collection.
10:26

Transcription

Dans cette vidéo, nous allons voir le principe de polymorphisme, lié à l'héritage. Dans le cadre de notre projet, actuellement, nous écrivons les élèves et les enseignants séparément. Pour expliquer cet exercice, nous allons changer le type d'affichage. Nous n'allons écrire qu'une seule liste. Sur chaque ligne, nous écrirons si c'est un élève ou un enseignant. Ici, nous avons une collection d'élèves et une collection d'enseignants. Le but ? Nous allons faire en sorte de n'avoir plus qu'une seule collection de personnes et de demander à cette personne de s'afficher. Si c'est un élève, cela indiquera élève sur la ligne, ainsi que sa classe, plus le nom et le prénom. Si c'est un enseignant, cela indiquera enseignant, ainsi que sa matière, le nom et le prénom. Nous allons rajouter, dans notre classe « Personne », la méthode « afficher ». Actuellement, dans la classe « Personne », nous n'avons que le nom, le prénom et l'âge. Nous ne pouvons pas savoir si c'est un élève ou un enseignant, étant donné qu'à ce stade-là, dans cette classe, nous ne sommes qu'une « Personne ». Nous « retournons », donc, nom et prénom. Voilà pour la classe « Personne », Passons à la classe « Élève ». Nous allons pouvoir surcharger cette méthode. C'est-à-dire, je commence à écrire « afficher », et là, il me propose la méthode. Je clique sur « Entrée ». J'obtiens l'annotation « @Override » que l'on a déjà vu dans la classe « MainActivity ». qui permet simplement de dire qu'on utilise une méthode qui existe déjà. Qu'en fait, on utilise une méthode de la classe « Mère » que l'on se contente de réécrire. « super.afficher » nous permet, ici, d'identifier quelle méthode « afficher » je veux appeler. C'est-à-dire que si je fais « this.afficher », je vais appeler la méthode « afficher » de la classe « Élève ». Si je veux appeler la méthode « afficher » de la classe « Mère », donc, de la classe « PersonneBean », je vais utiliser le mot clé « super » pour « afficher ». Et là, si je clique, j'atterris bien sur la méthode « afficher » de la classe « Personne ». Dans notre cas, nous allons écrire que c'est un élève. Plus le contenu de « afficher » de la méthode « PersonneBean », à savoir « nom » et « prénom », plus, sa classe. Voilà, pour la méthode « afficher » de la classe « Élève ». Passons à la classe « Enseignant ». Même chose, je surcharge la méthode « afficher », j'indique que c'est un enseignant, plus, sa matière Un des gros atouts du polymorphisme et de l'héritage, c'est que si j'appelle la méthode « afficher » sur une personne, si, en fait, cette personne est un enseignant, cela appellera la méthode « afficher » de l'enseignant. Si c'est un élève, cela appellera la méthode « afficher » de l'élève, et si c'est une personne, cela appellera la méthode « afficher » de personne. Ici, on peut voir que « Enseignant » et « Élève » ont maintenant deux typages. « Enseignant » est à la fois, un enseignant et une personne. Alors que « Personne » n'est qu'une personne. Allons utiliser tout cela dans « MainActivity ». Donc ici, nous avons une « ArrayList » d'élèves, et une « ArrayList » d'enseignants. Nous allons, maintenant, pouvoir faire une seule « ArrayList » de « Personne ». Au moment de l'ajout, je crée un élève, un élève étant une « Personne » puisqu'il hérite de « Personne ». Il peut donc aller dans l'« ArrayList » de « Personne ». Mon enseignant, même chose, c'est une « Personne », il peut aller dans l'« ArrayList » de « Personne ». Au moment où on veut « rafraîchirEcran », je vous ai dit, que pour le principe du projet, nous n'allions faire qu'une seule liste. Mais, je vais vous montrer comment nous ferions si nous voulions en faire deux. D'abord, commençons par la version, une seule liste. Je vais, donc, dupliquer cette méthode, on va faire « rafraîchirEcranUneListe ». Alors, plutôt que de parcourir mes élèves, je vais parcourir mes personnes. Je parcours mon « ArrayList » et je vais afficher ma ligne. Ma ligne, c'est une « Personne ». Maintenant, je vais simplement demander à cette « Personne » de s'« afficher », et je n'ai plus besoin de faire tout cela. Cette « Personne » appellera la méthode « afficher » de « Personne ». et donc, écrira son nom et son prénom. Sauf que, si c'est un enseignant, cela appellera la méthode « afficher » de l'« Enseignant ». Si c'est un élève, cela appellera la méthode « afficher » de l'« Élève ». En fait, dans notre cas, nous n'appellerons jamais la méthode On appellera celle d'« Élève » qui dans sa méthode « afficher » appelle la méthode « afficher » de « Personne ». Ce qui compte, c'est l'objet qui a été créé, c'est-à-dire le « new » qui a été fait, car « PersonneBean » n'est qu'un pointeur qui pointe vers une « Personne ». Un élève étant une « Personne », il pointe dessus. Mais, au moment de l'exécution de la ligne, au moment où on appelle la méthode « afficher » en fait, il va appeler la méthode « afficher » de l'objet pointé. Donc ici, un élève ou un enseignant. Par contre, si je veux accéder à un élément propre d'un enseignant ou d'un élève, ma classe « Personne » n'y a pas accès. Par exemple, si je veux faire « getMatière », c'est normal, c'est une personne, il n'y a pas la méthode « getMatière » dans la classe « Personne ». Et donc, si je veux l'affichage comme nous l'avions avant, je vais parcourir deux fois ma liste. Une première fois, pour les élèves, sauf que, la ligne, je ne vais l'écrire que si c'est un élève. J'ai la possibilité de demander si mon « PersonneBean » est un élève, grâce au mot clé « instanceof » et dans ce cas-là, je peux « caster » ma personne en un élève. Donc, je crée un pointeur vers mon « EleveBean » et je précise au compilateur, par un « Cast » que mon « PersonneBean », je suis sûr que c'est un « EleveBean ». Là, je pourrais utiliser la méthode « EleveBean.getClasse ». En l'occurrence, nous n'en avons pas besoin ici, donc le « Cast » est inutile. Je peux seulement me contenter d'appeler « PersonneBean » pour « afficher », vu que nous cherchons à faire une liste d'élèves et une liste d'enseignants. Pour les enseignants, je fais la même chose, avec un « instanceof EnseignantBean ». Pour la suppression, maintenant. Pour supprimer le dernier, donc, le dernier élève ou le dernier enseignant. Là, cela va être plus compliqué. Il va falloir que je parcours ma liste et qu'au moment où je rencontre un élève, je le stocke. Une fois que j'ai parcouru ma liste, je supprime le dernier élève que j'ai rencontré ou le dernier enseignant que j'ai rencontré. Ce qui nous donne un pointeur vers un élève, je le mets « null », je parcours, si c'est un élève : « dernierEleve » est égal à « PersonneBean ». Une fois que j'ai terminé ma liste, si j'ai bien rencontré un élève, je peux le retirer de ma liste, grâce à « remove », sinon, c'est que dans ma liste, il n'y a plus d'élèves. Et on fait exactement la même chose pour l'enseignant. Voilà, même chose avec enseignant. On peut donc, maintenant, tester. J'ajoute des élèves, j'ajoute des enseignants, je n'ai mis ni de matières, ni de classes, donc, j'ai l'affichage « null ». Je supprime les enseignants, je supprime les élèves, nous sommes bons. Je vais, maintenant, vous montrez comment on peut encore plus optimiser ce morceau de code-là. Je vais écrire une méthode « supprimer » : « public void supprimerDernier2 » Sauf que maintenant, au lieu de stocker un élève ou un enseignant et d'écrire deux fois l'opération, qui ne sera faite qu'une fois, mais qui sera dans deux blocs. Je vais stocker une personne, parcourir ma liste de personnes, si c'est l'élève qui est coché et que ma personne est un élève, je le stocke. Je fais la même chose avec l'enseignant, si c'est l'enseignant qui est coché et que ma personne est bien un enseignant, je le stocke. J'ai terminé de parcourir ma liste. Je vérifie. Si mon « dernier != null », Je le retire. Je n'ai pas besoin de savoir, ici, si c'est un enseignant ou un élève, je l'enlève de la liste. Si « dernier != null » et que c'est l'élève qui est coché, dans ce cas-là, j'indique le message qu'il n'y a plus d'élèves dans la liste. Sinon, même chose pour l'enseignant. J'ai optimisé mon code « supprimerDernier ». Je peux, donc, retirer celui-ci et mettre celui-là. En termes d'écriture, il y a moins de lignes de codes. Voilà, j'espère que j'ai pu vous montrer la puissance du polymorphisme, grâce à cet exemple.

Java pour les développeurs Android

Prenez en main la syntaxe et les concepts de Java pour vos développements d’applications pour Android. Abordez les variables, les chaînes de caractères, les conditions, etc.

7h01 (65 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :24 avr. 2017

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !