Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| public:mco-2:paradigme_objet_et_modelisation_uml [2016/02/03 15:42] – fbrucker | public:mco-2:paradigme_objet_et_modelisation_uml [2016/02/11 22:13] (Version actuelle) – [Visibilité] edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Paradigme objet et modélisation UML ====== | ||
| + | Nous allons présenter rapidement les différents concepts de la conception/ | ||
| + | |||
| + | ===== Les objets et les classes ===== | ||
| + | |||
| + | On ne manipule que des choses réelles, pour nous des **Objets**. Nos programmes (ou processus, projet, données, etc) consisteront à créer des objets et les faire interagir ensemble. En revanche, ces objets vont être décrits par des classes qui regroupent leurs propriétés. | ||
| + | |||
| + | Exemple : [[https:// | ||
| + | |||
| + | < | ||
| + | Tout objet fait parti d'une classe. La classe la plus générale étant souvent la classe //Object//. | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Les classes sont décrite avec leurs méthodes (ce qu'ils font) et attributs : | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | title Chat | ||
| + | |||
| + | class Chat { | ||
| + | +bruit miaou() | ||
| + | } | ||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | Pour les diagrammes UML, on utilisera [[http:// | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Notation & UML ==== | ||
| + | |||
| + | === Notations === | ||
| + | |||
| + | On écrira les noms en [[https:// | ||
| + | |||
| + | De plus : | ||
| + | * les classes commencent par une Majuscule, | ||
| + | * les objets commencent par une minuscule, | ||
| + | |||
| + | === UML === | ||
| + | |||
| + | * un objet est une boite dont le titre est **nomObjet : NomClasse** : ci-dessus //lolCat// est une instance de la classe //Chat//. | ||
| + | * les méthodes sont décrites par leur type de retour, leur nom et entre parenthèse leurs paramètres : ici la méthode //miaou// de la classe Chat ne prend pas de paramètre et rend un objet //bruit//. | ||
| + | |||
| + | ===== Relations entre les classes ===== | ||
| + | |||
| + | On voit bien que les différentes classes d' | ||
| + | |||
| + | Nous avons à notre disposition essentiellement deux façons de regrouper les classes : | ||
| + | * par ce qu' | ||
| + | * par ce qu' | ||
| + | |||
| + | ==== Ce qu'ils sont ==== | ||
| + | |||
| + | On regroupe les classes par les caractéristiques qu' | ||
| + | Avec l' | ||
| + | |||
| + | Avec nos animaux : | ||
| + | * ces classes sont des particularités d'un concept plus général : l'" | ||
| + | * ici, mais ce n'est pas toujours le cas, il n'y a pas vraiment d' | ||
| + | * la seule chose qui les relie c'est qu' | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | title Animaux | ||
| + | |||
| + | abstract class Animal { | ||
| + | +void lol() | ||
| + | } | ||
| + | |||
| + | class Chat | ||
| + | class Chien | ||
| + | class Alpaga | ||
| + | |||
| + | Animal <|-down- Chat | ||
| + | Animal <|-down- Chien | ||
| + | Animal <|-down- Alpaga | ||
| + | |||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | === UML === | ||
| + | |||
| + | La relation d' | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | |||
| + | class 4x4 | ||
| + | class Voiture | ||
| + | |||
| + | Voiture | ||
| + | |||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | ==== Ce qu'ils font ==== | ||
| + | |||
| + | Souvent plusieurs objets de natures très différentes //font// les même choses. Ces actions communes sont liées par une **interface**. | ||
| + | |||
| + | Ainsi, un chat et un goéland peuvent tous deux griffer : | ||
| + | * mais pas de la même manière (l'un a des griffes, l' | ||
| + | * cela ne peut être une composante d' | ||
| + | * les faire hériter d'un ancêtre commun ayant des griffes n'est pas biologiquement pertinent. | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | title Interface | ||
| + | |||
| + | |||
| + | class Animal | ||
| + | |||
| + | interface Griffable { | ||
| + | +outch griffer() | ||
| + | } | ||
| + | |||
| + | class Chat | ||
| + | class Goéland | ||
| + | |||
| + | Animal <|-down- Chat | ||
| + | Animal <|-down- Goéland | ||
| + | Animal <|-down- Escargot | ||
| + | |||
| + | Griffable <|-up.. Chat | ||
| + | Griffable <|-up.. Goéland | ||
| + | |||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | |||
| + | On dit qu'un objet **implémente une interface** s'il possède toute les méthodes de l' | ||
| + | |||
| + | === UML === | ||
| + | |||
| + | La relation d' | ||
| + | * "un trait pointillé avec une flèche en triangle vide", | ||
| + | * "un trait plein avec un rond vide" : utilisé pour rappeler un nom d' | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | |||
| + | class 4x4 | ||
| + | class Scooter | ||
| + | |||
| + | interface SeGarerNimporteOù { | ||
| + | void surLeTrotoir() | ||
| + | void surUnPassageClouté() | ||
| + | } | ||
| + | |||
| + | SeGarerNimporteOù | ||
| + | |||
| + | Scooter --() SeGarerNimporteOù | ||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | ===== Attributs, méthodes et visibilité ===== | ||
| + | |||
| + | ==== Visibilité ==== | ||
| + | |||
| + | Les méthodes et attributs d'une classe peuvent avoir une visibilité limité : | ||
| + | * **public** : tout le monde peut voir et utiliser la méthode/ | ||
| + | * rond vert (plein pour les méthodes, vide pour les attributs) | ||
| + | * signe **+** | ||
| + | * **protégé** : la classe et ses descendants peuvent voir et utiliser la méthode/ | ||
| + | * losange orange (plein pour les méthodes, vide pour les attributs) | ||
| + | * signe **#** | ||
| + | * **privé** : uniquement la classe peut voir et utiliser la méthode/ | ||
| + | * carré rouge (plein pour les méthodes, vide pour les attributs) | ||
| + | * signe **-** | ||
| + | * **package** : les classes du package peuvent voir et utiliser la méthode/ | ||
| + | * triangle bleu (plein pour les méthodes, vide pour les attributs) | ||
| + | * signe **~** | ||
| + | |||
| + | On essaiera dans la mesure du possible de protéger les attributs d'une classe pour qu'ils ne soient pas modifiés intempestivement (portée privé ou protected). | ||
| + | |||
| + | C'est le principe d' | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | |||
| + | title Visibilité des attributs/ | ||
| + | |||
| + | class Visibilité { | ||
| + | +attribut: public; | ||
| + | #attribut: protégé; | ||
| + | -attribut: privé; | ||
| + | ~attribut: package; | ||
| + | | ||
| + | +méthode: public(); | ||
| + | #méthode protégée(); | ||
| + | -méthode: privé(); | ||
| + | ~méthode: package(); | ||
| + | |||
| + | } | ||
| + | |||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | ==== Composition et agrégation ==== | ||
| + | |||
| + | Les différents types sont souvent des objets de classes que l'on a créé nous même. Selon que l'on a crée l' | ||
| + | |||
| + | {{: | ||
| + | < | ||
| + | @startuml | ||
| + | |||
| + | title Composition et agrégation | ||
| + | |||
| + | class Colors | ||
| + | class Card | ||
| + | class Deck | ||
| + | |||
| + | Card o-- Colors : agrégation | ||
| + | Card *-up- Deck : composition | ||
| + | |||
| + | @enduml | ||
| + | </ | ||
| + | |||
| + | ==== Méthodes de classes ==== | ||
| + | |||
| + | |||
| + | On **souligne** les méthodes et attributs de classes (mot clé " | ||
| + | |||
| + | Leur intérêt est (au moins) double : | ||
| + | * permet de créer des objets de la classe en question ([[https:// | ||
| + | * des méthodes d'une classe utilisée seulement pour regrouper des fonctions/ | ||
| + | |||
| + | Une [[https:// | ||
| + | |||
| + | ===== Pour aller plus loin en UML ===== | ||
| + | |||
| + | ==== Utilisation d'UML ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Utilisé un petit peu partout, lorsque l'on a besoin de catégoriser/ | ||
| + | * informatique, | ||
| + | * définition et gestion de projets, | ||
| + | * création de services, brainstorming, | ||
| + | * ... | ||
| + | |||
| + | Très en vogue au début des années 2000, il est moins utilisé mais reste un bon outil de communication et de modélisation des données. | ||
| + | |||
| + | ==== Divers ressources sur le net ==== | ||
| + | |||
| + | === Introduction et résumé === | ||
| + | |||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | |||
| + | === Série de cours === | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | === Études cas UML === | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||