Objets et classes - PowerPoint PPT Presentation

Loading...

PPT – Objets et classes PowerPoint presentation | free to download - id: 2a448c-NzEyM



Loading


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation
Title:

Objets et classes

Description:

Une classe Facture regroupe, par exemple, tout ce que l'on peut faire avec une ... pr c dent sur les tudiants en y ajoutant la possibilit de changer de nom et ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 53
Provided by: tabb9
Learn more at: http://www.loria.fr
Category:

less

Write a Comment
User Comments (0)
Transcript and Presenter's Notes

Title: Objets et classes


1
Objets et classes
  • Objectifs des LOO
  • Ils manipulent des objets
  • Les programmes sont découpés suivant les types
    des objets manipulés
  • Les données sont regroupées avec les traitements
    qui les utilisent
  • Une classe Facture regroupe, par exemple, tout ce
    que lon peut faire avec une facture, avec toutes
    les données nécessaires à ces traitements

2
Quest-ce quun objet?
  • Toute entité identifiable, concrète ou abstraite,
    peut être considérée comme un objet
  • Un objet réagit à certains messages qu'on lui
    envoie de l'extérieur la façon dont il réagit
    détermine le comportement de l'objet
  • Il ne réagit pas toujours de la même façon à un
    même événement sa réaction dépend de létat
    dans lequel il se trouve

3
Notion dobjet en Java
  • Un objet a
  • une adresse en mémoire (identifie lobjet)
  • un comportement (ou interface)
  • un état interne
  • Létat interne est donné par des valeurs de
    variables dinstances
  • Le comportement est donné par des fonctions
  • ou procédures, appelées méthodes

4
Exemple dobjet
5
Interactions entre objets
  • Les objets interagissent en senvoyant des
    messages synchrones
  • Les méthodes dun objet correspondent aux
    messages quon peut lui envoyer quand un objet
    reçoit un message, il exécute la méthode
    correspondante
  • Exemples
  • objet1.decrisToi()
  • employe.setSalaire(20000)
  • voiture.demarre()
  • voiture.vaAVitesse(50)

Objet qui reçoit le message
Message envoyé
6
Messages entre objets
maVoiture.vaVitesse(70)
Pierre envoie un message à sa voiture
7
Paradigme objet
  • La programmation objet est un paradigme, une
    manière de modéliser le monde
  • des objets ayant un état interne et un
    comportement
  • collaborent en s'échangeant des messages (pour
    fournir les fonctionnalités que l'on demande à
    l'application)
  • Dautres paradigmes
  • programmation impérative (Pascal, C)
  • programmation fonctionnelle (Scheme, Lisp)

8
Classes Java
  • Les objets qui collaborent dans une application
  • sont souvent très nombreux
  • Mais on peut le plus souvent dégager des types
  • d'objets des objets ont une structure et un
    comportement très proches, sinon identiques
  • Par exemple, tous les livres dans une application
    de gestion d'une bibliothèque
  • La notion de classe correspond à cette notion
  • de types d'objets
  • Un objet correspond à une instanciation de
    classes

9
Exemple classe etudiant
10
  • Public class Etudiant
  • private string nom, prenom
  • private int numero
  • // constructeur
  • public Etudiant(String unnom, String unprenom,
    int unnumero)
  • nom unnom
  • prenom unprenom
  • numero unnumero
  • // méthodes
  • Public string getnom()
  • return nom
    // accesseur
  • Public void changernumero(int unnum)
  • numero unnum //
    modificateur

11
Eléments dune classe
  • Les constructeurs (il peut y en avoir plusieurs)
    servent à créer des objets appelés instances de
    la classe
  • Quand une instance est créée, son état est
    conservé dans les variables dinstance
  • Les méthodes déterminent le comportement des
    instances de la classe quand elles reçoivent un
    message
  • Les variables et les méthodes sappellent les
    membres de la classe

