Aller au contenu

[Résolu] POO : des prototypes aux classes


Yangzebul

Messages recommandés

Bonjour,

je suis en train d'aborder la POO orienté classes, alors que j'étais plutot porté sur las langages à base de prototypes.

Je suis pour cela en train d'adapter un code AS2 en AS3, mais rassurez vous ma question est d'ordre générale, donc si vous êtes fans de Java continuez à lire : vous pouvez m'aider.

Le principe que je veux mettre en place est le suivant : une classe 'Vecteur' qui aura pour finalité de créer énomément d'occurences (de l'ordre de quelques centaines à milliers) et devra donc être très optimisé. Cette classe vecteur aura une dizaine de méthodes du genre 'dot' (multiplication vectorielle), 'reset' (réinitialiser le vecteur avec de nouvelles valeurs), 'scale', ect. Le point crucial c'est que mes méthodes ne soient pas dupliqués pour chaque occurence de vecteur :

vecteurA.reset === vecteurB.reset; // il faut que ça me disent 'true'

Dans un langage à prototype j'aurai procédé ainsi :

var Vecteur = function(){
  // constructeur de la classe Vecteur
};
Vecteur.prototype.reset = function(){
  // ma méthode accessible à toutes mes occurences via la chaine de prototypage
  // mais pas dupliquée car en dehors de mon constructeur
}

var vecteurA = new Vecteur();
var vecteurB = new Vecteur();
trace(vecteurA.reset === vecteurB.reset); // true

La question maintenant c'est comment obtenir un résultat similaire dans une architecture orientée 'classes', j'ai bien essayé avec le mot clé 'static' mais apparement ça ne semble pas du tout être prévu pour ce genre de choses.

J'espère que vous m'avez compris, les autres dev orientés POO classique à qui j'ai exposé mon problème m'ont tous regardés avec des yeux de merlans frit (à croire que ce concept fondamental dans les langages prototype et absent dans les langages à base de classes !)... Et leur conseils me faisaient penser à une certaine pub pour antibiotiques :

- il faut que tu accèdes à des propriétés de ton occurence ? alors il faut que tu duplique ta méthode.

- non je veux pas dupliquer ma méthode

- bah alors tu veux pas acceder aux propriétés de ton occurence.

- si je veux y acceder

- alors tu veux dupliquer ta méthode

[...]

:zarb:

Lien vers le commentaire
Partager sur d’autres sites

Dans la POO à base de classes (Java, etc), il faut bien différencier les classes (abstractions décrivant un ensemble de propriétés et de méthodes permettant d'agir sur ces propriétés) et les instances de classes (réalisation concrètes des classes, contenant les valeurs réelles des propriétés).

Chaque instance d'une même classe possède donc ses propres valeurs de propriétés, mais le code des méthodes n'est en aucun cas "dupliqué" : il est défini une fois pour toutes par la classe.

Tu peux donc (et c'est même une pratique courante) créer 10000 instances de ta classe Vecteur, seules leurs différentes valeurs prendront de la place en mémoire.

Quant au mot-clé "static", il sert à déclarer une propriété partagée par l'ensemble des instances de cette classe (toutes les instances modifient la même), ce qui est pratique dans certains cas, mais n'est visiblement pas ce que tu veux faire.

Lien vers le commentaire
Partager sur d’autres sites

D'accord c'est le fonctionnement 'par défaut' alors. Pas ettonant que je n'arrivais pas à trouver de solutions à ce problème sur internet vu qu'il n'y avais pas de réel problème.

Merci pour ton explication, je me prennais la tête pour rien depuis 24 heures ! :transpi:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...