La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Juin 2007~ Brigitte Groléas~ 1 J200 (JOC) Java : Objets et Classes.

Présentations similaires


Présentation au sujet: "Juin 2007~ Brigitte Groléas~ 1 J200 (JOC) Java : Objets et Classes."— Transcription de la présentation:

1 juin 2007~ Brigitte Groléas~ 1 J200 (JOC) Java : Objets et Classes

2 juin 2007~ Brigitte Groléas~ 2 Classes vs Objets Objet = entité de l'environnement d'une application. = élément particulier d'une classe. = instance (occurrence) d'une classe. Classe = un genre, une catégorie d'entités semblables. = une famille d'objets de même format. = caractéristiques + propriétés = description + savoir faire = format des données + méthodes d'actions = est comme-ci et comme-ca + sait faire ceci et cela

3 juin 2007~ Brigitte Groléas~ 3 Avantage et mise en oeuvre L'encapsulation : Créer des objets pour déléguer et protéger. L'héritage : Dériver pour organiser et hiérarchiser les concepts Le Polymorphisme : Unifier. Un même point de vue sur différentes choses.

4 juin 2007~ Brigitte Groléas~ 4 Java dispose d'un catalogue de classes un catalogue - les classes java un regroupement par genre dans un catalogue - package mettre les objets d'un package à disposition - import utilisation une classe disponible dans le catalogue - faire un new, instancier une classe

5 juin 2007~ Brigitte Groléas~ 5 Le tas instance de la classeX réf3 instance de la classeX réf3 réf1 réf2 point d'entrée instance de la classeY instance de la classeY

6 juin 2007~ Brigitte Groléas~ 6 Les références Variable permettant de stocker la référence à un objet. Date naissance; Date m = naissance; ne fait pas une copie de l'objet : naissance et m sont 2 références sur le même objet.

7 juin 2007~ Brigitte Groléas~ 7 Définition d'une classe class Date { int jour; int mois; int année; public void init( int j, int m, int a ) { jour = j; mois = m; année = a; } public void affiche() { System.out.println( jour + "/" + mois + "/" + année ); } - Attributs - Variables d'instances - Propriétés Méthodes d'instance

8 juin 2007~ Brigitte Groléas~ 8 Instanciation d’objets Créer un Objet de type Date grâce à l’opérateur new Dated; d = new Date(); Dated = new Date(); Création d'un jourd.jour d'un moisd.mois d'une annéesd.année d'une méthode init() d.init() d'une méthode affiche()d.affiche()

9 juin 2007~ Brigitte Groléas~ 9 Accès aux composantes d1.jour = 10; d1.mois = 12; d1.année = 1998; d2.init( 31, 12, 1999 ); d1.affiche(); d2.affiche();

10 juin 2007~ Brigitte Groléas~ 10 Le mot clé : this Objet receveur et donnée membre léver l'ambiguité lors d'une variable locale du même nom this : référence un attribut this.jour this.affiche()

11 juin 2007~ Brigitte Groléas~ 11 Espace de nommage ~Polymorphisme des fonctions locales à des classes Fonctions membres : invocation à travers un objet Toute variable appartient à un objet (le jour de la Date d) -> 2 variables (ou méthodes) peuvent porter le même nom si elles n'appartiennent pas au même objet -> 2 méthodes peuvent porter le même nom dans la même classe si elles sont identifiables par leur paramètre Transmission par passage de messages Notion de contexte d'objet receveur

12 juin 2007~ Brigitte Groléas~ 12 Protection : spécificateurs de portée Définir l'accessibilité des données Encapsulation des données private aucun protected public Les accesseurs, pour accéder aux composantes cachées INCONVENIANTS : la lourdeur du code généré

13 juin 2007~ Brigitte Groléas~ 13 Interface fonctionnelle contre la lourdeur du code : développement en ligne public final void setJour(int jour) { this.jour = jour; } public final int getJour() { return jour; } CONSTANTES variables final méthodes final classes final

14 juin 2007~ Brigitte Groléas~ 14 Complétez cet exemple à vous class Date { private... jour, mois, année; public void init( int jour, int mois, int année ) {... } public void affiche() { System.out.println(...+"/"+...+"/"+... ); } public final int getJour() {... } public final int getMois() {... } public final int getAnnée() {... } }

15 juin 2007~ Brigitte Groléas~ 15 vrai ou faux ? à vous Une variable final n'est accessible que par les méthodes de la classe dans laquelle elle est déclarée Tous les attributs d'une classe peuvent être privés Toute classe doit comporter au moins 1 attribut Plusieurs classes peuvent avoir les mêmes méthodes (i.e. même nom, mêmes paramètres, même valeur de retour)

