Discussion:Polymorphisme (informatique)

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikipédia, l'encyclopédie libre.
Autres discussions [liste]
  • Admissibilité
  • Neutralité
  • Droit d'auteur
  • Article de qualité
  • Bon article
  • Lumière sur
  • À faire
  • Archives
  • Commons

Une remarque l'article sur les virus informatique parle de polymorphisme et renvoi sur cette page. Or le polymorphisme d'un virus, sa capacité a changer son comportement ou son code n'a pas grand chose a voir avec le polymorphisme en programmation qui est traité dans cette page

La définition est quand même assez largement incomplète. Il faut en effet rajouter au polymorphisme par héritage le polymorphisme paramétrique, et il me semble qu'il y en a encore un ou deux autres. Le polymorphisme paramétrique concerne l'écriture de méthodes (ou fonctions) disposant de plusieurs types différents. Il est par exemple possible d'écrire en Java

public class MyClass {

   public void doThat(int _int) {
           // do something
   }
   
   public void doThat(Integer _int) {
           // do something
   }
   
   public void doThat(String _str) {
           // do something
   }

}

Chaque méthode sera alors appelée en fonction du type du paramètre. On pourra ainsi écrire : MyClass objet = new MyClass(); objet.doThat(2); objet.doThat("une chaine de caractère"); Il est à noter que ce polymorphisme ne peut pas exister dans les langages non typés, puisque la notion de type, préalable indispensable, n'existe pas.

Encore une remarque : il est important de signaler que la notion de polymorphisme n'a aucun rapport avec les langages orientés objets.

Amélioration de cet article[modifier le code]

Bonjour,

N'hésite pas à ajouter ce commentaire dans l'article directement. Cordialement, 82.67.247.167 17 octobre 2005 à 10:06 (CEST)[répondre]

Le mot clef "polymorphe" n'apparaît pas une seule fois dans cet article. Ce serait peut-être pas mal de le rajouter pour les moteurs de recherche ?

Définition du début[modifier le code]

Dans la première définition, on défini le polymorphisme en étant l'utilisation du même code, alors que c'est l'utilisation du même "nom" de fonction ou de classe mais avec un code différent.

Ce que vous dites est faux, le polymorphisme est bien à la base l'utilisation du même code, par des objets de types différents... Ce sont simplement les exemples qui ne sont pas bien choisis.... Il faudrait pour bien comprendre le polymorphisme considérer un objet de type véhicule et deux objets qui sont de ce type mais aussi du sous type voiture pour le premier et du sous-type avion pour le second, si je demande à chacun des sous-objet "à quelle vitesse vas tu" j'utiliserais alors le getter de véhicule sans avoir défini un seul getter concernant la vitesse sur le type voiture ou sur le type avion dans ce cas => j'ai un réel polymorphisme. C'est l'objet véhicule qui définira le getter, les setter seront eux définis dans les sous-type. Le même code de getter sera donc utilisé par les deux sous-types c'est typiquement ce qui défini le polymorphisme.

Vu qu'il manque un exemple en Perl Objet en voici un par exemple : package lol; use strict; @ISA = qw(Exporter Net::FTP); sub new {

   my ( $p_sClass ) = @_;
   my $pSelf = $p_sClass->SUPER::new(....); //notons qu'on pourrait aussi avoir SUPER->test(...) pas forcément new comme vous le sous entendez...
   bless $pSelf, $p_sClass;
   return $pSelf;

} //je ne defini pas login() pour cet objet "lol". // mais je defini logout sub logout() {

   my ( $pSelf ) = @_;
   undef( $pSelf);

} [...] 1;

dans mon fichier lol.pl par exemple je fais ceci :

  1. !/usr/bin/perl

use strict; use lol; my $pFTP = new lol; die "...diantre!..." if ( ! $pFTP->login("user", "passwd") );

il y a polymorphisme sur l'objet lol, car c'est le code du package Net::FTP qui est utilisé ! mais vu que Net::FTP hérite aussi de Net::Cmd et IO::Socket::INET ce sont en réalité le code des trois packages que je vais utiliser ici ...

$pFTP->logout();

Là aussi car dans logout() de l'objet lol, le undef appel de façon implicite le destructeur de l'objet Net::FTP celui de Net::Cmd et de IO::Socket::INET. j'utilise donc le code écrit dans lol et celui de Net::FTP Net::Cmd et IO::Socket::INET.

Il y a donc polymorphisme avéré. --Haugure (d) 24 avril 2012 à 15:52 (CEST)[répondre]