Tout ce que tu dois savoir pour les Cours 1â7, expliquĂ© simplement â comme si t'avais 5 ans đ§
Besoins, analyse, conception, itérations...
Acteurs, use cases, include, extend, généralisation...
Classes, attributs, associations, héritage, composition...
Messages, lignes de vie, fragments alt/loop/opt/ref...
Liens, numérotation, messages imbriqués...
Ătats, Ă©vĂ©nements, transitions, entry/do/exit...
Actions, décisions, swimlanes, fork/join...
Interfaces, ports, artefacts, nĆuds physiques...
Avant de dessiner des diagrammes, comprends pourquoi on en a besoin.
Tu ne commences pas directement Ă poser des briques, non ? D'abord, tu fais un plan (l'architecte dessine). UML, c'est exactement pareil mais pour les logiciels.
Montrent la structure du systĂšme (c'est quoi les piĂšces de la maison ?)
Montrent le comportement (comment les choses bougent ?)
Définition simple : Le SI d'une entreprise = toutes les données + tous les traitements nécessaires à son fonctionnement.
| Concept | C'est quoi ? | Exemple |
|---|---|---|
| Donnée | Signe + code (brut) | 71540325 |
| Information | Donnée + interprétation | "C'est un numéro de téléphone" |
| Connaissance | Information interprétée | "C'est un abonné de Tunis" |
| GĂ©nĂ©ration | Approche | Points Forts â | Points Faibles â |
|---|---|---|---|
| 1Úre | Cartésienne | Simple, bon sens, capture des besoins | Focus fonctions, pas de réutilisation |
| 2Ăšme | SystĂ©mique | CohĂ©rence donnĂ©es, 3 niveaux d'abstraction | Manque de cohĂ©rence donnĂ©esâtraitements |
| 3Úme | Objet (UML) | Modélise objets complexes, intÚgre données + traitements, encapsulation | "Tout objet" difficile à apprendre |
UML te donne les dessins. La démarche te dit dans quel ordre les faire pour passer des besoins au code.
UML, c'est comme une boßte de crayons avec des rÚgles de dessin. Une méthode, c'est la recette qui te dit : "dessine d'abord ça, vérifie ça, puis passe à l'étape suivante".
Il fournit les symboles : acteur, classe, transition, composant, nĆud, message...
Elle organise le travail : besoins â analyse â conception â implĂ©mentation.
Version enfant : tu ne construis pas tout le chĂąteau LEGO d'un coup. Tu fais une tour, tu testes si elle tient, tu ajoutes un pont, tu corriges, puis tu continues.
Le cours propose une démarche plus simple que RUP, adaptée aux projets modestes. Elle garde seulement ce qui aide vraiment.
Quand tu passes des besoins au logiciel, tu ne mets pas tout dans une seule classe géante. Tu sépares les responsabilités.
| Type | RĂŽle | Image simple đ§ | Exemple |
|---|---|---|---|
| Dialogue | GĂšre l'interaction avec l'utilisateur ou l'IHM | Le guichet oĂč l'utilisateur parle | FenetreConnexion, PagePanier |
| ContrÎle | Organise le scénario et applique les rÚgles applicatives | Le chef d'orchestre | ControleurCommande |
| Entité | Représente les données persistantes du métier | Les fiches qu'on garde dans un classeur | Client, Facture, Produit |
| Ătape | Diagramme utile | Ce qu'il prouve |
|---|---|---|
| Besoins | Cas d'utilisation | On sait qui utilise le systĂšme et pour quoi faire. |
| Spécification | Séquence systÚme | On sait quels messages passent entre acteur et systÚme. |
| Analyse métier | Classes du domaine | On sait quels concepts métier existent et comment ils sont liés. |
| Scénarios complexes | Activités | On voit les décisions, branches, boucles et responsabilités. |
| Conception logicielle | Séquence / Communication | On sait quels objets collaborent à l'intérieur du systÚme. |
| Architecture | Composants / DĂ©ploiement | On sait comment le logiciel est dĂ©coupĂ© et oĂč il s'exĂ©cute. |
Le premier diagramme qu'on fait â il rĂ©pond Ă la question : "Qui fait quoi avec le systĂšme ?"
Imagine un restaurant đœïž. Le diagramme de cas d'utilisation, c'est comme lister :
Un grand rectangle qui représente les limites du systÚme. Tout ce qui est dedans = ce que le systÚme fait. Tout ce qui est dehors = l'environnement.
| Type | Description | Position |
|---|---|---|
| Principal | Celui qui initie le cas d'utilisation et en tire un bĂ©nĂ©fice | đ” Ă gauche |
| Secondaire | SollicitĂ© pour des infos complĂ©mentaires (ne dĂ©marre rien) | đĄ Ă droite |
Chaque ellipse = une fonctionnalité que le systÚme offre. Le nom est toujours un verbe à l'infinitif.
| Relation | Symbole | Signification | Exemple Simple đ§ |
|---|---|---|---|
| Association | Trait simple ââ | L'acteur participe au cas | Le client utilise "Commander" |
| «include» | FlĂšche pointillĂ©e â | Le cas A inclut TOUJOURS le cas B | "Retirer argent" inclut toujours "S'authentifier" |
| «extend» | FlĂšche pointillĂ©e â | Le cas B est optionnel/exceptionnel pour le cas A | "Payer" peut ĂȘtre Ă©tendu par "Payer en CB" |
| GĂ©nĂ©ralisation | FlĂšche avec triangle âł | Relation parent â enfant (hĂ©ritage) | "Client VIP" hĂ©rite de "Client" |
C'est la question piĂšge favorite des profs. Voici comment ne JAMAIS se tromper :
Le cas principal a BESOIN du cas inclus. Sans lui, ça ne marche pas.
Truc : La flĂšche part du cas principal VERS le cas inclus
Le cas étendu peut ou ne peut pas se produire. C'est optionnel.
Truc : La flĂšche part du cas optionnel VERS le cas principal
Prenons l'exercice de l'agence de voyages :
Chaque cas d'utilisation peut (et souvent doit) ĂȘtre dĂ©crit textuellement :
| Champ | Description |
|---|---|
| Nom | Le nom du cas (verbe Ă l'infinitif) |
| Acteur principal | Qui lance ce cas |
| PrĂ©conditions | Ce qui doit ĂȘtre vrai AVANT |
| Scénario nominal | Les étapes du cas normal (1, 2, 3...) |
| Scénarios alternatifs | Les variantes (extend) |
| Postconditions | Ce qui est vrai APRĂS |
Le diagramme STAR â d'UML â il montre la structure de ton systĂšme : les objets et leurs liens.
Le diagramme de cas d'utilisation dit Ă QUOI sert le systĂšme. Le diagramme de classes dit DE QUOI il est fait.
Imagine un jeu LEGO đ§±. Le diagramme de classes, c'est la notice qui liste toutes les piĂšces et comment elles s'emboĂźtent.
Une classe a 3 compartiments :
| Symbole | VisibilitĂ© | Signification đ§ |
|---|---|---|
| - | private | Personne ne peut y toucher sauf moi |
| + | public | Tout le monde peut y accéder |
| # | protected | Moi et mes enfants seulement |
| ~ | package | Ceux de mon groupe/paquet |
Un trait entre deux classes = elles sont liées. On peut ajouter :
| Notation | Signification | Exemple đ§ |
|---|---|---|
| 1 | Exactement 1 (obligatoire) | 1 personne a exactement 1 cerveau |
| 0..1 | 0 ou 1 (optionnel) | 1 personne a 0 ou 1 voiture |
| * ou 0..* | 0 ou plusieurs | 1 personne peut avoir 0 ou plein d'amis |
| 1..* | Au moins 1 | 1 équipe a au minimum 1 joueur |
| n..m | Entre n et m | 1 main a entre 0 et 5 doigts |
Personne 1..* âââââ 0..1 EntrepriseC'est la question piĂšge #2 des profs !
Relation "contient" mais les parties peuvent exister seules.
Exemple : Une Ăquipe âââ Joueur
Si l'équipe est dissoute, les joueurs existent encore ! Ils peuvent rejoindre une autre équipe.
Relation "composé de" et les parties meurent avec le tout.
Exemple : Une Maison âââ PiĂšce
Si la maison est détruite, les piÚces n'existent plus !
C'est comme une famille đšâđ©âđ§ : l'enfant hĂ©rite des caractĂ©ristiques du parent mais peut avoir les siennes en plus.
Quand une association elle-mĂȘme a des attributs ou des opĂ©rations, on crĂ©e une classe d'association.
Exemple : Personne â travaille â SociĂ©tĂ©. Le "contrat de travail" a un salaire et une date â classe d'association "Contrat"
Elle est reliée à l'association par un trait en pointillé.
Classe abstraite : Une classe qu'on ne peut pas instancier directement. Son nom est en italique. Elle contient au moins une méthode abstraite (sans corps).
Interface : Un "contrat" qui dit quelles opérations une classe doit implémenter. Notation : «interface» au-dessus du nom.
Relation d'implĂ©mentation = flĂšche pointillĂ©e avec triangle vide âł
Une flÚche à une extrémité indique dans quel sens on peut traverser l'association.
A âââ B signifie : A connaĂźt B, mais B ne connaĂźt pas A.
Par défaut (pas de flÚche) : la navigabilité est dans les deux sens.
Le diagramme d'objets montre des instances concrÚtes à un moment donné.
Diagramme de classes = les RĂGLES / Diagramme d'objets = les FAITS
Il montre comment les objets discutent entre eux dans le temps â comme un script de film đŹ
Imagine un groupe WhatsApp đ± : chaque personne envoie des messages, et tu vois l'ordre dans lequel ils arrivent (qui a parlĂ© en premier, en deuxiĂšme...). Le diagramme de sĂ©quence, c'est exactement ça !
| Type | FlĂšche | Description | Exemple đ§ |
|---|---|---|---|
| Synchrone | ââ¶ (pleine) | L'envoyeur attend la rĂ©ponse avant de continuer | Tu appelles quelqu'un au tel et tu attends qu'il dĂ©croche |
| Asynchrone | â> (ouverte) | L'envoyeur continue sans attendre | Tu envoies un SMS et tu continues ta vie |
| Retour | - - - > (pointillé) | La réponse à un message synchrone | La personne te rappelle avec la réponse |
| Création | - -«create»- -> | Crée un nouvel objet | Tu crées un nouveau groupe WhatsApp |
| Destruction | â sur la ligne de vie | DĂ©truit un objet | Tu supprimes le groupe |
| RĂ©cursif | FlĂšche qui revient sur soi | L'objet s'envoie un message Ă lui-mĂȘme | Tu te parles tout seul đ€· |
Ce sont des boĂźtes rectangulaires qui entourent des messages pour montrer des conditions, boucles, etc.
Comme un if/else. Divisé en 2 zones par une ligne pointillée. Chaque zone a sa condition entre [crochets].
Comme un while. RépÚte les messages tant que la condition est vraie.
Comme un if sans else. Le fragment est exécuté seulement SI la condition est vraie.
Fait référence à un autre diagramme de séquence. Utile pour ne pas surcharger le schéma.
Voici comment aborder ce type d'exercice pas Ă pas :
Ce sont des acteurs (bonhommes allumettes). Ils sont extérieurs au systÚme.
L'administrateur crée le championnat et génÚre les parties.
Les participants s'inscrivent et jouent.
Participants : Admin, :ChampionnatDEchecs, :Joueur1, :Joueur2
â ïž CohĂ©rence : L'opĂ©ration inscriptionJoueur retourne un integer (le numĂ©ro) â exactement comme dans le diag. de classes !
Astuce : Utilise un fragment loop pour les coups !
Le message vĂ©rifierMat() est un message rĂ©cursif (l'objet :Partie s'appelle lui-mĂȘme).
C'est le jumeau du diagramme de sĂ©quence â mĂȘme info, prĂ©sentation diffĂ©rente.
Imagine que au lieu de lire les messages d'un groupe WhatsApp de haut en bas (séquence), tu vois tous les participants reliés en réseau avec des numéros sur les messages. C'est le diagramme de communication !
| Format | Signification | Exemple |
|---|---|---|
4 : méthode() | Message simple numéro 4 | 4 : Afficher(x,y) |
3.3.1 : mĂ©thode() | Message imbriquĂ© (3â3.3â3.3.1) | 3.3.1 : Afficher(x,y) |
4.2 : ret := méthode() | Avec valeur de retour | 4.2 : ùge := Calculer(date) |
[condition] 6 : méthode() | Message conditionnel | [age>=18] 6.2 : Voter() |
1 * : méthode() | Message itéré (boucle) | 1 * : Laver() |
Il décrit la vie interne d'un objet : dans quel état il est, quel événement arrive, et dans quel état il part.
Imagine un feu tricolore. Il peut ĂȘtre vert, puis orange, puis rouge. Il ne change pas au hasard : un Ă©vĂ©nement comme after(25s) dĂ©clenche le passage Ă l'Ă©tat suivant.
| ĂlĂ©ment | Notation | Explication simple |
|---|---|---|
| Ătat | Rectangle arrondi | L'objet reste ici jusqu'Ă ce qu'un Ă©vĂ©nement arrive. |
| Ătat initial | Point noir â | Le point de dĂ©part de la vie de l'objet. |
| Ătat final | Cible â | La fin du cycle de vie. |
| Transition externe | FlĂšche Ă©tat A â Ă©tat B | Elle change l'Ă©tat actif. |
| ĂvĂ©nement | evenement() | Le bouton qui dĂ©clenche le changement. |
| Garde | [condition] | La porte ne s'ouvre que si la condition est vraie. |
| Action | / action() | Ce qu'on fait pendant la transition. |
| Type | Syntaxe | Quand l'utiliser ? | Exemple |
|---|---|---|---|
| call | nomEvenement(params) | Quand une méthode est appelée | payer(montant) |
| signal | signal(params) | Quand un signal externe arrive | alarmeDeclenchee() |
| change | when(condition) | Quand une condition devient vraie | when(stock == 0) |
| after | after(duree) | Quand un délai est écoulé depuis l'entrée dans l'état | after(10s) |
événement(paramÚtres) [garde] / actionvalider() [panierNonVide] / créerFacture()
Parfois l'objet fait quelque chose dans l'état sans forcément changer d'état.
| Mot-clé | Moment | Image simple |
|---|---|---|
entry | Juste à l'entrée de l'état | Tu entres dans une piÚce et tu allumes la lumiÚre. |
do | Pendant que l'objet reste dans l'état | Tu restes dans la piÚce et tu travailles. |
exit | Juste avant de quitter l'état | Tu sors et tu éteins la lumiÚre. |
include | Appel d'une sous-machine d'états | Tu délÚgues un mini-cycle de vie à un autre schéma. |
Elle quitte l'état source et active un autre état. C'est le cas le plus courant.
Elle exécute une action sans changer l'état actif. Pratique pour éviter des faux états.
Point de choix = losange. Il choisit une branche selon les gardes [condition].
Point de jonction = petit cercle. Il sert surtout Ă partager des morceaux de transition pour rendre le dessin plus compact.
Un état composite contient des sous-états. Exemple : Commande en traitement peut contenir Préparation, ContrÎle, Emballage.
On l'utilise quand un Ă©tat est trop gros pour ĂȘtre expliquĂ© par une seule boĂźte.
L'Ă©tat historique mĂ©morise le dernier sous-Ă©tat actif. C'est comme reprendre un jeu exactement lĂ oĂč on l'a laissĂ©.
Il montre le déroulement d'un travail : actions, décisions, boucles, parallélisme et responsabilités.
Le diagramme d'activités est une variante du diagramme d'états, mais il met l'accent sur les actions. Quand une action se termine, le flot passe automatiquement à la suivante.
| NĆud | Notation | RĂŽle |
|---|---|---|
| Action | Rectangle arrondi | Une étape exécutable : calculer, vérifier, envoyer... |
| Objet | Rectangle | Un objet produit ou consommé par une action. |
| Décision | Losange | Choisit une branche selon une condition. |
| Fusion | Losange | Rassemble plusieurs branches alternatives. |
| Bifurcation | Barre épaisse | Lance plusieurs flots en parallÚle. |
| Union | Barre épaisse | Attend que les flots parallÚles se rejoignent. |
| Initial | Point noir â | DĂ©but de l'activitĂ©. |
| Final d'activitĂ© | Cible â | Termine toute l'activitĂ©. |
| Final de flot | Cercle avec X | Termine seulement un flot, pas les autres. |
Un couloir indique qui est responsable de chaque action : client, systĂšme, banque, service livraison...
[oui], [non], [stock>0].
| Tu veux montrer... | Choisis | Pourquoi |
|---|---|---|
| Les étapes d'un processus avec conditions | Activité | Le flot de travail est le plus important. |
| Les messages entre objets dans le temps | Séquence | L'ordre chronologique des appels est le plus important. |
| La vie interne d'un objet | Ătats | Les Ă©tats stables et les Ă©vĂ©nements sont le plus important. |
Ces vues montrent l'architecture : comment le logiciel est dĂ©coupĂ© et oĂč il est installĂ©.
Un composant est une brique logicielle autonome qui fournit un service précis. Il cache ses classes internes et montre seulement ses interfaces.
| ĂlĂ©ment | Signification | Ă retenir |
|---|---|---|
| Interface offerte | Service fourni par le composant | Notation "lollipop" : petit cercle. |
| Interface requise | Service dont le composant a besoin | Notation "socket" : demi-cercle. |
| Port | Point de connexion sur le bord du composant | Permet de changer l'intérieur sans casser les clients externes. |
| Connecteur «delegate» | Relie un port externe à un élément interne | Il délÚgue le travail vers l'intérieur du composant. |
| Dépendance | Un composant utilise un autre composant | FlÚche pointillée orientée vers ce dont on dépend. |
Le diagramme de déploiement montre la réalité physique : serveurs, postes clients, appareils, connexions réseau, et artefacts installés dessus.
| Relation | Syntaxe | Explication |
|---|---|---|
| DĂ©ploiement direct | Artefact dans le nĆud | On dessine le fichier Ă l'intĂ©rieur du serveur ou poste. |
| «support» | Composant â nĆud | Montre qu'un nĆud supporte un composant. |
| «manifest» | Artefact â Ă©lĂ©ment modĂšle | Montre qu'un fichier implĂ©mente un composant ou une classe. |
| Connexion | Ligne entre nĆuds | Montre une communication physique ou rĂ©seau. |
| Concept | C'est quoi ? | Exemple |
|---|---|---|
| Classe | Plan d'un objet dans le code | Commande, Client, Facture |
| Composant | Bloc logiciel qui fournit des services | GestionCommande, Paiement |
| Artefact | Fichier concret produit ou utilisé | app.jar, schema.sql, facture.pdf |
| NĆud | Machine ou environnement d'exĂ©cution | Serveur web, PC client, JVM, conteneur |
Les stratĂ©gies qui font la diffĂ©rence entre 10/20 et 18/20 đȘ
| La question demande... | â Diagramme | Indice dans l'Ă©noncĂ© |
|---|---|---|
| "Qui fait quoi ?" | Cas d'Utilisation | "les acteurs", "les fonctionnalités", "les besoins" |
| "De quoi est composé le systÚme ?" | Classes | "les entités", "la structure", "les données" |
| "Dans quel ordre ça se passe ?" | Séquence | "le scénario", "le déroulement", "les échanges" |
| "Comment les objets coopÚrent ?" | Communication | "la coopération", "les liens entre objets" |
| "Quels Ă©tats traverse un objet ?" | Ătats-Transitions | "Ă©tat", "cycle de vie", "Ă©vĂ©nement", "aprĂšs X secondes" |
| "Quelles étapes suit un processus ?" | Activités | "workflow", "si/sinon", "parallÚle", "responsable" |
| "Quels modules logiciels composent l'application ?" | Composants | "interface offerte/requise", "service", "dépendance" |
| "Sur quelles machines tourne le systÚme ?" | Déploiement | "serveur", "poste client", "artefact", "réseau" |
| "Comment passer des besoins au code ?" | Démarche UML | "besoins", "analyse", "conception", "itération" |
La derniĂšre page Ă relire avant l'exam đ„
| đ€ Cas d'Utilisation | đ§± Classes | đ SĂ©quence | đ Communication | |
|---|---|---|---|---|
| Type | Dynamique (fonctionnel) | Statique (structurel) | Dynamique (temporel) | Dynamique (spatial) |
| Question | Qui fait quoi ? | De quoi c'est fait ? | Dans quel ordre ? | Qui parle Ă qui ? |
| ĂlĂ©ments clĂ©s | Acteurs, Cas (ellipses), Relations | Classes, Attributs, Associations | Objets, Messages, Temps | Objets, Liens, Messages numĂ©rotĂ©s |
| PiÚge #1 | Include vs Extend | Agrégation vs Composition | Oublier les retours | Numérotation incorrecte |
| Source TD | TD1 | TD2 | TD3 | Cours 4 |
| đŠ Ătats | đ€ïž ActivitĂ©s | đ§© Composants | đ„ïž DĂ©ploiement | đ§ DĂ©marche | |
|---|---|---|---|---|---|
| Type | Dynamique interne | Dynamique procédural | Statique architectural | Physique | Processus de modélisation |
| Question | Quels Ă©tats ? | Quelles Ă©tapes ? | Quels modules ? | OĂč ça tourne ? | Dans quel ordre travailler ? |
| ĂlĂ©ments clĂ©s | Ătats, transitions, Ă©vĂ©nements, gardes | Actions, dĂ©cisions, fork/join, swimlanes | Composants, interfaces, ports, dĂ©pendances | NĆuds, artefacts, connexions, manifest | Besoins, analyse, conception, itĂ©rations |
| PiÚge #1 | Mettre un processus entier au lieu d'un objet | Oublier les gardes sur les branches | Confondre interface offerte et requise | Confondre composant et artefact | Traiter UML comme une méthode complÚte |
| Source | Cours 5 | Cours 5 | Cours 6 | Cours 6 | Cours 7 |