L'un des objectifs de la POO est de concevoir des systèmes qui se rapprochent le plus possible d'objets réels de la vie courante, en imitant leurs caractéristiques et leurs comportements. Les propriétés d'une classe d'objet, ce sont ses caractéristiques communes, ses qualités propres.
Alors que certaines propriétés s'appliquent à la classe, d'autres renferment de l'information sur un objet individuel. On distinguera donc les propriétés de classe et les propriétés d'instance.
Les propriétés d'instance sont les plus utilisées. Nous nous concentrerons donc sur celles-ci.
L'important, c'est de retenir qu'une propriété d'instance est déclarée une fois pour toute la classe, mais que chaque instance conserve sa propre valeur.
Une variable d'instance est déclarée de la façon suivante:
var nomPropriete:typeDonnee = valeur;
Si l'on omet la valeur dans la déclaration, la valeur par défaut est undefined.
Une propriété agit comme une variable et se déclare de la même façon. Il pourrait donc sembler que les deux termes désignent des éléments identiques. En réalité, une propriété est une variable rattachée à un objet. On les utilise de la même façon qu'une variable, en les passant en paramètre d'une fonction, en les comparant par des tests conditionnels, etc.
En fait, les variables que nous connaissons dans Flash sont en fait des propriétés: le clip ou le scénario sur laquelle repose une variable est l'objet auquel elle appartient.
Les classes d'objet intégrées dans Flash MX 2004 comportent aussi des propriétés. Les propriétés décrivent les caractéristiques propres à une instance. Ainsi, pour l'objet MovieClip, les propriétés servent à indiquer la position sur la scène (_x, _y) ou ses dimensions (_height, _width).
Dans le panneau d'Actions, les classes intégrées à Flash MX 2004 sont énumérées, avec leurs propriétés respectives.
Les propriétés d'instance peuvent être modifiées par trois attributs: public, private et static. Ces attributs contrôlent la façon dont on peut accéder aux propriétés. Ces attributs doivent être inscrits avant le mot-clé var dans la déclaration:
class Humain {
public var age:Number;
}
Si une propriété a plus d'un attribut, les attributs peuvent apparaître dans n'importe quel ordre, quoique par convention on placera d'abord les attributs public et private, avant l'attribut static.
public static var unePropriete:unTypeDonnee = uneValeur;
Attention! Les attributs public et private s'excluent mutuellement et ne peuvent pas être utilisées sur une même propriété.
Les attributs public et private définissent les conditions d'accès d'une propriété. Pour qu'il soit impossible d'accéder à une propriété en dehors de la classe, on utilise l'attribut private.
class Humain {
private var age:Number;
private var nas:Number;
}
En définissant une propriété comme étant private, on encapsule les informations sécuritairement dans la classe. Ainsi, on évite que d'autres codes reposent sur la structure interne d'une classe. Si on veut qu'une propriété privée soit modifiable de l'extérieur de la classe, on doit fournir une méthode de réglage. Nous couvrirons cet aspect plus loin.
Si une propriété ne possède pas d'attribut private, celle-ci est considérée comme étant publique. On peut donc accéder à cette propriété depuis n'importe où. Donc, toutes les propriétés sont publiques à moins que le contraire soit spécifié. Nous encourageons tout de même l'utilisation de l'attribut public afin d'indiquer que cette propriété est publique par intentio, et non par défaut.
class Humain {
public var age:Number;
public var nom:Number;
}
L'attribut static détermine si la propriété est associée aux instances de la classe ou seulement à la classe elle-même. Par défaut, les définitions de propriétés créent des propriétés d'instance. Pour indiquer qu'une propriété en est une de classe et non d'instance, on utilisera l'attribut static.
class Humain {
public static var vivant:Boolean = true;
}
On accède aux propriétés de classe à l'intérieur de la classe seulement, indépendamment de chaque instance. On les utilise pour stocker de l'information qui concerne toutes les instances, à l'opposé des données qui varient d'une instance à l'autre.
Les propriétés de classe sont utiles pour stocker des valeurs qui ne changent pas d'une instance à l'autre, comme des valeurs par défaut ou des paramètres de configuration.
class AppConfig {
public static var CONFIG_LOCATION:String = "config.xml";
public static var SOUND_ENABLED:Boolean = true;
public static var FULL_SCREEN:Boolean = false;
}