« Programmation objet et géométrie/CaRScripts et nombres complexes » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
 
Ligne 7 :
La fonction complexe(p) est en fait un [[:w:Constructeur_(programmation_informatique)|constructeur]] - à défaut d'une [[:w:Classe_(informatique)|classe]] - des [[:w:Objet_(informatique)|objets]] "complexe". C'est-à-dire que dès qu'un [[:w:Objet_(informatique)|objet]] "complexe" est créé par la commande z = new complexe(unPoint), cet [[:w:Objet_(informatique)|objet]] est doté de ses [[:w:Attribut_(informatique)|attributs]] et de ses [[:w:Méthode_(informatique)|méthodes]].
 
<sourcesyntaxhighlight lang="javascript">
function complexe(p){// p est un point
this.reelle = X(p);// X commande CaRScript pour obtenir l'abscisse d'un point
Ligne 27 :
Println("et son module "+z.module);// idem
z.dessine();// affichage du point dans CaRMetal
</syntaxhighlight>
</source>
 
== Affichage de l'affixe ==
Ligne 37 :
Sous [[:w:CaRMetal|CaRMetal]], l'affichage est dynamique et doit changer lorsque le point A se déplace sans pour cela faire appel au [[:w:CaRScript|CaRScript]] ; pour le point A on écrira donc "%x(A)%+%y(A)%i" , les % indiquent qu'il faut remplacer x(A) et y(A) par leur valeurs. De plus, le véritable nom du point est inconnu, on écrira donc "%x(" + p + ")%+%y(" + p + ")%i", [[:w:CaRScript|CaRScript]] se chargeant de remplacer p par son nom.
 
<sourcesyntaxhighlight lang="javascript">
function complexe(p){//p est un point
this.reelle = X(p);
Ligne 62 :
Println("et son module : "+z.module);
z1.dessine();
</syntaxhighlight>
</source>
 
Remarquer la façon dont [[:w:JavaScript|JavaScript]] gère l'affichage du signe de Y(p) ; si Y(p)>=0, alors on ajoute un "+" devant sa valeur, sinon "".
Ligne 72 :
De même, les opérations sur les [[:w:nombres complexes|nombres complexes]] peuvent être prises en compte par [[:w:CaRMetal|CaRMetal]] en mixant syntaxe [[:w:JavaScript|JavaScript]] et commandes [[:w:CaRMetal|CaRMetal]].
 
<sourcesyntaxhighlight lang="javascript">
function complexe(p){//p est un point
this.reelle = X(p);
Ligne 98 :
var zsomme=complexe_somme(z1,z2);zsomme.dessine();
 
</syntaxhighlight>
</source>
 
Trois points sont créés dans [[:w:CaRMetal|CaRMetal]], avec leurs [[:w:affixes|affixes]]. Le déplacement de l'un des deux premiers entraîne celui du troisième.
Ligne 113 :
Le [[:w:CaRScript|CaRScript]] peut être rendu plus interactif en demandant à l'utilisateur de désigner un point. La commande utilisée est InteractiveInput, couplée à try pour prévoir les cas où l'utilisateur clique sur autre chose.
 
<sourcesyntaxhighlight lang="javascript">
try{var pt=InteractiveInput("Choisissez un point","Point");
z = new complexe(pt);
z.dessine();}
catch(erreur){Println("Erreur : " + erreur)}
</syntaxhighlight>
</source>
 
=== Prototypage ===
Ligne 131 :
Pour remédier à ce (petit) problème, on peut définir les méthodes une fois pour toutes, dans la [[w:Classe (informatique)|classe]] ''complexe''. Ces méthodes seront alors héritées par l'objet au moment de son instanciation (ou création). Seulement voilà: JavaScript ne possède pas de classes... Alors on fait avec ce qu'on a, c'est-à-dire avec un [[w:Programmation orientée prototype|prototype]]. Maintenant l'objet ''complexe'' est toujours défini mais seulement avec ses trois propriétés ''reelle'', ''imaginaire'' et ''image''. Les méthodes sont toutes définies dans le prototype du nombre complexe (qui est d'ailleurs un objet, et plus précisément une méthode de l'objet ''complexe'' !) comme on le voit ci-dessous:
 
<sourcesyntaxhighlight lang="javascript">
function complexe(p){//p est un point
this.reelle = X(p);
Ligne 178 :
var z1 = new complexe(Point(3,2));z1.dessine();
var z2 = new complexe(Point(-2,1));z2.dessine();
var zsomme=complexe_somme(z1,z2);zsomme.dessine();</sourcesyntaxhighlight>
 
==== Une erreur qu'il est bon de faire ====
Ligne 184 :
Si on veut afficher (en version CarScript : ''CS'') l'affixe de ''z1'' ci-dessus, on est tenté d'écrire
 
<sourcesyntaxhighlight lang="javascript">
Println(z1.affixeCS);
</syntaxhighlight>
</source>
 
Le résultat, quoique faux, est tellement intéressant qu'il serait dommage de ne pas faire l'erreur! D'où vient-elle d'ailleurs, cette erreur? C'est que puisque ''z1'' est une instance de l'objet ''complexe'' (donc un complexe), ''z1.affixeCS'' est une méthode de l'objet ''complexe'', et quand on demande à JavaScript d'afficher une méthode, il affiche une méthode!
Ligne 192 :
Pour réellement appeler la fonction, il faut signaler à JavaScript que c'est une fonction, à l'aide des parenthèses:
 
<sourcesyntaxhighlight lang="javascript">
Println(z1.affixeCS());
</syntaxhighlight>
</source>
 
=Exercices=