Chapitre 2
OBJETS ET CLASSES
 
 
Précédent Suivant
 

Objets et classes
Définitions
* Un objet est une entité
* Chose concrète ou abstraite
* Ayant un intérêt pour l'étude
* Pouvant être reconnu distinctement
* Exemple: une voiture Clio 2 DCI, un stylo bleu...
* Classe = objets d'un même type
* Décrit un ensemble d'objets similaires
* Exemple
* Classe = voiture
* Objets = Clio 2 DCI, Punto S55...
Membres d'une classe
* Une classe possède des "membres"
* Des attributs
* Des méthodes
* Attributs = état
* Caractéristiques de l'objet
* Exemple: la couleur de la voiture
* couleur sera un attribut de la classe voiture
* bleu sera la valeur de cet attribut pour un objet précis
* Ensemble des valeurs des attributs = état de l'objet
* Programmation: attribut = variable propre à l'objet
* Méthodes = comportement
* Fonctionnalités de l'objet
* Exemple: la voiture accélère
* accélérer sera une méthode de la classe voiture
* Une méthode permet de changer l'état de l'objet
* Programmation: méthode = fonction propre à l'objet
Formalisme UML
* UML = Unified Modeling Language
* Formalisme international pour la modélisation
* Permet de modéliser tout type de système
* Utilisé en particulier pour modéliser des logiciels
* Programmes informatiques
* Bases de données
* Sites Web
* Principaux types de schémas
* Diagramme des cas d'utilisation
* Analyse des besoins
* Diagramme de classes
* Structure statique du système
* Diagramme d'interactions
* Structure dynamique du système
* On présente ici le diagramme de classes
Représentation en UML
* Représentation d'un objet
* Représentation d'une classe ==> décrire des objets ayant
* Des propriétés (des attributs) similaires
* Un comportement (des méthodes) commun
* Des relations communes avec d'autres objets
Envoi de messages
* Un objet peut demander à un autre d'effectuer une action
* Exemple: "alonso" envoie le message "accélérer" à "clio"
* Que se passe-t-il d'un point de vue programmation ?
* Requête auprès du receveur
* Durant l'exécution d'une des méthodes de "alonso"
* Appel à la méthode "accélérer" de "clio"
* Syntaxe généralement employée (C++ / Java / C#): clio.accelerer()
* Généralement, exécution synchrone de la requête
* L'objet "alonso" arrête alors son exécution
* L'objet "clio" prend la main le temps d'exécuter "accélérer"
* Similaire à un appel de fonction
1er principe fondateur: l'encapsulation
* Séparation forte entre "interface" et "implémentation"
* Interface = partie visible d'un objet
* Signatures des méthodes disponibles de l'extérieur
* Messages / services auxquels l'objet répond
* Accessibles aux objets d'autres classes
* Implémentation = partie cachée d'un objet
* Tous les attributs
* Contenu de toutes les méthodes
* Détails du fonctionnement des méthodes masqués
* Signatures des méthodes indisponibles de l'extérieur
* Intérêt: principe d'abstraction
* Connaître le moins d'éléments possibles sur l'objet utilisé
* Modifier l'implémentation d'un objet est sans conséquences
* Seule la modification de son interface a des répercussions
Visibilité des membres (1/3)
* Possibilité de contrôler la visibilité des membres
* Membre public (symbole UML: +)
* Accès par n'importe quel objet
* Membre privé (symbole UML: -)
* Accès par les objets de la classe uniquement
* Membre protégé (symbole UML: #)
* Accès par les objets de la classe et de ses "sous-classes"
* Définition de "sous-classe" au chapitre suivant
* Certains langages proposent des niveaux spécifiques
* Exemple: membres "friendly" en Java
* Permettent une visibilité au niveau d'un module / package
Visibilité des membres (2/3)
* En général: les attributs sont cachés
* Visibilité privée ou protégée
* Seules les méthodes de l'objet modifient les attributs
* Accès aux attributs par des méthodes spécifiques
* Par convention
* getX() retourne la valeur de l'attribut X
* setX(valeur) affecte une valeur à l'attribut X
* Ces méthodes sont appelées des "accesseurs"
* Permettent d'effectuer un contrôle
* Exemple: vérifier qu'une valeur est correcte avant affectation
Visibilité des membres (3/3)
Cycle de vie d'un objet (1/4)
* Création d'un objet en deux temps
* Allocation de la mémoire pour stocker son état
* Initialisation de son état
* Manière d'allouer la mémoire dépendante du langage
* C++
* Variables: automatique (sur la pile)
* Pointeurs: à la charge du développeur (sur le tas)
* Java / C#
* Références: à la charge du développeur
Cycle de vie d'un objet (2/4)
* Initialisation = "construction"
* Construction d'un objet de classe X
==> Exécution d'une méthode spécifique de X
* Méthode appelée "constructeur"
* Reçoit éventuellement des arguments
* Porte généralement le nom de la classe (C++ / Java / C#)
* Allocation et construction souvent liées
* Mot-clé généralement utilisé (C++ / Java / C#): new
* Exemple: new Voiture()
* Alloue et initialise un objet de la classe "Voiture"
* On parle d'"instanciation" de la classe
* Objet appelé "instance" de la classe
Cycle de vie d'un objet (3/4)
* Suppression d'un objet en deux temps
* "Terminaison" de l'état de l'objet
* Des actions peuvent être nécessaires quand un objet est détruit
* Libération de la mémoire occupée
* Manière de libérer la mémoire dépendante du langage
* C++
* Variables: automatique (à la fin de la portée)
* Pointeurs: à la charge du développeur
* Java / C#
* Gérée automatiquement par un "ramasse-miettes"
Cycle de vie d'un objet (4/4)
* Suppression = "destruction"
* Destruction d'un objet de classe X
==> Exécution d'une méthode spécifique de X
* Cette méthode est appelée "destructeur"
* Elle ne peut pas avoir d'argument
* C++: porte le nom de la classe précédé de "~"
* Peu utilisée quand il y a un ramasse-miettes (Java / C#)
* Car difficile de prédire quand l'appel va se produire
* Destruction et libération souvent liées
* Mot-clé utilisé par C++: delete
Mot-clé "this"
* Exécuter une méthode = appliquer une action sur un objet
* Exemple: clio.accélérer()
* Ne peut s'exécuter que si un objet est fourni
* Exemple: classe "Personne" + méthode "danser"
* Une deuxième personne en argument: danser(p:Personne)
* Code de la méthode
* afficher(this.getNom() + " danse avec " + p.getNom());
* Deux objets "Personne" sont manipulés
* p = objet passé en argument
* this = objet sur lequel l'action est appliquée (C++ / Java / C#)
* p1.danser(p2) ==> "p1 danse avec p2"
Membres de classe (1/2)
* Membres propres à chaque objet = membres "d'instance"
* Définition vue jusqu'à présent
* Chaque objet possède ses propres attributs
* Une méthode s'applique sur un objet donné
* Membres communs aux objets d'une classe = membres "de classe"
* Une méthode peut s'exécuter sans fournir d'objet
* Equivalent d'une fonction
* Tous les objets d'une classe peuvent partager un attribut
* Exemple: nombre d'objets existants de cette classe
* Fournir la classe au lieu d'un objet pour accéder au membre
* Java / C#: Voiture.getNbVoiture()
* C++: Voiture::getNbVoiture()
* Syntaxe pour la déclaration d'un membre de classe
* UML: soulignée
* Programmation: souvent précédée de "static" (C++ / Java / C#)
Membres de classe (2/2)