Variables et accès en Java

Slides:



Advertisements
Présentations similaires
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
Advertisements

Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Leçon 3 : Héritage IUP 2 Génie Informatique
Programmation par Objets et Java
Chapitre III Héritage (début)
Programmation orientée objet
Langage Oriente Objet Cours 4.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Structures de données IFT-2000
Introduction au paradigme orienté-objet (suite)
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
La notion de type revisitée en POO
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
I21 Algorithmique et programmation II David Gross-Amblard, Joël Savelli IEM-uB GFDL 1.2 CM 4/8 v2.
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Comment corriger son code sans forcément appeler l’enseignant M2202
Modèle objet : les classes
Notions de base de programmation et Objets
java : l'héritage (rappel)
Environnement de développement des BD
Programmation en C++ Héritage
Classe interne Classe interne
Un outil industriel CA-RCM
Pas de variable globale
Les notions de classe et d'objet
Langage de manipulation de données (LMD)
Principes de programmation (suite)
Algorithmique Langage C
Langages de programmation TP7
Les fonctions.
Programmation en C++ Fonctions
Principes de programmation (suite)
Chapitre 2: Les classes et les objets
5ième Classe (Mardi, 6 octobre) CSI2572
E) Constructeurs et héritage
Les interfaces en PHP.
Programmation en C++ Fonctions
Programmation en C++ C++ de base
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
© Robert Godin. Tous droits réservés.
Les classes et les objets
Paradigme Orienté Objet
Programmation Orientée Objet MMI 2ème année – S3
Programmation par Objets et Java
Principes de programmation (suite)
© Robert Godin. Tous droits réservés.
© Robert Godin. Tous droits réservés.
Transcription de la présentation:

Variables et accès en Java

Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile => pour empêcher le compilateur de faire certaines optimisations (registre) Exemple d’usage « User variables that are referenced by multiple threads should have the attribute volatile to ensure that all changes to the value of the variable are performed immediately by the compiler. » to ensure that the variable is loaded from memory before each use, and stored to memory after each use to ensure that the value of the variable is consistent and coherent within each thread

Contrôle de l’accès aux variables Par défaut

Variables de classe class AnIntegerNamedX { static int x; Une variable de classe est créée une seule fois. La même variable de classe est partagée par toutes les instances de cette classe Les variables de classes peuvent être accédées via les instances et via les classes Les méthodes d’instance peuvent accéder aux variables de classes Les méthodes de classe NE peuvent PAS accéder aux variables d’instance class AnIntegerNamedX { static int x; public int x() { return x; } public void setX(int newX) { x = newX; } }

Initialisation directe des variables class BedAndBreakfast { static final int MAX_CAPACITY=10; boolean full = false; }

Initialisation des variables: bloc “static” A class can have any number of static initialization blocks that appear anywhere in the class body. The runtime system guarantees that static initialization blocks and static initializers are called in the order (left-to-right, top-to-bottom) that they appear in the source code.

Initialisation dans les constructeurs class Rectangle { Rectangle() { this(0,0,0,0); } Rectangle(int width, int height) { this(0,0,width,height); } Rectangle( int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height ; } La meilleure approche Tout le code d’initialisation se trouve à un seul endroit Code plus facile à lire Code plus facile à maintenir. Les valeurs par défaut sont manipulées explicitement.

Portée des variables

Les packages Comme mécanisme d’encapsulation Fournit une façon de partager de l’information à l’intérieur du package tout en empêchant son usage à l’extérieur Seuls les classes et interfaces déclarés public peuvent être utilisés par le code situé à l’extérieur du package Comme mécanisme de nommage Un package possède un nom hiérarchique qui permet de le distinguer des autres packages Les classes et les interfaces ont des noms relatifs à leur package Les définitions des autres packages peuvent être utilisés à l’aide de leur nom complètement qualifié Il peut y avoir conflit entre ces deux rôles Il peut être pratique de grouper plusieurs définitions dans le même package parce que le code externe aura accès à toutes ces classes en important un seul package Cette approche est souvent mal fondée du point de vue de l’encapsulation parce que le code d’un package a souvent accès à de l’information interne des autres définitions du package Morale: résoudre ce conflit en faveur de l’encapsulation

Déclaration des classes

Déclaration des classes Par défaut

Constructeur Si aucun constructeur n’est déclaré, par défaut, le système fournit un constructeur vide qui ne fait rien

Héritage des variables et des méthodes Une sous-classe hérite de tous les membres de sa superclasse qui sont accessibles à cette sous-classe à moins que la sous-classe ne cache explicitement une variable la sous-classe ne redéfinisse une méthode. Les constructeurs ne sont pas des variables ou des méthodes par conséquent ils ne sont pas hérités par les sous-classes.

Héritage des variables et des méthodes Les sous-classes héritent des membres (variables et méthodes) déclarés public ou protected. Les sous-classes héritent des membres des superclasses déclarés sans spécification d’accès en autant que la sous-classe se trouve dans le même package que les superclasses. Les sous-classes n’héritent pas des membres de la superclasse si la sous-classe déclare un membre avec le même nom. Dans le cas d’une variable, la variable de la sous-classe cache celle de la superclasse. Dans le cas d’une méthode, la méthode de la sous-classe redéfinit celle de la superclasse

Conversion, surcharge et redéfinition Vérification de typage utilise toujours le type apparent cast (nom d’une classe) expression Conversion implicite des valeurs d’un type en un autre Seulement pour les types primitifs Ordre croissant de généralité byte -> short -> int -> long -> float -> double i = l illegal l = i legal int = char legal char = int illegal

Surcharge Surcharge La méthode la plus spécifique est invoquée Plusieurs méthodes qui partagent le même nom Les méthodes sont différenciées par le nombre et le type des paramètres La méthode la plus spécifique est invoquée Une méthode m1 est plus spécifique qu’une méthode m2 si toute invocation légale de m1 serait aussi une invocation légale de m2 si d’autres conversions seraient effectuées S’il n’existe pas de méthode plus spécifique, alors erreur de compilation Tient compte des conversions implicites et des relations d’héritage

Redéfinition Une classe peut redéfinir une méthode de sa superclasse. Cette méthode doit avoir le même nom, le même type de résultat la même liste de paramètres. On ne peut pas redéfinir une méthode déclarée final On doit redéfinir une méthode déclarée abstract

Sécurité du typage Java garantit la sécurité du typage (type safety) Un langage fortement typé Les erreurs de typage sont détectés par le compilateur Gestion automatique de l’espace-mémoire Ramasse-miettes Vérification de tous les accès aux vecteurs pour s’assurer qu’ils en respectent les bornes. Une différence importante entre Java et C++