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

Java : Objets et Classes

Présentations similaires


Présentation au sujet: "Java : Objets et Classes"— Transcription de la présentation:

1 Java : Objets et Classes
J200 (JOC) Java : Objets et Classes 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 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. 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 juin 2007 ~ Brigitte Groléas~

5 Le tas point d'entrée instance de la classeY réf3 instance de réf1
la classeX réf3 réf3 réf1 réf2 instance de la classeY instance de la classeX 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. 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 juin 2007 ~ Brigitte Groléas~

8 Instanciation d’objets
Créer un Objet de type Date grâce à l’opérateur new Date d = new Date(); Date d; d = new Date(); Création d'un jour d.jour d'un mois d.mois d'une années d.année d'une méthode init() d.init() d'une méthode affiche() d.affiche() 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(); juin 2007 ~ Brigitte Groléas~

10 this : référence un attribut
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() 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 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é 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 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() { ... } 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) 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. Appel au constructeur Date d1 = new Date(); 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() { ... 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. 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 juin 2007 ~ Brigitte Groléas~

20 Exemple 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; public Date( int j, int m ) { java.util.Date now = new java.util.Date(); jour = j; mois = m; Exemple 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 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 } 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. ¨    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. juin 2007 ~ Brigitte Groléas~

25 Variable statiques : variables de classe
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 class Truc { static int var; } Variable statiques : variables de classe 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 Les méthodes statiques ne peuvent pas accéder à this. L'acces se fait par le Nom de la classe il n'y a pas d'objet receveur 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; } 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() 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 !!!! } 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)); } 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; } juin 2007 ~ Brigitte Groléas~

32 Dans System.out.println("coucou");
À 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 juin 2007 ~ Brigitte Groléas~

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

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

37 Exemple récapitulatif
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; 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) juin 2007 ~ Brigitte Groléas~

39 À vous … Pile - int [ ] p - int sp
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 (   ) juin 2007 ~ Brigitte Groléas~


Télécharger ppt "Java : Objets et Classes"

Présentations similaires


Annonces Google