Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité
Cours 62 Plan du cours 6 Les problèmes de sécurité Le problème de la visibilité Visibilité des variables Principe de travail Durée de vie Valeurs initiales Le mot this Le mot static Champ static Méthode static Un principe de conception d’une méthode
Cours 63 Les problèmes de sécurité Les différents langages de programmation offrent plus ou moins de sécurité en raison de la façon dont ils mettent en œuvre certains problèmes. Citons quelques points. L’absence de règles strictes relatives aux conversions de types lors des affectations. La manipulation directe d’adresses par le langage. En Java, pas de pointeurs explicites. La gestion des erreurs et cas exceptionnels (débordement d’indice, division par zéro, gestion de ES…). En Java : les exceptions. Le domaine de visibilité des variables.
Cours 64 Le problème de la visibilité Si une variable est accessible de partout, problèmes… Solution : restreindre la visibilité.
Cours 65 Visibilité ou portée Domaine dans lequel une variable est utilisable. Un identificateur défini dans un bloc n’est en principe utilisable que dans ce bloc. Mais il y a quelques différences selon qu’il s’agit d’un identificateur de variable, de classe, de méthode. Java règle ces problèmes grâce aux mots public, protected et private.
Cours 66 Visibilité des variables En Java : pas de variable globale. On distingue : Les variables d’instance, Les variables locales, Les variables de classe. private objectif : restreindre l’accès Sécurité public est l’attribut par défaut.
Cours 67
8 Principe de travail L’objectif : restreindre la visibilité déclarer private. Créer éventuellement des méthodes d’accès aux variables : les méthodes traditionnellement appelées get… ou set…
Cours 69 Durée de vie Une variable locale ou un paramètre formel n’existent plus quand on quitte la méthode. Un objet est détruit quand il n’est plus référencé (par ex on met son handle à null).
Cours 610 Valeurs initiales Les variables non initialisées sont aussi une cause fréquente d’erreurs dans les programmes. Java règle ce problème : Variables d’instance. Les nombres : 0, les booléens : false, les handles : null. Variables locales : ne sont pas initialisées. Au programmeur de la faire.
Cours 611 Le mot this Plusieurs emplois this désigne l’objet courant. this(...) permet d’appeler un autre constructeur.
Cours 612 Lorsqu’un paramètre formel porte le même nom qu’une variable d’instance, comment les distinguer ? On utilise this.
Cours 613 Lorsque dans un constructeur on veut appeler un autre constructeur, on utilise this(…);
Cours 614 Le mot static Champ static Lorsque l’interpréteur Java rencontre le mot static devant un champ, il crée un emplacement unique pour ce champ. Exemple:
Cours 615 class P { static int nb;// variable de classe int x;// variables d’instance int y; // méthodes… } Dans une autre classe on crée : Pp1 = new P() ; et P p2 = new P() ;
Cours 616 Il est alors logique que l’on accède au champ nb en utilisant le nom de classe : P.nb car le champ static n’appartient pas à un objet particulier p1 ou p2 mais à tous les objets de la classe P. Il est cependant toléré d’y accéder en utilisant le nom d’un objet : p1.nb (à éviter).
Cours 617 Méthode static Une méthode static est commune à tous les objets de la classe, elle n’appartient pas à un objet particulier. C’est pour cela qu’il est cohérent de l’appeler en utilisant le nom de la classe : NomDeClasse.nomDeMéthode(…) ; On dit alors logiquement que c’est une méthode de classe en opposant ce terme à méthode d’instance (appelée comme ceci nomDObjet.nomDeMéthode(…)).
Cours 618 Très important Une méthode static ne possède pas de paramètre implicite (pas de this) car elle ne travaille pas sur une instance. Puisqu’une telle méthode n’appartient pas à un objet, elle ne doit pas se référer aux champs (non static) d’un objet.
Cours 619 Vocabulaire à retenir Variable d’instance, variable de classe, variable locale. Méthode d’instance, méthode de classe. Méthode accesseur, get, set private, public, static
Cours 620 Un principe de conception d’une méthode Ne pas mêler calculs et ES public int som(int x, int y) { System.out.println(x+y) ;// mauvais return x + y ;; }
Cours 621 Une méthode peut modifier de l'objet auquel elle appartient mais ne doit pas en principe modifier l'état d'un objet transmis. Ex le tableau note. Sinon, effet de bord. public moyenne(double[ ] note} {…} La méthode ne doit pas modifier le tableau note Les méthodes dont le nom commence par set (setVisible, setColor…) modifient l'état de l'objet. (règle d'usage Java) Les méthodes dont le nom commence par get sont des accesseurs (getColor…).