Centre de Formation Flash - Forums Adobe Flash: Heritage ou composition ? - Centre de Formation Flash - Forums Adobe Flash

Voir le contenu

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

Heritage ou composition ?

#1 Utilisateur non-connecté   kiroukou

  • Habitué
  • Groupe : Honoris
  • Messages : 2325
  • Inscrit : 16-June 02
  • Logiciels utilisés:Flash, Flex, FDT
  • Gender:Male
  • Location:Bordeaux
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 07 June 2004 - 01:17 PM

Salut smile.gif
Depuis mon passage à l'AS2, je ne peux que etre satisfait smile.gif Mais il me reste des problemes du au fait que je connais pas les langages objets, et je ne maitrise pas pas mal de concepts :? Cela amène a la question suivante :

Par exemple dans un cas precis ou je voudrai faire une classe qui serai un MovieClip particulier, et dont je me servirai dans tout mes programmes par la suite. Imaginons que je nomme cette classe KClip.
Si je veux creer un nouveau KClip par une methode createEmptyKClip, j'ai deux solutions si j'ai bien compri.

CODE


class KClip extends MovieClip

{

  private static var $arInst:Array = new Array(); //Tableau d'instances

  private static function KClip() {; }





  public static function createEmptyKClip (nom:String,depth:Number):KClip

  {

     $arInst[nom] = KClip(this.createEmptyMovieClip(nom,depth)); //Est-ce que le cast marche ici ???????

     return  $arInst[nom];

  }



  public function move(x:Number, vit:Number):Void

  {

     this.onEnterFrame = function()

     {      

        var dif:Number = Math.abs(x-this._x);

        if(dif >= vit)  this._x += vit;

        else  this._x = x;  delete this.onEnterFrame;

     }

   }

}


utilisation :
CODE


import KClip

var c:KClip = KClip.createEmptyKClip("toto",5);

c._x = 0;

c.move(100,10);



OU
CODE


class KClip

{

  private static var $arInst:Array = new Array(); //Tableau d'instances

  private var $clip:MovieClip;

  public function KClip(clip:MovieClip) { $clip = clip; }





  public static function createEmptyKClip (nom:String,depth:Number):KClip

  {

     $arInst[nom] = new KClip($clip.createEmptyMovieClip(nom,depth));

     return  $arInst[nom];

  }



  public function set _x(val:Number)

  {  $clip._x = val; }

 

  public function move(x:Number, vit:Number):Void

  {

     this.$clip.onEnterFrame = function()

     {      

        var dif:Number = Math.abs(x-this._x);

        if(dif >= vit)  this._x += vit;

        else  this._x = x;  delete this.onEnterFrame;

     }

   }

}


utilisation :
CODE


import KClip

var $root:KClip = new KClip(_root);

var c:KClip = $root.createEmptyKClip("toto",5);

c._x = 0;

c.move(100,10);




Je n'ai pas pu tester ces morceaux de code car cela sors tout jsute de mon imagination et je ne peux pas le tester avant ce week end , donc je suis desolé si cela produit des erreurs, mais l'idée est là biggrin.gif .
Il y a surement bcp a corriger, donc si qq veut bien m'aider à avancer dans la POO ce serai super tongue.gif

Merci d'avance, A+ wink.gif
0

#2 Utilisateur non-connecté   LAlex

  • techno rêveur
  • Groupe : Honoris
  • Messages : 3326
  • Inscrit : 15-July 02
  • Location:Paris
  • Interests:Internet
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 07 June 2004 - 05:05 PM

Ca dépend de pas mal de choses : qu'est-ce que tu veux faire avec ta classe ? Est-ce que c'est un clip, ou est-ce qu'elle contient un clip ?

La plus souvent, traduire en français la signification et le but de ta classe donnent déjà une bonne piste ! wink.gif

++ ^^
"L'humilité c'est le top de la frime" - Didier SUPER
[ Développeur freelance AS3 - LAlex devblog ]
0

