banner

Précédent   InfographiK - Communauté Graphique > FLASH & ACTION SCRIPT > Débuter avec Flash > Les cours de base

Réponse
 
LinkBack Outils de la discussion
  #1 (permalink)  
Vieux 04/04/2007, 13h01
Avatar de Smike
Administrateur
 
Date d'inscription: May 2002
Localisation: 26
Messages: 3 008
Zoom [ActionScript] L'héritage avancé

Comprendre l'héritage :
Bien que cette notion ne soit pas totalement nouvelle, elle mérite quelques explications. L'héritage en POO est directement lié à la hiérarchie des classes en ActionScript 2.0. Des classes peuvent être définies comme étant des sous-classes d'autres super-classe.

Le but étant que cette sous-classe va automatiquement hériter des propriétés et des méthodes de sa classe mère, et ceci sans les redéfinir. Reprenons l'exemple de notre classe Voiture. Notre voiture est un type de véhicule comme un train, un bateau ou un avion. Bien que ces types de véhicules soient bien distincts, ils partagent certaines caractéristiques communues. Par exemple, une propriété communue pourrait être le nombre de passager du véhicule, la vitesse de déplacemment. Chaque véhicule peut se déplacer, à une vitesse donnée... Si on désirait créer notre classe Vehicule, cette classe contiendrait toutes ces caractéristiques communues à notre voiture, avion, ... Donc on pourra définir les propriétés et méthode à un seul endroit, plutot que de les définir dans toutes les classes (Voiture, Avion, ..)



Mise en place de l'héritage :
Par la suite, nous allons utiliser les termes de classe-fille (ou subclass) et de la classe-mère (ou superclass). La création de classe-fille est identique à la création d'une classe. La seule chose à rajouter, c'est spécifié à Flash, quelle classe est la superclass de cette subclass. Pour ceci, on va utiliser le mot-clé extends lors de la définition de nos classes.
Un exemple général, representant une classe héritant d'une superclass :
ActionScript Code:
  1. class Subclass extends Superclass
  2. {
  3. //Définition
  4. }

On dit ici que la classe Subclass hérite de la classe Superclass.
Dans notre exemple de la voiture, on aurait ceci :

ActionScript Code:
  1. class Voiture extends Vehicule
  2. {
  3.  
  4. }

En spécifiant que la classe Voiture hérite de la classe Vehicule, toutes les propriétés et méthodes de la classe Vehicule seront disponibles depuis la classe Voiture.



Appeler ou redéfinir les méthodes de la classe mère :
Au moment de l'héritage, il arrive que la fonction de la classe mère suffise parfaitement pour la classe fille. Mais on peut très bien redéfinir une methode de la classe mère, dans la classe fille. Cette technique s'apelle Overriding.

De cette façon, la méthode peut être rédéfinie pour réaliser des traitements spécifiques à la classe fille. Prenons un exemple, voici une fonction display(), qui va uniquement afficher un message. Dans notre classe Vehicule (donc la classe mère), elle peut définie de cette façon :

ActionScript Code:
  1. public function display():Void {
  2. trace("Methode de la Classe Mere");
  3. }

Si on veut redéfinir cette méthode dans la classe fille (donc Voiture), on implémente à nouveau la méthode display() :

ActionScript Code:
  1. public function display():Void {
  2. trace("Methode de la Classe Fille");
  3. }

Parfois, il est nécessaire de redéfinir entièrement une méthode de la Superclass, mais aussi quelquefois, de reféfinir une méthode tout en appelant la méthode la classe Mère. Dans notre exemple, on voudrait appeler la methode de la classe mère et réaliser un traitement spécifique sur la classe fille. Pour cela, nous allons utiliser le mot-clé super qui permet d'accéder à la Superclass. La définition de notre méthode display() deviendrait donc :

ActionScript Code:
  1. public function display():Void {
  2. super.display();
  3. trace("Methode de la Classe Fille");
  4. }

En réalisant un test dans un fla, on obtiendrait une sortie :
  • Methode de la Classe Mère
  • Methode de la Classe Fille

Super permet aussi d'appeler le constructeur de la classe mère. De ce fait, il est tout à fait possible d'appeler le contructeur avec des paramètres spécifiques. Pour se faire, on fera un simple appel de :

ActionScript Code:
  1. super();


