36 0 184KB
Programmation Orientée Objet en C++ 8ème Partie: Objets et Classes
Fabio Hernandez [email protected]
Vue d'Ensemble } } } } } } } } } } } } } }
Notions de base Types, variables, opérateurs Contrôle d'exécution Fonctions Mémoire dynamique Qualité du logiciel Evolution du modèle objet Objets et classes Fonctions membres Classes génériques Héritage Polymorphisme Héritage multiple Entrée/sortie
POO en C++: Objets et Classes
197
© 1997-2003 Fabio HERNANDEZ
Table des Matières } } }
Nature d'un Objet Nature d'une Classe Exemple: une classe simple
}
abstraction définition de l'interface utilisation implémentation modification fonction membres contrôle d'accès initialisation/destruction
Résumé
POO en C++: Objets et Classes
198
© 1997-2003 Fabio HERNANDEZ
Nature d'un Objet }
}
Un objet représente une entité individuelle et identifiable, réelle ou abstraite, avec un rôle bien défini dans le domaine du problème Exemple: dans une usine de fabrication d'automobiles, on peut identifier des objets tels
}
moteur châssis volant système électrique processus de montage
Des objets peuvent être tangibles, mais peuvent ne pas avoir une frontière physique très bien définie (rivière, des nuages, ...)
POO en C++: Objets et Classes
199
© 1997-2003 Fabio HERNANDEZ
Nature d'un Objet (suite) }
Caractéristiques d'un objet
}
Etat Comportement Identité
Etat
un attribut est une caractéristique, qualité ou trait intrinsèque qui contribue à faire unique un objet l'état d'un objet comprend les propriétés statiques (attributs) et les valeurs de ces attributs les valeurs des attributs peuvent être statiques ou dynamiques du fait d'avoir un état, un objet occupe un espace dans le monde physique et dans la mémoire de l'ordinateur exemple: les attributs de l'objet point en deux dimensions sont les coordonnées x et y
POO en C++: Objets et Classes
200
© 1997-2003 Fabio HERNANDEZ
Nature d'un Objet (suite) }
Comportement
}
façon d'agir et de réagir d'un objet comme conséquence des changements d'état et des opérations effectuées sur lui représente l'activité de l'objet vue de l'extérieur si on regarde un objet comme un serveur, son comportement est l'ensemble des services offerts par lui à ses clients exemple: un point peut être déplacé, tourné autour d'un autre point, etc. le comportement dépend de l'état de l'objet et de l'opération effectuée sur lui l'état d'un objet représente le résultat cumulé de son comportement
Identité
propriété d'un objet qui permet de le distinguer des autres objets de la même classe
POO en C++: Objets et Classes
201
© 1997-2003 Fabio HERNANDEZ
Nature d'une Classe } }
} }
}
}
Les notions de classe et d ’objet sont étroitement liées Une classe est un ensemble d'objets qui partagent une structure et un comportement communs Une classe est seulement une abstraction Un objet est une instance (entité concrète) d'une classe en temps d'exécution On peut voir la classe comme un moule pour la fabrication d'objets Les objets fabriqués avec le même moule partagent structure et comportement
POO en C++: Objets et Classes
202
© 1997-2003 Fabio HERNANDEZ
Nature d'une Classe (suite) }
Deux vues d'une classe
}
interface implémentation
Interface
vue externe abstraite d'une classe liste de services offerts par les instances de la classe (contrat) une opération non spécifiée dans l'interface d'une classe ne peut être appliquée sur une instance (objet) de cette classe cache la structure interne de la classe (encapsulation) réponse à la question quoi contenue dans un fichier d'entête (.h)
POO en C++: Objets et Classes
203
© 1997-2003 Fabio HERNANDEZ
Nature d'une Classe (suite) }
Implémentation
vue interne d'une classe comprend les secrets (détails internes) de son comportement l'implémentation d'une classe est constituée de l'implémentation de chacune des opérations définies dans son interface réponse à la question comment contenue dans un fichier d'implémentation (.cpp)
POO en C++: Objets et Classes
204
© 1997-2003 Fabio HERNANDEZ
Exemple: classe Point }
Ecriture en C++ d'une classe (interface et implémentation) représentant la notion d'un point en deux dimensions
y ρ θ x
O
POO en C++: Objets et Classes
205
© 1997-2003 Fabio HERNANDEZ
Classe Point: abstraction }
Quels sont les attributs d'un point qui nous intéressent?
}
la coordonnée x la coordonnée y la distance à l'origine (ρ) l'angle par rapport à l'horizontale (θ)
Quelles sont les opérations applicables sur un point qui nous intéressent ?
translation rotation autour de l'origine ...
POO en C++: Objets et Classes
206
© 1997-2003 Fabio HERNANDEZ
Classe Point : interface } }
Définition (incomplète) de l'interface de la classe Point Fichier Point.h class Point { public: float getX(); float getY(); float rho(); float theta();
// Not yet finished !!!
// returns the x coordinate // returns the y coordinate // returns the distance to the origin // returns the angle to the // horizontal axis void translate(float horizontal, float vertical); void rotate(float angle);
}; POO en C++: Objets et Classes
207
© 1997-2003 Fabio HERNANDEZ
Classe Point : interface (suite) }
}
} }
getX, getY, rho, theta, translate et rotate sont des méthodes (services) fournies par toutes les instances de la classe Point getX, getY, rho et theta retournent une valeur de type float translate et rotate ne retournent rien translate et rotate ont besoin d'information supplémentaire pour accomplir leur mission
}
}
un déplacement horizontal et vertical, dans le cas de translate un angle, dans le cas de rotate
Y a-t-il des similarités avec la déclaration des fonctions, étudiée précédemment? Le mot clé public sert à contrôler l'accès aux méthodes de la classe. Plus d'informations à ce propos plus tard.
POO en C++: Objets et Classes
208
© 1997-2003 Fabio HERNANDEZ
Classe Point : utilisation }
Comment utiliser les services offerts par les objets de la classe Point?
}
il faut définir un objet de cette classe et ensuite... lui envoyer un message indiquant le service que l'on demande
La définition de l'objet est faite de la même façon que la définition des objets des types primitifs int count; Point p;
}
Pour envoyer le message indiquant le service demandé on utilise la notation service demandé
objet destinataire du message POO en C++: Objets et Classes
p.rotate(45.0); argument(s) du service 209
© 1997-2003 Fabio HERNANDEZ
Classe Point : utilisation (suite) }
Utilisation d'objets de la classe Point (fichier main.cpp) #include #include "Point.h" void main() { // Instantiate a Point object Point p;
inclusion du fichier qui contient l'interface de la classe
// Show its coordinates cout