Introduction au paradigme objet Le paradigme objet * Paradigme objet = ensemble de concepts de modélisation * Modélisation = représentation simplifiée d'un système * Plusieurs modèles possibles pour un système * Ne sont représentés que les éléments pertinents pour l'étude * Types de systèmes * Organisationnels: entreprise, école... * Biologiques: organisme, écosystème... * Informatiques: réseaux, logiciel, système d'information... * ... * Modélisation orientée objet * Modélisation reposant sur les concepts du paradigme objet * Un formalisme universel: UML * Programmation orientée objet * Programmation intégrant les concepts du paradigme objet * Langages généralistes orientés objet: C++, Java, C#... * Pour le Web: JavaScript et PHP intègrent des concepts objet Les principes fondateurs (1/3) * Encapsulation * Variables et fonctions réunies dans une même entité: la classe * L'accès à ces éléments peut être contrôlé * Permet de masquer les détails non nécessaires à l'utilisation * Exemple * Eléments nécessaires pour dessiner une forme géométrique * Des coordonnées et une couleur * Une fonction qui permet de tracer la forme * Définition d'une classe "Forme" * Trois variables: x, y et couleur * Une fonction: tracer Les principes fondateurs (2/3) * Héritage * Permet de définir une hiérarchie entre classes * Classe fille hérite des variables et fonctions de sa mère * Classe fille possède ses propres variables et fonctions * Exemple * Un rectangle est une forme géométrique * Définition d'une classe "Rectangle" * Hérite de la classe "Forme" * Trois variables: x, y, et couleur * Une fonction: tracer * Possède ses propres caractéristiques * Deux variables: largeur et hauteur * Une fonction "tracer" différente Les principes fondateurs (3/3) * Polymorphisme * Possibilité pour une fonction de prendre plusieurs formes * Souvent utilisé en combinaison avec l'héritage * Possibilité de redéfinir une fonction héritée: "redéfinition" * Accès par la classe mère ==> polymorphisme * Exemple * Un rectangle et un cercle sont des formes géométriques * Chacun a des variables et fonctions propres * Fonctions "tracer" différentes * Manipulation d'une forme par la classe "Forme" * Que fait l'appel à la fonction "tracer" de la classe mère ? * Rectangle ==> appel à "tracer" de "Rectangle" * Cercle ==> appel à "tracer" de "Cercle" Classes et objets * Un objet est une entité * Chose concrète ou abstraite * Ayant un intérêt pour notre é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 se déplace * se déplacer 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 Objets en JavaScript (1/2) * Possibilité de créer ses propres classes en JavaScript * Mais on utilisera plutôt des classes existantes * var mon_image = new Image(); * "new" = création d'un objet d'une classe donnée * Possibilité d'utiliser des objets existants * Tout élément d'une page HTML est un objet * DOM: Document Object Model * "document" est l'objet qui représente le document HTML * Opérateur "." permet d'accéder aux membres d'un objet * document.images * Attribut "images" de l'objet "document" * Tableau des images qui composent le document * document.write * Méthode "write" de l'objet "document" * Méthode qui génère du HTML dans le document Objets en JavaScript (2/2) * Tableau = classe "Array" * var tab = new Array(); * Attribut: length * taille_tab = tab.length; * Chaînes de caractères = classe "String" * var chaine = new String(); * Méthodes * indexOf(sousChaine): position d'une sous-chaîne * chemin = "images/pingouin.gif"; pos_slash = chemin.indexOf("/"); * substring(debut,fin): création d'une sous-chaîne * dossier = chemin.substring(0,pos_slash-1); * charAt(position): caractère à une position donnée * premier_caractere = chemin.charAt(pos_slash+1); 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 Diagramme de classes * Décrit des relations entre types d'entités * Une classe regroupe des entités (objets) ayant * Des propriétés (des attributs) similaires * Un comportement (des méthodes) commun * Des relations communes avec d'autres objets Relations entre les classes (1/2) * Une classe peut être en relation avec d'autres * Un objet d'une classe peut manipuler un objet d'une autre classe * Relation d'association * Exemple: une voiture circule sur une route * Un objet d'une classe peut contenir un objet d'une autre classe * Relation d'agrégation * Exemple: une voiture est composée de 4 roues * Une classe peut représenter un sous-ensemble d'objets d'une autre classe qui sont plus spécifiques * Relation d'héritage * Exemple: les berlines sont une catégorie de voitures Relations entre les classes (2/2) * Relation d'association * Une classe B est associée à une classe A * Relation d'agrégation * Une classe B possède des objets d'une classe A * Relation d'héritage * Une classe B hérite des caractéristiques d'une classe A Exemple de diagramme de classes JavaScript et les classes * Possibilité de définir des classes en JavaScript function Voiture(marq,coul) { this.marque = marq; this.couleur = coul; this.vitesse = 0; this.accelerer = function(i) { this.vitesse += i; } this.ralentir = function(i) { this.vitesse -= i; } } * "this" représente l'objet en cours de manipulation * Utilisation d'une classe * var clio = new Voiture("Clio 2 DCI","bleu"); * clio.accelerer(20); * document.write(clio.vitesse); * Possibilité d'agrégation * this.immatriculation = new String(); * Possibilité d'héritage * N'est pas natif au langage ==> Mise en place complexe * Mécanisme de délégation * Mécanisme de prototype |