16 juin 2007~ Brigitte Groléas~ 16 Constructeurs Méthodes sans type de retour qui porte le même nom que la classe) Méthodes appelées lors de la construction de la classe L'opérateur new est appliqué sur un des constructeurs de la classe.Une nouvelle instance de la classe (objet) est allouée en mémoire et initialisée via le constructeur. Date d1 = new Date(); Appel au constructeur

17 juin 2007~ Brigitte Groléas~ 17 Valeurs par défaut et constructeurs class Date { private int jour = 1, mois = 1, année = 1900; public Date( int j, int m, int a ) { jour = j; mois = m; année = a; } public void affiche() {... }

18 juin 2007~ Brigitte Groléas~ 18 Constructeur par défaut Par défaut, toute classe possède un constructeur vide sans argument qui ne fait rien. Ce constructeur n’est implicitement défini par le langage que si aucun constructeur n’est défini explicitement par le programmeur.

19 juin 2007~ Brigitte Groléas~ 19 Surcharge des constructeurs Mécanisme très couramment utilisé: Plusieurs constructeurs peuvent coexister en ayant des paramètres différents Ce qui permet de construire des objets de façon très différentes paragraphe 'Constructor Summary' dans la documentation de sun

20 juin 2007~ Brigitte Groléas~ 20 class Date { private int jour, mois, année; public Date() { java.util.Date now = new java.util.Date(); jour = now.getDay(); mois = now.getMonth(); année = now.getYear(); } public Date( int j ) { java.util.Date now = new java.util.Date(); jour = j; mois = now.getMonth(); année = now.getYear(); } public Date( int j, int m ) { java.util.Date now = new java.util.Date(); jour = j; mois = m; année = now.getYear(); } Exemple

21 juin 2007~ Brigitte Groléas~ 21 Invocation explicite d’un constructeur class Date { private int jour, mois, année; public Date() { java.util.Date now = new java.util.Date(); jour = now.getDay(); mois = now.getMonth(); année = now.getYear(); } public Date( int j ) { this(); jour = j; } public Date( int j, int m ) { this(); jour = j; mois = m;.... this() permet d’invoquer un constructeur depuis un autre constructeur de la même classe

22 juin 2007~ Brigitte Groléas~ 22 Destructeur implicite : le garbage collector La destruction physique des objets est à la charge du système. Forcer la récupération d’un objet avant la sortie du scope : Il est possible d’anticiper l’action du garbage collector en supprimant explicitement la référence à un objet avant que la variable référence ne disparaisse d’elle même en sortant du bloc dans lequel elle est déclarée : void methode() { int tab[] = new int[10000]; // code utilsant tab tab = null;// on a plus besoin de tab //.code encore long }

23 juin 2007~ Brigitte Groléas~ 23 Destructeur explicite : finalize(). Mais si l’objet utilise d’autres types de ressources ( socket réseau, descripteur de fichier,... ), le programmeur doit pouvoir les libérer lui-même. « finalize() » qui est appelée avant la libération de l’objet. Quelques détails sur le fonctionnement de « finalize() » : doit toujours invoquer la méthode « finalize() » de la super classe. est invoquée avant la disparition effective de l’objet. L’interprète Java peut s’arrêter sans avoir libéré tous les objets. Il n’y a pas certitude que la méthode « finalize() » soit appelée. 

24 juin 2007~ Brigitte Groléas~ 24 finalize() Si la méthode « finalize() » génère une exception, elle est ignorée par le système. Aucune garantie sur le moment et l’ordre dans lequel les objets seront libérés.L’objet n’est pas détruit immédiatement après l’invocation de la méthode « finalize() » car celle-ci peut éventuellement ressusciter l’objet et rétablissant une référence dessus. L’objet ne sera récupéré qu’au prochain passage du garbage collector.

25 juin 2007~ Brigitte Groléas~ 25 Membre statique Une composante statique est une composante définie au niveau d’une classe et partagée par toutes les instances (objets) de cette classe. variables globales encapsulées dans une classe. Il n'est pas nécessaire d'instancier la classe pour accéder à un membre statique Variable statiques : variables de classe class Truc { static int var; }

26 juin 2007~ Brigitte Groléas~ 26 Accès aux membres statiques class Truc { public static int var = 0; public int foo() { return var; } class Programme { public static void main( String args[] ) { Truc.var++;// var passe à 1 } L'acces se fait par le Nom de la classe il n'y a pas d'objet receveur Les méthodes statiques ne peuvent pas accéder à this.

27 juin 2007~ Brigitte Groléas~ 27 Initialisation des variables statiques Les variables statiques non explicitement initialisées ont une valeur par défaut qui dépend de leur type (false, u0000, 0, ou null). on peut utiliser un bloc d’initialisation static qui sera exécuté une seule fois lors du chargement de la classe class Truc { static int var;// valeur par défaut 0 static int var2 = 12;// initialisation t static private int tab[] = new int[100]; static {// code d’initialisation for( int i = 0; i < tab.length; ++i ) tab[i] = i * 2; }

28 juin 2007~ Brigitte Groléas~ 28 Méthodes statiques : méthodes de classe correspondent à des globales définies au niveau de la classe. class Truc { public static void foo() { // code de foo } void bar(){ foo(); } class Programme { public static void main( String args[] ) { Truc.foo();// lance foo() }

29 juin 2007~ Brigitte Groléas~ 29 Pas d'objet receveur Une méthode de classe ne peut pas accéder aux composantes d’instance car elle n’a pas de référence this sur l’objet courant. class Truc { static int var; int var2; void foo() {...} static void bar() {...} static void foobar() { var++;// OK var2++// ERREUR !!!!! foo();// ERREUR !!!!! bar();// OK this// ERREUR !!!! }

30 juin 2007~ Brigitte Groléas~ 30 Import static de Tiger import static java.lang.Math.*; public class TestStaticImport { public static void main(String[] args) { System.out.println(PI); System.out.println(sin(0)); }

31 juin 2007~ Brigitte Groléas~ 31 Constantes nommées : final et statique Les variables déclarées avec le modificateur « static final » sont en fait des constantes. L’accès aux constantes nommées se fait de façon transparente Si une constante est publique, elle peut être accédée depuis l’extérieur de la classe par la syntaxe « NomDeClasse.constante » class Truc { static final int CONST = 15; static final int CONST2 = CONST >> 2; }

32 juin 2007~ Brigitte Groléas~ 32 À vous … Vrai ou Faux Dans System.out.println("coucou"); La classe System contient une méthode appelée out La classe System contient une méthode appelée println out est le nom d'une classe, définie par class out { …} out est le nom d'une instance de classe

33 juin 2007~ Brigitte Groléas~ 33 Soit la classe Date définie comme suit : class Date { private intjour, mois, année; public void init( int j, int m, int a ) { … } public void affiche() { … } public int inferieurA(Date d1) { … } } À vous … Vrai ou Faux

34 juin 2007~ Brigitte Groléas~ 34 Identifier les écritures valides 1. Date d1; 2. Date d1 = new Date(); 3. Date d1 = new Date("12/12/2000"); L'instance d1 de la classe Date étant créée, identifier les affirmations exactes 1. d1.init( 1, 2, 2000); 2. d1.affiche(); 3. affiche(d1); 4. i = d1.inferieurA(d2); 5. i = inferieurA(d1, d2); À vous … Vrai ou Faux

35 juin 2007~ Brigitte Groléas~ 35 String vs StringBuffer Une String est de taille fixe en mémoire, pour obtenir une chaîne susceptible de croître, utilisez un StringBuffer. StringBuffer st = new StringBuffer("coucou"); st.append("ca va"); System.out.println(st); --> « coucou ca va »

36 juin 2007~ Brigitte Groléas~ 36 L'opérateur instanceof Peut être utilisé pour déterminer la classe d'un objet dynamiquement. boolean test; String str = "toto"; test = (str instanceof String);

37 juin 2007~ Brigitte Groléas~ 37 public class Element { private String name; // nom de l’élément private int ident; // numéro d’identification géré automatiquement private static int nextIdent = 0; // valeur du prochain n° à attribuer public static final int FIRST_ID = 0; // constante Element( String s ) { // constructeur name = s; ident = nextIdent++; } public String getName() {...} // méthode d’instance public int getIdent() {...} // méthode d’instance public static int nbre_item() { // méthode de classe return nextIdent; } Exemple récapitulatif

38 juin 2007~ Brigitte Groléas~ 38 À vous … Calculatrice en polonaise inverse La formule sera indiquée sous * Les opérandes seront des nombres décimaux, écrits si nécessaire avec. les opérateurs appartiendront à l'ensemble {+, -, *, /} Les différents opérateurs et opérandes seront obligatoirement séparés par un espace ; aucun autre séparateur ne sera utilisé La formule devra tenir sur une seule ligne, la fin de la formule ne sera pas signalée par un caractère particulier (sauf le caractère de fin de ligne)

39 juin 2007~ Brigitte Groléas~ 39 À vous … La classe Pile est une structure de données LIFO ( Last In First Out ) Pile - int [ ] p - int sp + Pile ( int taille ) + Pile ( ) + boolean estVide ( ) + boolean estPleine ( ) + void empiler ( int val ) + int depiler ( )


Télécharger ppt "Juin 2007~ Brigitte Groléas~ 1 J200 (JOC) Java : Objets et Classes."

Présentations similaires


Annonces Google