#3 Utilisateur non-connecté   kiroukou

  • Habitué
  • Groupe : Honoris
  • Messages : 2325
  • Inscrit : 16-June 02
  • Logiciels utilisés:Flash, Flex, FDT
  • Gender:Male
  • Location:Bordeaux
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 04:18 PM

Salut Lalex smile.gif
En fait je souhaite creer une classe de base, dont je pourai ensuite creer des derivées avec des methodes rajoutées , genre clipDeplacement ou clipBalle qui auront des methodes differentes.
En fait je souhaite faire comme en AS1 en ajoutant des prototypes aux movieClip , mais ici de façon plus "propre" en creant des classes specifiques a chaque problemes. Pourquoi ne pas faire un simple heritage de MovieClip et faire ensuite attacher un clip de la bliblioteque avec ma classe en liaison ? tout simplement parceque je souhaite ne pas avoir à toucher l'IDE et pouvoir gerer tout dans le code directement.

Maintenant je pense que la solution n°1 (celle de l'heritage) marche, mais le probleme est le cast je pense. De façon purement logique, je pense que cela ne doit pas pouvoir se faire.Mais comme je suis loin d'etre un pro de la prog objet, et comme je ne peux pas tester :x
Sinon pourquoi pas faire quelque chose du genre :

CODE


public static function createEmptyKClip (nom:String,depth:Number):KClip

{

  var clip:Movieclip =   this.createEmptyMovieClip(nom,depth);

  clip.__proto__ = KClip.prototype;

  $arInst[nom] = new KClip(clip);

   return  $arInst[nom];

  }


à la place de
CODE


public static function createEmptyKClip (nom:String,depth:Number):KClip

  {

     $arInst[nom] = KClip(this.createEmptyMovieClip(nom,depth)); //Est-ce que le cast marche ici ???????

     return  $arInst[nom];

  }



J'espere que cela est plus clair maintenant, et meme si mon morceau de code est debile (je ne l'ai pas testé encore une fois :? ), est ce que vous voyez comment je pourai le faire ?

Merci smile.gif
0

#4 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 05:41 PM

la façon propre, si je ne me trompe pas, c'est le m ultihéritage, ce que l'as2 ne prend pas en compte... mais il y a des moyens de biaiser... dsl, mais j'ai pas les liens sous la main :oops: :? :oops:
tant que je retrouve mon dodo...
0

#5 Utilisateur non-connecté   kiroukou

  • Habitué
  • Groupe : Honoris
  • Messages : 2325
  • Inscrit : 16-June 02
  • Logiciels utilisés:Flash, Flex, FDT
  • Gender:Male
  • Location:Bordeaux
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 05:46 PM

Salut fred smile.gif
Ca fait plaisir de te revoir (faut dire que suis pas souvent non plus sur le forum lol)

Le multiHeritage serait sympa en effet, mais va faloir trouver autre chose wink.gif
Moi sinon je verrai bien une classe abstraite de MovieClip wink.gif Ca permettrai de pouvoir faire pas mal de choses sympa je pense.

Dommage que Macromedia ne nous ait pas proposé un package de classes permettant d'adapter les classes natives de flash.

++
0

#6 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 06:18 PM

Lalex doit peut-être avoir des urls sous les bras smile.gif
Sinon, regarde sur flashcoder et autre wiki smile.gif tu devrais trouver ton bonheur tongue.gif
tant que je retrouve mon dodo...
0

#7 Utilisateur non-connecté   LAlex

  • techno rêveur
  • Groupe : Honoris
  • Messages : 3326
  • Inscrit : 15-July 02
  • Location:Paris
  • Interests:Internet
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 06:47 PM

Citer

la façon propre, si je ne me trompe pas, c'est le multihéritage
Ca dépend de quel point de vue ... de nombreux codeurs et théoriciens de la POO considérent l'héritage multiple comme une hérésie .... :roll:
"L'humilité c'est le top de la frime" - Didier SUPER
[ Développeur freelance AS3 - LAlex devblog ]
0

