Ecrire une bonne code OO dans Adobe Flash

Voici quelques conseils sur la façon d'écrire de bonnes code orienté objet (OO) dans Adobe Flash, en particulier pour ceux qui utilisent encore la version MX attendant d'aller à CS3.

Organiser dossiers des classes

Tout d'abord, l'organisation des classes rend la maintenance du code du travail beaucoup plus facile. Vous pouvez également créer une véritable bibliothèque, vous pouvez réutiliser dans d'autres projets. Flash utilise une classification liée au système de fichiers, puis de les organiser en dossiers seront également reflétées sur l'importation de classes. Par exemple, si nous créons la séquence de dossiers "mylibrary / graphics / complot" et d'insérer notre propre classe ActionScript "PlotClass.as", alors que nous devrions utiliser pour importer la classe:

1
grafica . plot . PlotClass ; . importations mylibrary graphiques complot PlotClass..;

Si la bibliothèque (dossier) "MyLibrary" n'est pas dans votre dossier film ou projet, utilisez le flash des paramètres de publication pour sélectionner le chemin:

Réglage des bibliothèques percoroso


Encapsuler le code: en utilisant les propriétés

La hâte est toujours "mauvaise conseillère", vous devez donc passer plus de temps afin de récolter les fruits de nos efforts plus tard. Lors du développement d'une classe en ActionScript tendance à "voir" à tous nos propres, même ceux qui sont effectivement utilisés uniquement en interne à la classe.

1
2
3
4
class MyClass {
Number = 10 ; mio_valore var: Nombre = 10;
function MaClasse () {}
}

Tout cela est mauvais parce qu'il rend notre extrema code instable et enclin à l'erreur, même si l'on veut utiliser les objets en question. La règle permet dell'incapsulmento lieu de contrôler la définition des propriétés d'une classe extrêmement rendondola plus stable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyClass {
__mio_valore : Number = 10 ; __mio_valore var privé: Nombre = 10;
function MaClasse () {}
get MioValore ( ) : Number { MioValore public function get (): Number {
__mio_valore ) ; retour (__mio_valore);
}
set MioValore ( v : Number ) { Mis MioValore fonction publique (v: Nombre ) {
/ / Pssst: en utilisant l'opérateur ternaire ... ;)
/ / __mio_valore = (V> 5 & & v <20) V:? __mio_valore;
v > 5 && v < 20 ) { if (v> 5 & & v <20) {
__mio_valore = v;
}
}
}

in modo tale che possa assumere solo i valori compresi tra 5 e 20. Dans cet exemple la propriété MioValore , comme vu de l'extérieur, est contrôlée par le function set de sorte qu'elle ne peut prendre des valeurs comprises entre 5 et 20. se preferite. Cela signifie que dans notre classe, nous nous référerons uniquement à __mio_valore ou this.__mio_valore si vous préférez. Cependant nous allons toujours être sûr que la «variable» __mio_valore sera comprise entre 5 et 20, à moins que nous sommes nous-mêmes, au sein de la classe, changez la valeur incorrecte.
, permette di creare proprietà in sola lettura, in sola scrittura o entrambe, il chè non è da poco. Par ailleurs, l'utilisation de la propriété, ou la function get et de set , vous pouvez créer propriété en lecture seule, écriture seule, ou les deux, qui est deuxième à court terme.

Usage exclusivement privé et public quand il le faut

Les méthodes utilisées uniquement en interne à la classe ne doit pas être exposée à l'extérieur. Tout d'abord parce qu'ils n'ont pas besoin! Deuxièmement, parce que en fait pas partie de l'objet de l'interface. Lorsque vous relâchez une version d'une classe est certifie implicitement que les méthodes et propriétés que la classe expose (l'interface) sera maintenue dans les futures versions de l'objet. Evidemment cela peut changer, c'est leur mise en œuvre, l'ovvvero code sous-jacent, mais pas le nom ou les paramètres de notre méthode ou la propriété. En utilisant les méthodes private , cependant, ces derniers seront visibles que de l'intérieur de l'objet. Nous pourrions les utiliser et, si nécessaire, modifier l'ensemble, sans violer la règle fondamentale de la programmation orientée objet.

Hériter

L'héritage (l'héritage), qui est la caractéristique d'un objet à être descendus d'un autre, puis "héritent" de toutes les caractéristiques de l'objet «mère», est un outil unique de programmation orientée objet. La construction de hiérarchies, cependant, exige beaucoup d'expérience, afin de ne pas créer des sous-ensembles de code inutiles qui font un énorme éléphant bientôt ingérable. Souvent, les classes sont créées carte mère (IUnknown) après une longue analyse ou après avoir remarqué quelques "redondance" lors de la création des classes.
Mais le fait demeure que pour l'utiliser avec précaution, peut s'étendre en quelques secondes, tous les objets d'un filgi classe. ActionScript utilise le mot clé extends à créer l'héritage entre une classe et un autre.

