Petit cours de programmation objet

Répondre
Partager Rechercher
Pas d'affolement... ce topic a un rapport étroit avec le scripting dans nwn, malgré ce que laisse présumer le titre

J'ai souvent eu l'occasion, depuis que je me suis attaqué au scripts de nwn, de discuter avec d'autres scripteurs...
Autant ceux habitués a la programmation orienté objet ne ce sont que brievement arrétés sur ce point de détail, autant ceux n'ayant jamais pratiqué ce type de programmation s'arrachent les cheveux a comprendre ceci :
Je veux parler de la difference fondamentale existant entre le ResRef d'un objet, et son Tag.

J'ai pu constater que, pour beaucoup, la difference entre ces deux données etait brumeuse... voir carrément nébuleuse... c'est pourquoi je vais m'efforcer ici de detailler ce point precis.

1. Qu'est-ce qu'un Blueprint ?
Litteralement, un Blueprint est un 'plan de construction'.
Autrement dit, il s'agit d'un modele.

Lorsque vous placez un objet dans votre module, l'editeur regarde quel objet vous avez sélectionné dans la liste des Blueprint, et crée une copie de celui-ci a l'endroit désiré.

En d'autre termes, les Blueprint n'ont pas d'existence reelle dans votre module. Ce sont juste des modeles prédéfinis, sur lesquels se base le moteur du jeu pour creer un nouvel objet.

2. Qu'est-ce qu'une instance ?
Une instance est un objet que vous avez placé dans votre monde. Cet objet sera nécessairement défini, a la base, par le Blueprint qui lui aura servi de modele, cad que lorsque vous placez un dragon dans votre monde, il aura 30 en force, parce que le Blueprint 'dragon' specifie qu'il a 30 en force.
Contrairement au Blueprint d'ou il est issu, l'instance a une vie propre : il 'existe' dans votre monde, et ses caracteristiques peuvent varier (il est possible de le modifier directement dans le toolset, mais aussi en jeu, ou ses points de vie diminueront au cours d'un combat, etc...)
Il est possible de creer plusieurs instances a partir du meme Blueprint (cad creer plusieurs dragons a partir de la meme selection dans la liste...), et a partir de ce moment la, chaque instance aura une 'vie' propre, ses caracteristiques pouvant etre modifié a volonté...

Le tag et le ResRef
Si vous m'avez suivi jusque la, le reste devrait etre facilement comprehensible...
Qu'est-ce que le ResRef ? He bien il s'agit tout simplement du nom du Blueprint d'ou est issue une instance (on dit dérivée en parler techenike ), autrement dit le nom du modele qui a permis de construire notre objet (notre dragon).
Qu'est-ce que le Tag ? Rien de plus qu'un nom que l'on donne a un objet quelconque. Lorsque plusieurs objets sont dérivés (issus) du meme Blueprint, toutes leurs caracteristiques sont identiques, dont le tag. Modifier le tag permet donc de differencier deux objets issus du meme Blueprint.

Voila pourquoi vous ne pouvez pas modifier le ResRef d'une creature que vous avez posé dans votre monde.
Voila aussi pourquoi une fonction tel que CreateObject() necessite un ResRef, et non pas un tag, pour fonctionner : Seul le ResRef permet de designer un 'modele' precis.
Le seul role du Tag est de differencier entre eux les objets deja existants...

En esperant que ceci aura éclairé la lanterne de certains
Citation :
Provient du message de Dolanor
euh si je ne me gourre pas, c pas le resref qui fait reference a l'objet dans le module et le tag qui fait reference au blueprint ??
non non, resref = classe = modèle, tag = instance = objet
Coupeur de cheveux en quatre:
Pour ceux qui voudraient se mettre à un langage orienté objet après nwscript, la relation logique entre blueprint et objet n'est pas la même qu'entre classe et instance. Outre le fait qu'un blueprint n'a pas de méthode, c'est déjà une instanciation, ses propriétés ont toutes une valeur fixée. De plus l'objet aura plus de propriété que son blueprint, ce qui est typique de la relation classe/sous-classe et non pas classe/instance je crois. Si je ne me trompe pas la relation est plus proche de celle du prototypage (un autre concept objet), cf javascript pour le prototypage sur les instances directement.
Citation :
Provient du message de Sire Pom-pom
Coupeur de cheveux en quatre:
Pour ceux qui voudraient se mettre à un langage orienté objet après nwscript, la relation logique entre blueprint et objet n'est pas la même qu'entre classe et instance. Outre le fait qu'un blueprint n'a pas de méthode, c'est déjà une instanciation, ses propriétés ont toutes une valeur fixée. De plus l'objet aura plus de propriété que son blueprint, ce qui est typique de la relation classe/sous-classe et non pas classe/instance je crois. Si je ne me trompe pas la relation est plus proche de celle du prototypage (un autre concept objet), cf javascript pour le prototypage sur les instances directement.
clap clap clap *pense a prendre des cours de rhétorique*
Hihi je sais pas pourquoi, je m'attendais a ce genre de post
Je parie que tu fais partie de ceux qui n'ont pas mit longtemps a comprendre la difference entre ResRef et Tag
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés