Développement Orienté Objet ● ● ● Analyse OO Conception OO Programmation OO 2 Analyse Orientée Objet ● ● ● ● Identifier les objets du domaine d'application Décrire les différents attributs Établir les relations entre les différents objets Former les groupes d'objets 3 Diagramme de classe PolygoneRegulier -nbCotes:int -longueur:double +perimetre():double +surface():double 4 Diagramme d'objet pr1:PolygoneRegulier pr1:PolygoneRegulier nbCotes=6 longueur=8.7 nbCotes=4 longueur=12.8 5 Diagramme de package figures 6 Association 1-1 Personne 1 propriétaire 1 outil Téléphone class Personne{ Telephone outil; Personne(){ outil = new Telephone(); } } class Telephone{ Personne proprio; Telephone(){ proprio = new Personne(); } } 7 Association 0..300 Personne réserve 0..* passager public class Personne{ private String nom; private ArrayList<Vol> lesVols; public Personne( String nom ){ lesVols = new ArrayList<Vol>(); this.nom = nom; } public void reserve( Vol v ){ lesVols.addElement( v ); } public boolean passager( Vol v ){ return lesVols.contains( v );} ... } Vol 8 Association d'une classe sur ellemême 1 Personne 0..1 marié à public class Personne{ private String nom; private Personne epoux = null; private boolean marie = false; public Personne( String nom ){ this.nom = nom; } public void marie( Personne p ){ epoux = p; marie = true; } public boolean marie(){ return marie; } ... } 9 Agrégation Personne 0..* client inclus 0..* ListeDeClients 10 Agrégation : traduction Java public class ListeClients{ private ArrayList<Personne> laListe; public ListeClients(){ laListe = new ArrayList<Personne>(); } public void inclus( Personne p ){ laListe.add( p ); } public Vector<Personne> laListe(){ return laListe; } } 11 Agrégation : traduction Java public class Personne{ private String nom; public Personne( String nom ){ this.nom=nom; } } public boolean client( ListeClients<Personne> l ){ return (l.laListe()).contains( this ); } 12 Association+agrégation 1 Personne 0..* client 0..1 marié à inclus 0..* ListeDeClients 13 Traduction Java public class Personne{ private String nom; private Personne epoux = null; private boolean marie = false; public Personne( String nom ){ this.nom=nom; } public void marie( Personne p ){ epoux = p; marie = true; } public boolean marie(){ return marie; } public boolean client( ListeClients<Personne> l ){ return (l.laListe()).contains( this ); } } 14 Traduction Java public class ListeClients{ private ArrayList<Personne> laListe; public ListeClients(){ laListe = new ArrayList<Personne>(); } public void inclus( Personne p ){ laListe.add( p ); } public Vector<Personne> laListe(){ return laListe;} } 15 Composition 1 Moteur 1..8 Cylindre public class Moteur{ private Cylindre[] lesCylindres; public Moteur(){ lesCylindres = new Cylindre[8]; } ... } 16 Composition multiple Vehicule 1 Moteur 4 Roue 1 Caisse 1 Habitacle 17 Composition multiple : traduction Java public class Vehicule { private Moteur moteur;private Roue[] roues; private Caisse caisse;private Habitacle habitacle; public Vehicule(){ moteur = new Moteur();roues = new Roue[4]; caisse = new Caisse();habitacle = new Habitacle();} public Vehicule( Moteur moteur,Roue[] roues, Caisse caisse,Habitacle habitacle){ this.moteur = moteur; this.roues = roues; this.caisse = caisse; this.habitacle = habitacle; } ... } 18 Héritage Vehicule Voiture Bateau Train Velo 19 Héritage : traduction Java public class Voiture extends Vehicule {...} public class Bateau extends Vehicule {...} public class Train extends Vehicule {...} public class Velo extends Vehicule {...} 20 Diagramme mixte Personne Etudiant Enseignant 1..* 1 suit enseigne 1..* 1..* Cours 21 Traduction Java public class Personne { protected String nom; ... } public class Cours{ ... } public class Etudiant extends Personne{ private Vector<Cours> lesCours; public Etudiant( String nom ){ lesCours = new Vector<Cours>(); this.nom = nom; } public void suit( Cours cours ){ lesCours.addElement( cours ); } } 22 Traduction Java public class Enseignant extends Personne{ private ArrayList<Cours> lesCours; public Enseignant( String nom ){ lesCours = new ArrayList<Cours>(); this.nom = nom; } public void enseigne( Cours cours ){ lesCours.addElement( cours ); } } 23 Modèle dynamique Diagramme état-transition fenêtre fermée click bouton/ ouvrir click bouton/ fermer click Bureau/ désactiver fenêtre ouverte/active fenêtre ouverte/inactive click fenêtre/ activer 24 Use Case ● ● Un " Use case " décrit comment un type d'utilisateur utilise un système pour accomplir un objectif 3 entités : ● L'Acteur décrit le rôle joué par l'utilisateur en relation avec le système. Il est extérieur au système et n'est pas obligatoirement une personne. Exemple : l'acteur peut être le distributeur de billets en relation avec une banque ● Le système utilisé ● L'objectif que l'utilisateur souhaite atteindre 25 Use case et UML communique distributeur retrait de billets client acteur limite du système Use case 26 Relations entre Use case aller au travail <<includes>> prendre le train Pour aller au travail on doit prendre le train aller au travail <<extends>> prendre le bus Si les trains ne fonctionnent pas, prendre le bus 27 Exemple ● " Use case " pour le retrait d'argent à partir d'un distributeur commander chèques annuler transaction consulter solde client retirer billets vérifier solde <<includes>> authentification<<extends>> refuser carte distributeur désactiver distributeur afficher log Employé banque 28 Diagrammes de séquences B les objets A m1 C D m2 m3 m4 29 Exemple client distributeur sélection d'une option de retrait affichage des options spécifier un montant vérification du solde invite le client à retire la carte éjection de la carte retrait de la carte invite le client à retirer les billets fournir les billets retrait des billets remercier le client débiter le compte affichage de l'écran de 30 bienvenue ED n°5 Des personnes définies par leur nom peuvent acheter une ou plusieurs voitures (définies par leur modèle). Chaque voiture peut posséder un autoradio (avec ou sans lecteur de CD). Cet autoradio est extractible. Son propriétaire est une personne qui n'est pas obligatoirement celui de la voiture. ● ● Tracer le diagramme UML correspondant Implanter ce diagramme en Java 31 Personne nom:String achète 1..* 1..* Voiture modele:String 1 1 installé possède 0..1 0..* Radio RadioCD 32 Exercice (1/3) public class Personne { private String nom; private Vector<Radio> radios; private boolean possede = false; private Vector<Voiture> voitures; public Personne( String nom ) { this.nom = nom; voitures = new Vector<Voiture>(); } public void possede( Radio radio ) { radios.addElement(radio); possede = true;} public boolean possedeRadio(){ return possede;} public void achete( Voiture voiture ) { voitures.addElement( voiture ); } } 33 Exercice (2/3) public class Voiture{ private String modele; private Radio radio = null; private boolean radioDispo = false; public Voiture( String modele ){ this.modele = modele; } public void installe( Radio radio ){ this.radio = radio; radioDispo = true; } public boolean radioDispo() { return radioDispo; } public Radio getRadio(){ return radio; } } 34 Exercice (3/3) public class Client{ public static void main ( String[] args ){ Personne personne = new Personne( "Ledoux" ); Voiture voiture = new Voiture( "Renault" ); Radio radio = new Radio(); voiture.installe( radio ); personne.achete( voiture ); personne.possede( voiture.getRadio() ); } } 35