1
2
3
4
5
6
7
8
9
10
11
12
ClasseMadre.as / / Fichier
{Classe ClasseMadre
Fonction ClasseMadre () {}
Addiziona ( a : Number , b : Numer ) : Number { Ajoute la fonction publique (a: Nombre , b: Number): Number {
a + b ) ; retour (a + b);
}
}
Figlio.as / / Fichier
Les importations ClasseMadre;
ClasseMadre { {Fils classe étend ClasseMadre
Fils de fonction () {}
}

, ereditato appunto dalla classe madre ClasseMadre . Dans cet exemple la classe Figlio de la méthode a automatiquement Addiziona() , en fait héritée de la classe parent ClasseMadre . Particulièrement utile est la capacité à toujours se référer à la classe parent en utilisant le mot-clé super , afin de permettre à des méthodes héritées écraser et les propriétés.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ClasseMadre.as / / Fichier
{Classe ClasseMadre
Fonction ClasseMadre () {}
Addiziona ( a : Number , b : Numer ) : Number { Ajoute la fonction publique (a: Nombre , b: Number): Number {
a + b ) ; retour (a + b);
}
}
Figlio.as / / Fichier
Les importations ClasseMadre;
ClasseMadre { {Fils classe étend ClasseMadre
Fonction Son () {}
Addiziona ( a : Number , b : Numer , c : Number ) : Number { Ajoute la fonction publique (a: Nombre , b: Number, c: Number ): Number {
super . Addiziona ( a , b ) + c ) ; retour (super. Ajoute (a, b) + c);
}
}

Ceci, à mon avis, est l'une des nombreuses beautés du développement objet!

Solutions

Si la classe que nous écrivons est lié à un MovieClip, devenant ainsi une extension, exige que tout objet ActionScript (MovieClip ou TextField) contenues dans le père MovieClip, est référencée au début de la classe. Par exemple, si nous étendons un MovieClip Il contient un MovieClip secondo_mc seconde identifié par son nom, quand nous déclarons la classe doit inclure une référence à ce MovieClip de cette manière simple:

1
2
3
4
5
6
7
8
9
MovieClip { classe MyClass étend MovieClip {
secondo_mc : MovieClip ; private var secondo_mc: MovieClip ;
function MaClasse () {}
/ /
Refresh ( ) { Fonction publique refresh () {
/ / ActionScript échouerait si nous n'avions pas déclaré cette variable / pointeur sur le début
secondo_mc . _x = 10 ; ce secondo_mc _x = 10..;
}
}

Lorsque les objets à manipuler est connue il n'ya aucun problème. Cependant, vous pouvez créer un runtime MovieClip et n'est donc pas prévu de ne pas avoir de ligne de la déclaration originale. Par exemple, ce code ne fonctionnera pas:

1
2
3
4
5
6
7
8
9
MovieClip { classe MyClass étend MovieClip {
function MaClasse () {}
/ /
CreaMovie ( ) { CreaMovie fonction publique () {
, 100 ) ; createEmptyMovieClip ("secondo_mc", 100);
/ / ActionScript ne sais pas cet objet
secondo_mc . _x = 10 ; ce secondo_mc _x = 10..;
}
}

C'est un cas très commun, imaginez le code suivant:

1
2
3
4
5
6
7
8
9
MovieClip { classe MyClass étend MovieClip {
function MaClasse () {}
/ /
CreaMovie ( ) { CreaMovie fonction publique () {
var i = 0 ; i < 50 ; i ++ ) { for (var i = 0; i <50; i + +) {
+ i , i ) ; createEmptyMovieClip ("item" + i, i);
}
}
}

Dans ce cas, comme dans d'autres, il est possible d'accéder à un objet comme un indice d'un tableau, à savoir:

1
2
3
4
5
6
7
8
9
10
MovieClip { classe MyClass étend MovieClip {
function MaClasse () {}
/ /
CreaMovie ( ) { CreaMovie fonction publique () {
var i = 0 ; i < 50 ; i ++ ) { for (var i = 0; i <50; i + +) {
+ i , i ) ; createEmptyMovieClip ("item" + i, i);
"item" + i ] . _x = 10 ; ce ["item" + i] _x = 10.;
}
}
}

C'est une technique très utile dans de nombreuses circonstances.

Versionnage

Une dernière chose utile que je suggère est la gestion des versions, qui est sûr de garder un enregistrement des modifications. Lorsque vous avez affaire à une série de ces classes ont tendance à évoluer au fil du temps. Bonne règle de base est donc d'adopter un programme (SCCS [Source Code Control System], CVS, Subversion pour MacOS / Linux / Unix ou FileHamster sous Windows) peut maintenir des versions des fichiers des rejets divers que nous émettons.
En plus de commenter sur le code et les versions / révisions du conseil définir une variable au sein de la classe (style JavaScript) afin de faire «parler» le code même objet:

1
2
3
4
class MyClass {
__release : String = "1.0" ; __release var privé: Chaîne = "1.0";
function MaClasse () {}
}

Inclusions et constante

Vous pouvez inclure le code directement dans la salle de classe. Bénéfice au niveau, le type d'organisation:

1
2
3
MovieClip { classe MyClass étend MovieClip {
# Include "ClassVersion.as"
}

Si vous n'avez pas le #define (! vraiment une honte qu'ils ne sont pas pris en charge) de C, voici une solution assez decororsa:

1
2
3
4
5
6
7
8
ERROR_1 : String = "Errore tipo 1" ; public var statiques ERROR_1: Chaîne = "Erreur de type 1";
/ / Ou - Code par Adobe
/ / Les valeurs pour les types de commande pour _cmdQueue
Number = 0 ; JOUER statiques var: Nombre = 0;
Number = 1 ; charge statique var: Nombre = 1;
Number = 2 ; PAUSE statiques var: Nombre = 2;
Number = 3 ; ARRÊT statiques var: Nombre = 3;
Number = 4 ; SEEK statiques var: Nombre = 4;

One Response to "Ecrire bon code OO dans Adobe Flash"

  1. 3 septembre 2008 Actionscript 3.0 pour les débutants: leçon n ° 2 | Undolog.com :

    [...] Les propriétés publiques, en utilisant l'encapsulation de sa programmation OO (voir écrire de bonnes code OO dans Adobe Flash). __stop __player et dénotent le joueur actif et l'état de [...]

Laisser un commentaire

XHTML TAG PERMIS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> CODE D'INSERTION:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL 


Arrêtez SOPA