#8 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 06:55 PM

Citer

de nombreux codeurs et théoriciens de la POO considérent l'héritage multiple comme une hérésie ....
j'en suis un... :mrgreen:
0

#9 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 08:20 PM

Citer

Citer

de nombreux codeurs et théoriciens de la POO considérent l'héritage multiple comme une hérésie ....
j'en suis un... :mrgreen:

lol, pas moi:D:D:D
c comme la différence entre POO et OO, assez subtile et qui n'est fait pas que des heureux...tongue.gif;)
tant que je retrouve mon dodo...
0

#10 Utilisateur non-connecté   thecaptain

  • Lost in AStorm
  • Groupe : Honoris
  • Messages : 9335
  • Inscrit : 25-June 02
  • Gender:Male
  • Location:Lausanne (VD - CH)
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 10:13 PM

Citer

de nombreux codeurs et théoriciens de la POO considérent l'héritage multiple comme une hérésie ....


bah ca dépend tout du concept que tu veux appliquer smile.gif pour ma part j'ai une préférence avec l'héritage simple des classes biggrin.gif de la à dire une hérésie LOL un peu gros je trouve quand meme ^^ Le tout est d'etre structuré dans ses classes smile.gif Bon on va pa lancer le débat.

Toutefois fred, je vois mal en quoi le multihéritage entre en compte pour le problème de kiroukou :?

@++ wink.gif
Lost in AStorm
0

#11 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 10:19 PM

Citer

en creant des classes specifiques a chaque problemes

tant que je retrouve mon dodo...
0

#12 Utilisateur non-connecté   thecaptain

  • Lost in AStorm
  • Groupe : Honoris
  • Messages : 9335
  • Inscrit : 25-June 02
  • Gender:Male
  • Location:Lausanne (VD - CH)
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 10:22 PM

oui mais meme je vois pas cmt..... sad.gif
Lost in AStorm
0

#13 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 11:08 PM

classe a: tes bras
classe b: ta tête
classe c: ton tron
classe d: tes jambes

chques classes avec ses fonctinnalités propres.
Toi = classe dérivée de a, b, c, d parce que toutes les "fonctionnalités" de a, b, c, d sont tes habilités.
++ wink.gif
tant que je retrouve mon dodo...
0

#14 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 11:10 PM

Citer

Citer

en creant des classes specifiques a chaque problemes

ce problème peut être facilement résolu sans l'héritage multiple. :mrgreen: Il suffit d'hériter de la classe en question... :wink:
S'il y a plusieurs fonctionnalité qui se répète dans une ligné de classe totalement différente, on utilise la composition! 8)
et on est sur que notre code sera portable vers tous les languages objets! wink.gif

@++
0

#15 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 08 June 2004 - 11:12 PM

Citer

classe a: tes bras
classe b: ta tête
classe c: ton tron
classe d: tes jambes

chques classes avec ses fonctinnalités propres.
Toi = classe dérivée de a, b, c, d parce que toutes les "fonctionnalités" de a, b, c, d sont tes habilités.


mmmmm

habituellement, un humain a un bras, il n'est pas un bras! wink.gif
0

#16 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 11:38 PM

... merci pour cette réflexion ... t'en a d'autres des comme ça? on sait jamais, des fois que y'en aurait une de VRAIMENT pertinente
tant que je retrouve mon dodo...
0

#17 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 11:39 PM

:evil: ou :cry:
dsl, sui pas dans un état d'esprit rès compréhensible sur les jeux de mots sad.gif
tant que je retrouve mon dodo...
0

#18 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 08 June 2004 - 11:41 PM

mais isnon, t'as les fonctions virtuelles, les classes templates et un tas d'autres trucs comme ça... vive la conceptualisation...
bon, j'arrête... vraiment pas monjour sad.gif
tant que je retrouve mon dodo...
0

#19 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 09 June 2004 - 12:04 AM

