Flux rss

[Optimisation] Polymorphisme “statique”

Publié par Fu Xuen, dernière mise à jour le mardi 21 septembre 2004 à 22:07:35 par tafiscobar
Le polymorphisme est l'une des pierres angulaires du paradigme objet :
- http://www.commentcamarche.net/poo/polymorp.php3

En C++, il s'exprime sous la forme de fonctions virtuelles : celles-ci permettent d'adapter dynamiquement (i.e. à l'exécution) leur code au type de l'objet auxquelles elles sont appliquées. Cela peut avoir un impact négatif sur les performances, dans le cas particulier où :
• le code à l'intérieur de ces fonctions est court ;
• ces fonctions sont appelées très souvent.

En effet, comme le compilateur ne connaît pas à l'avance le code à appliquer, il ne peut pas appliquer les optimisations usuelles. Par ailleurs, le coût en place mémoire est d'autant plus grand que les branchements possibles (pour chaque type d'objet) sont nombreux.

Il existe cependant une astuce, dûe à Barton et Nackman :
- http://accu.org/cgi-bin/accu/rvout.cgi?from=0au_b&file=s002007a

Elle consiste à déclarer la classe parente comme classe générique, recevant comme paramètre le type de la classe dérivée. Cette classe devra ensuite tout déléguer à ses héritiers (comme un classe abstraite qui n'a que des fonctions virtuelles pures), mais ainsi le code à appliquer est connu au moment de la compilation.

Voici un petit exemple :
// classe de base paramétrée par le type de la classe dérivée
template<class TypeEnfant>
class Matrice {
public:
  // fonction de délégation
  TypeEnfant& CommeUnEnfant()
  {
    return (static_cast<TypeEnfant&>(*this));
  }

  // surcharge par délégation
  double operator()(int i, int j)
  {
    return (CommeUnEnfant()(i,j));
  }
private:
  ...
};

// exemples de classes dérivées
class MatriceTriangulaire : public Matrice<MatriceTriangulaire> {
private:
  ...
};

class MatriceSymetrique : public Matrice<MatriceSymetrique> {
private:
  ...
};

// fonction "virtuelle" fonctionnant avec n'importe quel type de matrice
template<class TypeEnfant>
double norme(Matrice<TypeEnfant>&);

// exemple d'application
double nt, ns;
MatriceTriangulaire mt;
MatriceSymetrique   ms;
nt = norme(mt);
ns = norme(ms);


N'empéche que ce n'est pas totalement souple, car tout ajout se fera dans la plupart des cas dans au moins deux endroits dans le code, dans l'interface de la classe dérivée et dans celle de la classe de base. Je préconise donc que cette méthode est à utiliser lorsque l'interface est figée et que comme le titre le dit, on veut optimiser le code.

Résultats pour Polymorphisme “statique”

POO - Le polymorphisme Définition du polymorphisme Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique est un des concepts essentiels de la programmation orientée objet. Alors que l'héritage concerne les classes (et... www.commentcamarche.net/contents/poo/polymorp.php3
Limiter les effets de l'électricité statique Se prémunir des effets néfastes de l'électricité statique Tous ceux qui possèdent une automobile en ont fait l'expérience un jour, plus souvent en hiver et par temps sec, cette petite décharge que l'on appréhende au moment de toucher une poignée de... www.commentcamarche.net/faq/sujet-12717-limiter-les-effets-de-l-electricite-statique
Transcend Solid State Drive 8 Go SATA Solid State Drive,8192 Mo,Vitesse de lecture:30 MB/s,Mémoire:8192 MB,Vitesse d'écriture:28 MB/s,Type:Solid State Drive,Divers:  www.commentcamarche.net/guide-achat/transcend-solid-state-drive-8-go-sata-1028151-fiche-technique

Résultats pour Polymorphisme “statique”

Liste station radio (Résolu)Bonjour Je voulais vous demander de m'aider à trouver un site où je pourrai trouver la liste des stations de radio telles que Fun radio, nrj... Merci www.commentcamarche.net/forum/affich-1671262-liste-station-radio
Statut "hors ligne" de msn (Résolu)Bonjour, Je voudrais savoir si il est possible de voir si un contact msn est en statut "apparaitre hors ligne". Merci www.commentcamarche.net/forum/affich-1992966-statut-hors-ligne-de-msn
Parametre station ripper (Résolu)bonjour Je viens de telecharger StationRipper 1.13. Je l'ai installé, ça enregistre bien les musiques mais il y a un problème . Mes morceaux de mp3 sont de quelques ko seulement. J'ai pourtant bien mis les parametres. J'utilise winamp... www.commentcamarche.net/forum/affich-1369580-parametre-station-ripper