Concepts des langages objet - Programmation Orientée Objet - JAVA PDF
Document Details
2024
Laila AMIR
Tags
Summary
These are lecture notes on object-oriented programming in Java. The document covers program structure, variables and methods, and the OOP concepts classes, objects, and constructors. These lectures are useful for students of computer science, or similar fields.
Full Transcript
Concepts des langages objet Classes internes Programmations Orientées Objet - JAVA Chap 3 : concepts P.O.O Pr. Laila AMIR Licences : SIR & Cybersécurité Année universitaire 2024/2025 Laila AMIR Programmati...
Concepts des langages objet Classes internes Programmations Orientées Objet - JAVA Chap 3 : concepts P.O.O Pr. Laila AMIR Licences : SIR & Cybersécurité Année universitaire 2024/2025 Laila AMIR Programmations Orientées Objet 1 / 42 Concepts des langages objet Classes internes Plan 1 Concepts des langages objet La classe, le constructeur, l’objet, le finaliseur Les packages Les modificateurs d’accès Les variables de classe : mot clé static 2 Classes internes Classe interne statique, et non statique La variable this Laila AMIR Programmations Orientées Objet 2 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Plan 1 Concepts des langages objet La classe, le constructeur, l’objet, le finaliseur Les packages Les modificateurs d’accès Les variables de classe : mot clé static 2 Classes internes Classe interne statique, et non statique La variable this Laila AMIR Programmations Orientées Objet 3 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static La classe Une classe modélise la structure statique (données membres) et le comportement dynamique (méthodes) des objets associés à cette classe. Une classe est la description d’un objet. Chaque objet est créé à partir d’une classe (avec l’opérateur new). Les classes sont déclarées à l’aide du mot-cle class, suivi du nom de la classe déclarée, suivi du corps de la classe entre accolades. Laila AMIR Programmations Orientées Objet 4 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Déclaration Par convention, un nom de classe commence par une majuscule. public class Vehicule { // corps de la classe } Le fichier contenant cette déclaration doit avoir pour extension.java et nom Vehicule.java. Remarque : Un fichier peut contenir plusieurs déclarations de classes, mais il ne peut contenir qu’une seule classe dite publique (dont le mot-clef class est précédé de public, comme dans l’exemple ci-dessus). Le fichier doit obligatoirement porter le même nom que cette classe publique. Laila AMIR Programmations Orientées Objet 5 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemple public class Vehicule { int age ; float poids ; boolean moteur ; float getWeight() { return(poids) ; } } Trois ”variables membre” : age, poids et moteur Une ”méthode membre” : getWeight() => poids d’un véhicule Laila AMIR Programmations Orientées Objet 6 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Le constructeur Chaque classe doit définir une ou plusieurs méthodes particulières appelées des constructeurs. Un constructeur est une méthode invoquée lors de la création d’un objet. Cette méthode, qui peut être vide, effectue les opérations nécessaires à l’initialisation d’un objet. Chaque constructeur doit avoir le même nom que la classe où il est défini et n’a aucune valeur de retour. La définition de cette fonction membre spéciale n’est pas obligatoire (si vous ne souhaitez pas initialiser les données membres par exemple) dans la mesure où un constructeur par défaut est défini par le compilateur Java si la classe n’en possède pas. Laila AMIR Programmations Orientées Objet 7 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Le constructeur Exemple: constructeur sans paramètres public class Vehicule { int age ; float poids ; boolean moteur ; Vehicule() { age = 0 ; poids = 0.0F ; moteur = false ; } float getWeight() { return(poids) ; } } Laila AMIR Programmations Orientées Objet 8 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Le constructeur On peut surcharger le constructeur, autrement, définir un ou plusieurs constructeurs. Exemple: constructeur avec paramètres public class Vehicule { int age ; float poids ; boolean moteur ; Vehicule(int a,float p,boolean m) { age = a ; poids = p ; moteur = m ; } } Laila AMIR Programmations Orientées Objet 9 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static L’objet L’opérateur new permet d’instancier une classe en utilisant l’un des constructeurs de la classe. Il fait appel à la machine virtuelle pour obtenir l’espace mémoire nécessaire à la représentation de l’objet puis appelle le constructeur pour initialiser l’objet dans l’emplacement obtenu. Il renvoie une valeur qui référence l’objet instancié. Si l’opérateur new n’obtient pas l’allocation mémoire nécessaire, il lève l’exception OutOfMemoryError. Laila AMIR Programmations Orientées Objet 10 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemple de création d’un objet Exemple : Création d’un objet V1 de type Vehicule avec le constructeur par défaut : Vehicule V1 = new Vehicule() ; Création d’un objet V2 avec le constructeur avec paramètres : Vehicule V2 = new Vehicule(2,1.5F,true); Laila AMIR Programmations Orientées Objet 11 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Remarque sur les objets de type String Un objet String est automatiquement créé lors de l’utilisation d’une constante chaı̂ne de caractères. String chaine1 = ”bonjour”; String chaine2 = ”bonjour”; chaine1 et chaine2 représentent la même instance de la chaine. Pour obtenir une seconde instance de la chaine, il faut explicitement demander sa création en utilisant l’opérateur new. String chaine1 = ”bonjour”; String chaine2 = new String(”bonjour”); Laila AMIR Programmations Orientées Objet 12 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static La durée de vie d’un objet Les objets ne sont pas des éléments statiques et leur durée de vie ne correspond pas forcément à la durée d’exécution du programme. La durée de vie d’un objet passe par trois étapes : la déclaration de l’objet et l’instanciation grâce à l’opérateur new; l’utilisation de l’objet en appelant ses méthodes; la suppression de l’objet : elle est automatique en Java grâce à la machine virtuelle. La restitution de la mémoire inutilisée est prise en charge par le récupérateur de mémoire (garbage collector). Il n’existe pas d’instruction delete comme en C++. Laila AMIR Programmations Orientées Objet 13 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static La création d’objets identiques MaClasse m1 = new MaClasse(); MaClasse m2 = m1; m1 et m2 contiennent la même référence et pointent donc tous les deux sur le même objet. Pour créer une copie d’un objet, il faut utiliser la méthode clone() : cette méthode permet de créer un deuxième objet indépendant mais identique à l’original. Cette méthode est héritée de la classe Object qui est la classe mère de toutes les classes en Java. MaClasse m1 = new MaClasse(); MaClasse m2 = m1.clone(); m1 et m2 ne contiennent plus la même référence et pointent donc sur des objets différents. Laila AMIR Programmations Orientées Objet 14 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les finaliseurs Le ramasse-miettes (garbage-collector) se charge de récupérer automatiquement l’espace mémoire utilisé par les objets (dès que ces derniers ne sont plus référencés). Le programmeur n’a pas à se soucier de cet aspect. Cependant, si l’objet contient d’autres types de ressources (fichiers ouverts, connexions réseau, transactions dans une base de données, etc) il peut être nécessaire d’écrire du code de finalisation qui devra s’exécuter avant que l’objet disparaisse. Laila AMIR Programmations Orientées Objet 15 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les finaliseurs Un finaliseur est une méthode d’instance héritée de la classe Object dont le nom est finalize() qui ne possède aucun paramètre qui ne retourne aucune valeur (void) La méthode finalize() (si elle a été définie) sera invoquée automatiquement par le Garbage collector avant la destruction de l’objet. Laila AMIR Programmations Orientées Objet 16 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les packages Un package regroupe un ensemble de classes sous un même espace de ”nomage”. Les noms des packages suivent le schéma : name.subname L’instruction package au début d’un fichier indique à quel package appartient ses classes En dehors du package, les noms des classes de ce package sont : packageName.className Laila AMIR Programmations Orientées Objet 17 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les packages Le fichier à inclure dans une extension(package) doit contenir le mot-clé package suivi du nom de l’extension. Ce nom peut être composé de plusieurs mots séparé par un point (. ). Exemple : Pour inclure la classe Toto dans l’extension ’Packages.sousPack1’, il faut écrire au début du fichier Toto.java : package Packages.sousPack1; La structure des répertoires doit suivre le nom de l’extension, c’est-à-dire que le fichier Toto.java doit se situer dans un sous-répertoire Packages/sousPack1/Toto.java. Laila AMIR Programmations Orientées Objet 18 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les packages Lorsqu’ensuite on désire utiliser la classe Toto, il faudra au préalable écrire : import Packages.sousPack1.Toto; ou lorsqu’ on désire importer toutes les classes de l’extension Packages.sousPack1 import Packages.sousPack1.*; ou utiliser directement une référence au package : Packages.sousPack1.Toto toto = new Packages.sousPack1.Toto(); Laila AMIR Programmations Orientées Objet 19 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les packages Un grand nombre de classes (forment l’API), fournies par Java SE, implémentent des données et traitements génériques utilisables par un grand nombre d’applications. Une documentation en ligne pour l’API java est disponible à l’URL : http://docs.oracle.com/javase/15/docs/api/ Toutes ces classes sont organisées en packages dédiés à un thème précis. Parmi les packages les plus utilisés, on peut citer : Package Description java.awt Classes graphiques et de gestion d’interfaces java.io Gestion des entrées/sorties java.lang Classes de base (importé par défaut) java.util Classes utilitaires javax.swing Autres classes graphiques Pour accéder à une classe d’un package donné, il faut préalablement importer cette classe ou son package. Laila AMIR Programmations Orientées Objet 20 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemple Par exemple, la classe Date appartenant au package java.util qui implémente un ensemble de méthodes de traitement sur une date peut être importée de deux manières : une seule classe du package est importée : import java.util.Date ; toutes les classes du package sont importées (même les classes non utilisées) : import java.util.* ; Le programme suivant utilise cette classe pour afficher la date actuelle : import java.util.Date ; public class DateMain { public static void main(String[] args) { Date today = new Date(); System.out.println(”Nous sommes le ” + today.toString()); } } Laila AMIR Programmations Orientées Objet 21 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les modificateurs d’accès Dans les exemples précédents, le mot-clé public apparaı̂t parfois au début d’une déclaration de classe ou de méthode sans qu’il ait été expliqué jusqu’ici. Ce mot-clé autorise n’importe quel objet à utiliser la classe ou la méthode déclarée comme publique. La portée de cette autorisation dépend de l’élément à laquelle elle s’applique : Elément Autorisations Variable Lecture et écriture Méthode Appel de la méthode Classe Instanciation d’objets de cette classe et accès aux variables et méthodes de classe Laila AMIR Programmations Orientées Objet 22 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les modificateurs d’accès En Java, la déclaration d’un élément (classe/méthode/attribut ou variable) peut être précédée par un modificateur d’accès qui indique si les autres classes de l’application pourront accéder ou non à cet élément. Ces modificateurs sont : public : toutes les classes peuvent accéder à l’élément protected : seules les classes dérivées (cf. héritage) et les classes du même package peuvent accéder à l’élément private : l’élément est seulement accessible depuis l’intérieur de la classe où il est défini. (par défaut) : sans modificateur d’accès, seules les classes du même package peuvent accéder à l’élément. Exception Les classes ne peuvent pas être private, non plus protected. Laila AMIR Programmations Orientées Objet 23 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les modificateurs d’accès public protected défaut private Dans la même classe Oui Oui Oui Oui Dans une classe du Oui Oui Oui Non même package Dans une sous-classe d’un Oui Oui Non Non autre package Dans une classe quelconque Oui Non Non Non d’un autre package Laila AMIR Programmations Orientées Objet 24 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemples : modificateur d’accès private Laila AMIR Programmations Orientées Objet 25 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemples : modificateur d’accès private L’utilisation du modificateur private est la meilleure façon d’encapsuler un objet en cachant son implémentation au monde extérieur. On ne peut pas accéder au membre (attribut ou méthode) private en dehors de sa classe. Laila AMIR Programmations Orientées Objet 26 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Assesseurs et mutateurs Assesseurs et mutateurs Pour accéder au contenu ou modifier le contenu d’une variable private en dehors de sa classe, il faut prévoir des interfaces (méthodes) publiques : un assesseur ( getter) et un mutateur ( setter) pour chaque variable private. Sans ces interfaces publiques, il n’ya aucune manière d’accéder à une variable private en dehors de sa classe. getNomVariable() : un getter est une méthode publique qui renvoie la valeur d’une variable private. setNomVariable(parametre) : un setter est une méthode publique qui permet de modifier la valeur d’une variable private. Laila AMIR Programmations Orientées Objet 27 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Assesseurs et mutateurs Laila AMIR Programmations Orientées Objet 28 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Méthode private Parfois, une méthode peut fournir une fonctionnalité qui n’est utile qu’à l’intérieur de sa classe, mais pas en dehors. Alors pour éviter qu’elle soit utilisée en dehors de sa classe, on la déclare private Déclarer un constructeur private signifie que seule la classe dans laquelle le constructeur est déclaré peut instancier un objet de cette classe. Toute autre classe ne pourra pas le faire. Laila AMIR Programmations Orientées Objet 29 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemples : modificateur d’accès default Le modificateur d’accès default est celui qui est appliqué lors que ne nous déclarons pas explicitement un des trois autres modificateurs d’accès : public ou private ou protected. Dans ce cas, une classe, une méthode ou un attribut est accessible uniquement aux autres classes du même paquetage (package). Laila AMIR Programmations Orientées Objet 30 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemples : modificateur d’accès protected Un modificateur d’accès protected permet aux membres (attributs ou méthodes) d’une classe d’être accessibles dans la classe, dans les classes dérivées et dans les classes du même paquetage. Mêmes si les classes dérivées sont dans un paquetage différent de celui de leur classe mère, ont accès aux membres protected de celle-ci. Laila AMIR Programmations Orientées Objet 31 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Exemples : modificateur d’accès public Le modificateur public est le plus permissif des modificateurs d’accès. Un attribut, une méthode ou une classe public est accessible dans tous les paquetages de votre programme et partout ailleurs. Laila AMIR Programmations Orientées Objet 32 / 42 La classe, le constructeur, l’objet, le finaliseur Concepts des langages objet Les packages Classes internes Les modificateurs d’accès Les variables de classe : mot clé static Les variables de classe : mot clé static Une variable ou une fonction membre déclarée static dans une classe est commune à toute les instances de cette classe. Une telle variable ou méthode yyy de la classe Xxxx pourra être utilisée en faisant directement référence à Xxxx.yyy. class Vehicule { static float taxation ; static float Taxation() { return(taxation) ; } } Vehicule.taxation = 100.0F ; System.out.println(Vehicule.Taxation()) ; Laila AMIR Programmations Orientées Objet 33 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this Plan 1 Concepts des langages objet La classe, le constructeur, l’objet, le finaliseur Les packages Les modificateurs d’accès Les variables de classe : mot clé static 2 Classes internes Classe interne statique, et non statique La variable this Laila AMIR Programmations Orientées Objet 34 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this Classe interne Définition Une classe interne est déclarée à l’intérieur d’une autre classe. Elle peut donc accéder aux membres de la classe externe. Laila AMIR Programmations Orientées Objet 35 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this Classe interne statique Une classe interne statique ne peut accéder qu’aux membres statiques de sa classe externe. Exemple : public class ClasseExterne { La compilation du fichier ClasseEx- private int compteur = 0; terne.java produit 2 fichiers compilés: private static String nom = ”exter”; static class ClasseInterne { private int index = 0; ClasseExterne.class contient la public ClasseInterne(){ classe ClasseExterne uniquement System.out.println(”Création d’un objet ”+nom); ClasseExterne$ClasseInterne.class // ici on ne peut pas acceder contient la classe ClasseInterne au compteur } } Laila AMIR Programmations Orientées Objet 36 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this Classe interne non statique Une classe interne non statique peut accéder aux membres statiques de la classe ainsi qu’aux membres de l’objet qui l’a créée. Exemple : Une telle classe interne (Classe non statique globale) peut-être déclarée de manière globale dans l’objet; elle sera public class ClasseExterne { accessible par l’ensemble des private int compteur = 0; class ClasseInterne { méthodes de l’objet. Elle peut private int index = 0; aussi être déclarée de manière public ClasseInterne() { locale à une méthode de l’objet. compteur++; Elle sera alors accessible depuis } cette seule méthode. } } Laila AMIR Programmations Orientées Objet 37 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this Classe interne non statique Depuis la classe interne, dans le cas où plusieurs variables ou méthodes public class ClasseExterne { portent le même nom private int compteur = 10; dans la classe interne et class ClasseInterne { la classe externe, le poin- private int compteur = 0; teur this seul désigne public void count() { l’instance de la classe in- this.compteur++; // 1 ClasseExterne.this.compteur- -; // 9 terne, tandis que le poin- } teur this précédé du } nom de la classe externe } désigne l’instance de la classe externe. Laila AMIR Programmations Orientées Objet 38 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this Le mot-clé this désigne, dans une classe, l’instance courante de la classe elle-même. Il sert à référencer dans une méthode l’instance de l’objet en cours d’utilisation. Il est utilisé à différentes situations décrites dans les sections suivantes : Désambiguiser S’auto-désigner comme référence Désigner l’instance de la classe qui encadre Laila AMIR Programmations Orientées Objet 39 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this this : désambiguiser Il peut être utilisé pour rendre le code explicite et non ambigu. Par exemple, si dans une méthode, on a un paramètre ayant le même nom qu’un attribut de la classe dont la méthode fait partie, on peut désigner explicitement l’attribut grâce à this : public class Calculateur { protected int valeur; public void calcule(int valeur) { this.valeur = this.valeur + valeur; } } Dans cet exemple, on additionne le paramètre valeur à l’attribut valeur et on stocke le résultat dans l’attribut valeur. L’attribut a été désigné explicitement par le mot-clé this. Laila AMIR Programmations Orientées Objet 40 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this this : s’auto-désigner comme référence Le mot-clé this peut être utilisé pour passer une référence à l’instance elle-même comme paramètre d’une méthode. Par exemple : s’enregistrer comme écouteur d’évènement : source.addListener(this); Laila AMIR Programmations Orientées Objet 41 / 42 Concepts des langages objet Classe interne statique, et non statique Classes internes La variable this this : désigner l’instance de la classe qui encadre Dans le cas où une classe interne utilise l’instance de la classe externe, le mot-clé this préfixé du nom de la classe externe permet de désigner l’instance de la classe externe. S’il n’est pas préfixé, il désigne l’instance de la classe interne. public class Livre { String titre = ”Le livre”; class Chapitre { String titre = ”Chapitre 1”; public String toString(){ return Livre.this.titre // ”Le livre” + ”/” + this.titre ; // ”Chapitre 1” // ou Chapitre.this.titre ; // ”Chapitre 1” } // -> ”Le livre/Chapitre 1” } } Laila AMIR Programmations Orientées Objet 42 / 42