laugh.gif
ce n'est pas un jeu de mots... wink.gif
c'est juste qu'habituellement, lorsque l'on fait de l'analyse OO, pour différencer l'héritage et la composition, on doit faire la reflexion suivante :

Un humain a un bras :arrow: composition

Un humain est un être vivant :arrow: héritage


et puis en restant dans le même contexte, la classe Bras doit être en 2 exemplaires dans ce cas si. Ce qui n'est pas possible avec l'héritage multiple (je ne veux pas te vexé...wink.gif ).

@++
0

#20 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 09 June 2004 - 12:06 AM

Citer

laugh.gif
ce n'est pas un jeu de mots... wink.gif
c'est juste qu'habituellement, lorsque l'on fait de l'analyse OO, pour différencer l'héritage et la composition, on doit faire la reflexion suivante :

Un humain a un bras :arrow: composition

Un humain est un être vivant :arrow: héritage


et puis en restant dans le même contexte, la classe Bras doit être en 2 exemplaires dans ce cas si. Ce qui n'est pas possible avec l'héritage multiple (je ne veux pas te vexé...wink.gif ).

@++

nope biggrin.gif
tu as raison, j'ai réagi stupidement. :oops:
dsl
tant que je retrouve mon dodo...
0

#21 Utilisateur non-connecté   LAlex

  • techno rêveur
  • Groupe : Honoris
  • Messages : 3326
  • Inscrit : 15-July 02
  • Location:Paris
  • Interests:Internet
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 09 June 2004 - 08:38 AM

Arf fred ! T'étais remonté comme une braguette hier !!! :mrgreen:

Sinon, je dirais que l'héritage multiple peut parfois se justifier. Le premier exemple qu'on m'a donné quand j'étais en cours de C++, c'était la pomme. Elle hérite de Sphere et de Fruit ... c'est pas incohérent en soi ! smile.gif