Classe Vehicule et Voiture :
Nous allons créer notre super classe Vehicule. Comme nous l'avons vu auparavant, notre classe mère doit contenir des caractéristiques communues aux types de véhicules que nous voulons créer. Car pour bien comprendre l'héritage, il ne faudrait pas se dire qu'il n'y aura pas que la classe Voiture, mais aussi la classe Avion, Bateau, ... Voici la liste (exhaustive) des propriétés, méthodes que nous allons définir.
  • Propriété : Nombre de passager (chaque type de véhicule contient n passagers)
  • Propriété : Kilomètre (chaque type de véhicule possède des kilomètres)
  • Propriété : Fabricant
  • Propriété : Année
  • Méthode : déplacer (chaque véhicule peut se déplacer à une vitesse donnée).

En ActionScript 2.0, l'implémentation de cette classe serait :

ActionScript Code:
  1. class com.dossier.Vehicule
  2. {
  3.  
  4. private var _sFabricant:String;
  5. private var _nKilometres:Number;
  6. private var _nPassager:Number;
  7. private var _nInterval:Number;
  8.  
  9. function Vehicule(sFabricant:String, nKilometre:Number, nPassager:Number) {
  10. _sFabricant = sFabricant;
  11. _nPassager = nPassager;
  12. kilometre = nKilometre;
  13. }
  14.  
  15.  
  16. public function get fabricant():String {
  17. return _sFabricant;
  18. }
  19.  
  20. public function get passager():String {
  21. return _nPassager;
  22. }
  23.  
  24. public function get kilometre():Number {
  25. return _nKilometres;
  26. }
  27.  
  28. public function set kilometre(nKilometres:Number):Void {
  29. if(nKilometres >= 0) {
  30. _nKilometres = nKilometres;
  31. }
  32. else {
  33. _nKilometres = 0;
  34. }
  35. }
  36.  
  37. public function deplacer(nKMH:Number):Void {
  38. if(nKMH == null || nKMH == 0) {
  39. clearInterval(_nIntervalle);
  40. }
  41. else {
  42. _nIntervalle = setInterval(this, "ajoutKilometre", 1000, nKMH);
  43. }
  44. }
  45.  
  46. private function ajoutKilometre(nKMH:Number):Void {
  47. _nKilometres += nKMH;
  48. }
  49. }

Définissons maintenant notre classe Voiture. Une voiture est un véhicule. Ce véhicule à des particularités. Par exemple, on va définir un modèle de voiture, ainsi qu'une année de mise en circulation.
Les autres propriétés seront héritées de la classe mère :

ActionScript Code:
  1. class com.dossier.Voiture extends Vehicule
  2. {
  3.  
  4. private var _sModele:String;
  5. private var _nAnnee:Number;
  6.  
  7. function Voiture(sFabricant:String, nKilometre:Number, nPassager:Number, sModele:String, nAnnee:Number) {
  8. super(sFabricant, nKilometre, nPassager);
  9. _sModele = sModele;
  10. annee = nAnnee;
  11. }
  12.  
  13. public function get modele():String {
  14. return _sModele;
  15. }
  16.  
  17. public function get annee():Number {
  18. return _nAnnee;
  19. }
  20.  
  21. public function set annee(nAnnee:Number):Void {
  22. if (nAnnee >= 1886) {
  23. _nAnnee = nAnnee;
  24. }
  25. else {
  26. _nAnnee = 1886;
  27. }
  28. }
  29.  
  30. public function conduire(nKMH:Number):Void {
  31. deplacer(nKMH);
  32. }
  33.  
  34. }

On observe bien l'utilisation de la classe mère, au niveau du contructeur et au niveau de la méthode conduire. Testons ces classes dans un fichier fla. Créer un document fla, vérfier bien le classpath de votre application, et mettez ce code dans l'image 1 de votre timeline.

ActionScript Code:
  1. import com.dossier.*;
  2. function displayKilometrage(voitureObj:Voiture):Void {
  3. Trace(voitureObj.kilometre);
  4. }
  5. var voiture:Voiture = new Voiture("SEAT", 55000, 5, "LEON", 2001);
  6. voiture.conduire(50);
  7. setInterval(displayKilometrage, 1000, voiture);


Source : Adddvance.net
__________________
[La musique fait danser les consciences]
Réponse avec citation
Réponse

Outils de la discussion

Règles de messages
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui



Fuseau horaire GMT +2. Il est actuellement 06h53.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0 Tous droits réservés.
Version française #13 par l'association vBulletin francophone

Communauté Graphique
CNIL : 1130886