12
Rôles dune classe
  • Une classe est
  • un type qui décrit une structure (variables
    d'état) et un comportement (méthodes)
  • un module pour décomposer une application en
    entités plus petites
  • un générateur dobjets (par ses constructeurs)
  • Une classe permet d'encapsuler les objets les
    membres public sont vus de l'extérieur mais les
    membres private sont cachés

13
Conventions pour les identificateurs
  • Les noms de classes commencent par une majuscule
    (ce sont les seuls avec les constantes) Cercle,
    Object
  • Les mots contenus dans un identificateur
    commencent par une majuscule uneClasse,
    uneMethode, uneAutreVariable
  • Les constantes sont en majuscules et les mots
    sont séparés par le caractère souligné _
    UNE_CONSTANTE
  • Si possible, des noms pour les classes et des
    verbes pour les méthodes

14
TD1bis
  • Compléter lexercice précédent sur les étudiants
    en y ajoutant la possibilité de changer de nom et
    de prénom dun étudiant
  • Créer une classe Point et une classe Rectangle
    avec une méthode qui calcule la surface dun
    rectangle. Tester lutilisation. Les rectangles
    sont définis par le point inférieur gauche et
    supérieur droit
  • Créer une application qui calcule la somme de 3
    nombres donnés en arguments de ligne de commande
    utiliser la classe Scanner (Java 1.5)
  • (cf api http//java.sun.com)

15
Constructeurs
  • Classes et instances
  • Une instance dune classe est créée par un des
  • constructeurs de la classe
  • Une fois quelle est créée, linstance
  • a son propre état interne (les valeurs des
  • variables)
  • partage le code qui détermine son
  • comportement (les méthodes) avec les autres
  • instances de la classe

16
Constructeurs dune classe
  • Chaque classe a un ou plusieurs constructeurs
  • qui servent à
  • créer les instances
  • initialiser létat de ces instances
  • Un constructeur
  • a le même nom que la classe
  • na pas de type retour

17
Création dune instance
  • public class Employe
  • private String nom, prenom
  • private double salaire
  • // Constructeur
  • public Employe(String n, String p)
  • nom n
  • prenom p
  • public void setSalaire(double s)
  • salaires
  • . . .
  • public static void main(String args)
  • Employe e1
  • e1 new Employe("Dupond", "Pierre")
  • e1.setSalaire(12000)
  • . . .

variables dinstance
création d'une instance de Employe
18
Plusieurs constructeurs (surcharge)
  • public class Employe
  • private String nom, prenom
  • private double salaire
  • // 2 Constructeurs
  • public Employe(String n, String p)
  • nom n
  • prenom p
  • public Employe(String n, String p, double s)
  • nom n
  • prenom p
  • salaire s
  • . . .
  • e1 new Employe("Dupond", "Pierre")
  • e2 new Employe("Durand", "Jacques", 15000)

19
Désigner un constructeur par this()
  • public class Employe
  • private String nom, prenom
  • private double salaire
  • // Ce constructeur appelle l'autre constructeur
  • public Employe(String n, String p)
  • this(n, p, 0)
  • public Employe(String n, String p, double s)
  • nom n
  • prenom p
  • salaire s
  • . . .
  • e1 new Employe("Dupond", "Pierre")
  • e2 new Employe("Durand", "Jacques", 15000)

20
Constructeur par défaut
  • Lorsque le code dune classe ne comporte pas de
    constructeur, un constructeur sera
    automatiquement ajouté par Java
  • Pour une classe Classe, ce constructeur sera par
    défaut défini par Java
  • public Classe()

Même accessibilité que la classe (public ou non)
21
Méthodes
  • Deux types de méthodes servent à donner accès aux
    variables depuis lextérieur de la classe
  • les accesseurs en lecture pour lire les valeurs
  • des variables accesseur en lecture est
  • souvent abrégé en accesseur
  • les accesseurs en écriture, ou modificateurs
  • pour modifier leur valeur

22
Paramètres dune méthode
  • Souvent les méthodes ou les constructeurs ont
  • besoin quon leur passe des données initiales
    sous
  • la forme de paramètres
  • On doit indiquer le type des paramètres dans la
  • déclaration de la méthode
  • setSalaire(double unSalaire)
  • calculerSalaire(int indice, double prime)
  • Quand la méthode ou le constructeur na pas de
  • paramètre, on ne met rien entre les parenthèses
  • getSalaire()

23
Type retour dune méthode
  • Quand la méthode renvoie une valeur, on doit
  • indiquer le type de la valeur renvoyée dans la
  • déclaration de la méthode
  • double calculSalaire(int indice, double prime)
  • Le pseudo-type void indique quaucune valeur
  • nest renvoyée
  • void setSalaire(double unSalaire)

24
Exemples de méthodes
  • public class Employe
  • private double salaire
  • . . .
  • public void setSalaire(double unSalaire)
  • if (unSalaire gt 0.0)
  • salaire unSalaire
  • public double getSalaire()
  • return salaire

Modificateur
Accesseur
25
Surcharge dune méthode
  • En Java, on peut surcharger une méthode,
    cest-à-dire, ajouter une méthode qui a le même
    nom mais pas la même signature quune autre
    méthode
  • calculerSalaire(int)
  • calculerSalaire(int, double)

indice dans la grille des salaires
prime accordées aux commerciaux
26
  • En Java, il est interdit de surcharger une
  • méthode en changeant le type de retour
  • Autrement dit, on ne peut différencier 2
  • méthodes par leur type retour
  • Par exemple, il est interdit d'avoir ces 2
    méthodes dans une classe
  • int calculerSalaire(int)
  • double calculerSalaire(int)

27
Types de variables
  • Les variables dinstances
  • sont déclarées en dehors de toute méthode
  • conservent létat dun objet, instance de la
    classe
  • sont accessibles et partagées par toutes les
    méthodes
  • de la classe
  • Les variables locales
  • sont déclarées à lintérieur dune méthode
  • conservent une valeur utilisée pendant
    lexécution de
  • la méthode
  • ne sont accessibles que dans le bloc dans
    lequel elles
  • ont été déclarées

28
  • Variable locale ou variable dinstance ?
  • Il arrive dhésiter entre référencer un objet
  • par une variable locale dune méthode
  • ou par une variable dinstance de la classe
  • Si lobjet est utilisé par plusieurs méthodes de
  • la classe, lobjet devra être référencé par une
  • variable dinstance

29
Déclaration des variables
  • Toute variable doit être déclarée avant dêtre
    utilisée
  • ??
  • Déclaration dune variable on indique au
    compilateur que le programme va utiliser une
    variable de ce nom et de ce type
  • Exemple
  • double prime
  • Employe e1
  • Point centre

30
Affectation
  • ?? Laffectation dune valeur à une variable est
    effectuée par linstruction
  • variable expression
  • ?? Lexpression est calculée et ensuite la valeur
    calculée est affectée à la variable
  • ?? Exemple
  • x 3
  • x x 1

31
Initialisation dune variable
  • ?? Une variable doit être initialisée (recevoir
    une
  • valeur) avant dêtre utilisée dans une expression
  • ?? Si elles ne sont pas initialisées par le
  • programmeur, les variables dinstance (et les
  • variables de classe étudiées plus loin) reçoivent
    les
  • valeurs par défaut de leur type (0 pour les types
  • numériques, par exemple)
  • ?? Lutilisation dune variable locale non
    initialisée
  • par le programmeur provoque une erreur (pas
  • dinitialisation par défaut)

32
Initialisation dune variable (2)
  • On peut initialiser une variable en la déclarant
  • La formule dinitialisation peut être une
    expression complexe
  • double prime 2000.0
  • Employe e1 new Employe("Dupond", "Jean")
  • double salaire prime 5000.0

33
Déclaration / création
  • public static void main(String args)
  • Employe e1
  • e1.setSalaire(12000)
  • Il ne faut pas confondre
  • déclaration dune variable et création dun
    objet référencé par cette variable
  • Employe e1
  • déclare que lon va utiliser une variable e1
    qui
  • référencera un objet de la classe Employe,
  • mais aucun objet nest créé

provoque une erreur NullPointerException
34
Déclaration / création (2)
  • Il aurait fallu écrire
  • public static void main(String args)
  • Employe e1
  • e1 new Employe("Dupond", "Pierre")
  • e1.setSalaire(12000)
  • . . .

35
Désigner les variables dune instance
  • Soit un objet o1 la valeur dune variable v de
  • o1 est désignée par o1.v .
  • Par exemple,
  • Cercle c1 new Cercle(p1, 10)
  • System.out.println(c1.rayon) // affiche 10
  • Remarque le plus souvent les variables sont
    private
  • et on ne peut y accéder directement en dehors de
    leur
  • classe

36
Accès aux membres dune classe
  • Degrés d'encapsulation
  • Java permet plusieurs degrés dencapsulation pour
    les membres (variables et méthodes) et les
    constructeurs dune classe
  • Lencapsulation est le fait de ne montrer et de
    ne permettre de modifier que ce qui est
    nécessaire à une bonne utilisation

37
Types d'autorisation d'accès
  • private seule la classe dans laquelle il est
  • déclaré a accès (à ce membre ou constructeur)
  • public toutes les classes sans exception y ont
  • accès
  • Sinon, par défaut, seules les classes du même
  • paquetage que la classe dans lequel il est
    déclaré y
  • ont accès (un paquetage est un regroupement de
  • classes cette notion sera étudiée plus loin
    dans le
  • cours)

38
Granularité de la protection desattributs dune
classe
  • En Java, la protection des attributs se fait
    classe par classe, et pas objet par objet
  • Un objet a accès à tous les attributs dun objet
    de la même classe, même les attributs privés

39
Protection de létat interne dun objet
  • Autant que possible létat dun objet (les
  • variables) doit être private
  • Si on veut autoriser la lecture dune variable,
  • on lui associe un accesseur, auquel on donne le
  • niveau daccessibilité que lon veut
  • Si on veut autoriser la modification dune
  • variable, on lui associe un modificateur, qui
  • permet la modification tout en contrôlant la
  • validité de la modification

40
Désigner linstance qui reçoit lemessage, this
  • Le code dune méthode dinstance désigne
  • linstance qui a reçu le message (linstance
    courante), par le mot-clé this
  • et donc les membres de linstance courante en
    les préfixant par this.

41
Exemple de this implicite
  • public class Employe
  • private double salaire
  • . . .
  • public void setSalaire(double unSalaire)
  • salaire unSalaire
  • public double getSalaire()
  • return salaire
  • . . .

Implicitement this.salaire
42
this explicite
  • this est utilisé surtout dans 2 occasions
  • pour distinguer une variable dinstance et un
  • paramètre qui ont le même nom
  • public void setSalaire(double salaire)
  • this.salaire salaire
  • un objet veut passer une référence de lui-même
    à un autre objet
  • salaire comptable.calculeSalaire(this)

Comptable, calcule mon salaire
43
Autre exemple
  • public Arbre pousser()
  • hauteur
  • return this
  • Arbre a new Arbre()
  • a.pousser().pousser().pousser()

44
Interdit de modifier this
  • this se comporte comme une variable final
    (mot-clé étudié plus loin), cest-à-dire quon ne
    peut le modifier le code suivant est interdit
  • this valeur

45
Méthodes et variables de classe
  • Variables de classe
  • Certaines variables sont partagées par toutes les
    instances dune classe. Ce sont les variables de
    classe (modificateur static)
  • Si une variable de classe est initialisée dans sa
    déclaration, cette initialisation est exécutée
    une seule fois quand la classe est chargée en
    mémoire

46
Exemple de variable de classe
  • public class Employe
  • private String nom, prenom
  • private double salaire
  • private static int nbEmployes 0
  • // Constructeur
  • public Employe(String n, String p)
  • nom n
  • prenom p
  • nbEmployes
  • . . .

47
Méthodes de classe
  • Une méthode de classe (modificateur static en
    Java) exécute une action indépendante dune
    instance particulière de la classe
  • Une méthode de classe peut être considérée
  • comme un message envoyé à une classe
  • Exemple
  • public static int getNbEmployes()
  • return nbEmployes

48
Désigner une méthode de classe
  • Pour désigner une méthode static depuis une autre
    classe, on la préfixe par le nom de la classe
  • int n Employe.getNbEmploye()
  • On peut aussi la préfixer par une instance
    quelconque de la classe (à éviter car cela nuit à
    la lisibilité on ne voit pas que la méthode est
    static)
  • int n e1.getNbEmploye()

49
Méthodes de classe
  • Comme une méthode de classe exécute une
  • action indépendante dune instance particulière
  • de la classe, elle ne peut utiliser de référence
    à
  • une instance courante (this)
  • Il serait, par exemple, interdit décrire
  • static double tripleSalaire()
  • return salaire 3

50
La méthode static main
  • La méthode main() est nécessairement static.
  • Pourquoi ?
  • La méthode main() est exécutée au début du
    programme. Aucune instance nest donc déjà créée
    lorsque la méthode main() commence son exécution.
    Ça ne peut donc pas être une méthode dinstance.

51
Blocs dinitialisation static
  • Ils permettent dinitialiser les variables static
    trop complexes à initialiser dans leur
    déclaration
  • class UneClasse
  • private static int tab new int25
  • static
  • for (int i 0 i lt 25 i)
  • tabi -1
  • . . .
  • Ils sont exécutés une seule fois, quand la classe
    est chargée en mémoire
  • Pour désigner la variable static à partir dune
    autre classe UneClasse.tabi
  • Exemple de méthode static Math.min()

52
TD2
  • Reprenez l'exercice précédent du TD 1. Modifier
    la classe Rectangle pour qu'il y a 3
    constructeurs, un qui ne prend aucun argument et
    qui crée un rectangle par défaut, un qui prend 4
    entiers et un qui prend 2 points.
  • Pour tester votre classe Rectangle écrire une
    méthode main dans laquelle vous créez 2 points
    p1(2,2) et p2(4,6), créez un rectangle à partir
    de ces 2 points, affichez sa surface
About PowerShow.com