Mais la composition a ses avantages (j'ai donné cet exemple dans un autre post) : imaginons qu'on est une fenêtre rectangulaire, on peut faire hériter Fenetre de Rectangle, ce qui ne serait pas incohérent. Mais si on crée une classe Fenetre qui contient une instance de Rectangle, c'est quand même plus facile de faire une fenetre ronde ensuite si besoin est ... smile.gif

Le problème de l'héritage, c'est sa rigidité, son manque de souplesse. :? Par exemple pour MovieClip, j'ai toujours préféré la composition à l'héritage. :roll:

A mon sens, utiliser la traduction française "est un", ou "a un" (ou "utilise un", mais ca reste de la composition dans le codage) donne déjà une bonne piste, même si ca ne donne pas toujours la bonne solution (voire Fenetre plus haut wink.gif) ...

++ ^^
"L'humilité c'est le top de la frime" - Didier SUPER
[ Développeur freelance AS3 - LAlex devblog ]
0

#22 Utilisateur non-connecté   kiroukou

  • Habitué
  • Groupe : Honoris
  • Messages : 2325
  • Inscrit : 16-June 02
  • Logiciels utilisés:Flash, Flex, FDT
  • Gender:Male
  • Location:Bordeaux
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 09 June 2004 - 12:15 PM

Salut smile.gif
Vu le nombre de message que mon post suscite je comprend mieux pourquoi j'hesite moi aussi lol laugh.gif
Je connaissais la façon d'aborder les choses comme le dit liguorien (est un, à un) , ce qui m'a d'abord fait penser à heriter de MovieClip. Mais ensuite se pose le probleme , ou comme dans mon exemple de code, on ne peut pas faire de Cast supérieur (je connais pas le vrai nom pour cela).

Sinon l'idée de creer une classe abstraite de MovieClip, et de la derivée selon les problemes , vous en pensez quoi au niveau de l'architecture ?

Je suis d'accord que "heritage ou composition " est un probleme qu'il faut se poser avant toute creation de hierarchie de classe , alors dans mon cas vous feriez quoi ? biggrin.gif

++

Ps : fred c'est trop fort, a chacun de mes post ou tu repond ca part en debat biggrin.gif laugh.gif Moi j'aime bien en tout cas wink.gif
0

#23 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 09 June 2004 - 12:36 PM

en fait la notion de multi-héritage, je ne l'ai croisé véritablement que dans le c++. Pour quelques raisons toutes bêtes:
- en c, y'a pas de classes, donc, l'héritage... heu...
- en c#, l'héritage multiple est absent,
idem dans beaucoup d'autres langages.

D'ailleurs, cette notion je ne l'ai utilisé que dans un cas, un peu identique à celui de kiroukou, à savoir la gestion de fenêtre, mais dans une appli c++ MFC, et non flash.
Dans les MFC, les classes de fenêtres dérivent de CView, qui dérive elle -même de CWnd (qui est la classe mère de tous les éléments graphiques de windows, même de directx qui se base dessus je crois). De CView donc, on a des classes de fenêtres comme CHtmlView, CFormView, CListView, etc... Le problème est lorsque l'on veut créer une classe de type CWnd qui ne soit pas un conteneur de classes de fenêtre, mais qui dispose à la fois des méthodes de CHtmlView et de CFormView.
Alors, problème, comment faire? J'avais vu deux choix: soit dérivé de CWnd et de tout faire à la main (mais... je suis feignant, surtout lorsqu'il s'agit de titurer les MFC tongue.gif), ou d'utiliser le multi-héritage. Je retenu la deuxième solution. Quoiqu'il en soit, je ne me souviens même plus si ça marchait correctement, ni de l'utilité du programme biggrin.gif:D:D:D:D

Voila pourquoi j'ai parlé de multi-héritage. Mais Kiroukou, tu n'es pas dans le même cas que moi, sachant que c'est toi qui crée l'équivalent de la classe CWnd, et CView, etc... donc, tu es plus libre, et tu n'es pas obligé de faire les mêmes accrobaties que moi. A voir pour l'intérêt de multi-héritage... je suis à l'écoute de tous smile.gif

Sinon liguorien, encore une fois, désolé. J'ai relu mes posts, et je me rends compte:
- d'abord, que mon exemple niveau CP était stupide, et pas du tout aproprié aux circonstance sad.gif
- que mes remarques convulsives n'ont non seulement aucun intérêt, mais sont aussi non justifées, et totalement à côté de la plaque.
Je les aurais bien supprimé... mais les excuses n'auraient plus eu de sens tongue.gif
Voili voila
++ et encore désolé d'avoir pourri un thread
tant que je retrouve mon dodo...
0

#24 Utilisateur non-connecté   petepx

  • Ceinture Marron
  • Groupe : Honoris
  • Messages : 351
  • Inscrit : 16-June 03

Posté 12 June 2004 - 12:58 PM

Salut !

extends MovieClip == :twisted:

biggrin.gif
0

#25 Utilisateur non-connecté   fred

  • Machin
  • Groupe : Modérateurs
  • Messages : 3176
  • Inscrit : 01-October 02
  • Gender:Male
  • Location:Paname plage
  • Interests:plus le temps :(
  • Compétences: Non communiqué.

Posté 12 June 2004 - 01:45 PM

idem en fait tongue.gif tongue.gif
tant que je retrouve mon dodo...
0

#26 Utilisateur non-connecté   kiroukou

  • Habitué
  • Groupe : Honoris
  • Messages : 2325
  • Inscrit : 16-June 02
  • Logiciels utilisés:Flash, Flex, FDT
  • Gender:Male
  • Location:Bordeaux
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 12 June 2004 - 04:51 PM

Salut smile.gif

Citer

extends MovieClip == :twisted:


donc dans mon cas tu me conseille la composition ? Désolé je ne suis pas sur de bien interpreter le smiley wink.gif
Sinon tu peux me dire pourquoi histoire que je comprenne ton raisonnement ? biggrin.gif
Merci
0

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

1 utilisateur(s) dans ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)