juin 2007~ brigitte groléas~ 1 j200 (joc) java : objets et classes

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

Upload: odette-daniel

Post on 04-Apr-2015

112 views

Category:

Documents


0 download

TRANSCRIPT

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

juin 2007 ~ Brigitte Groléas~ 1

J200 (JOC)

Java : Objets et Classes

Page 2: Juin 2007~ Brigitte Groléas~ 1 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

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

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.

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

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

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

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

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

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.

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

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'instanc

e

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

juin 2007 ~ Brigitte Groléas~ 8

Instanciation d’objets

Créer un Objet de type Date grâce à l’opérateur new

Date d;d = new Date();

Date d = new Date();

Création d'un jour d.jourd'un mois d.moisd'une années d.annéed'une méthode init() d.init()d'une méthode affiche() d.affiche()

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

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();

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

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()

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

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

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

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é

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

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

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

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() { ... }

}

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

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)

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

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

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

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() {...

}}

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

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.

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

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

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

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

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

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

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

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 tabtab = null; // on a plus besoin de tab//.code encore long

}

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

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.

   

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

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.

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

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;}

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

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.

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

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 0static int var2 = 12; // initialisation tstatic private int tab[] = new int[100];static { // code d’initialisation

for( int i = 0; i < tab.length; ++i ) tab[i] = i * 2;

}}

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

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()

}}

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

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++; // OKvar2++ // ERREUR !!!!!foo(); // ERREUR !!!!!bar(); // OKthis // ERREUR !!!!

}

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

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));

}}

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

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;

}

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

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

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

juin 2007 ~ Brigitte Groléas~ 33

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) { … }

}

À vous … Vrai ou Faux

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

juin 2007 ~ Brigitte Groléas~ 34

Identifier les écritures valides1. 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 exactes1. 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

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

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 »

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

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);

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

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

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

juin 2007 ~ Brigitte Groléas~ 38

À vous …

Calculatrice en polonaise inverse La formule sera indiquée sous 3 2 + 5 *

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)

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

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 (   )