name: inverse layout: true class: center, middle, inverse --- # JAVA - Cours 1 ## Le diagramme des classes ## Inès de Courchelle  --- layout: false # Introduction ## Objectif Avant de coder, Il faut réaliser une première phase d'analyse (TOUJOURS) ## Comment ? Avec UML, et plus particulièrement le diagramme de classes ! ## Pourquoi ? Et bin, java est basé sur le diagramme de classes UML !
--- # Rappel - Analyse très importante
--- # UML 1/2 ## Qu'est ce que c'est ? - United Modeling Language - Langage de modélisation Unifier (ce n'est pas une méthode !) - Discipline du Génie logiciel ## Pourquoi ? - Analyser les besoins - Diminuer les coûts de maintenance et d'évolution - Vérifier la faisabilité - ... ## Plusieurs diagrammes ! - Un qui nous interresse particulièrement dans le cadre de java ! - Le plus important dans la modélisation orientée - Le seul obligatoire pour faire du JAVA --- # UML 2/2
--- # Une classe ## C'est quoi ? - C'est une structure de données - Cela peut être un bien, une action, un acteur du système, un flux - Proche d'une représentation MCD ## Elle sert à quoi ? - Définir une structure pour un objet - Donner un état et des actions à un objet --- # Une classe ## Comment est-elle representée ?
*Attention le nom d'une classe commence toujours par une majuscule !* --- # Un objet ## c'est quoi ? - C'est une spécialisation d'une classe - On dit qu'un objet est une instance d'une classe ## Il sert à quoi ? Spécialiser la classe à travers un état ## Comment est-il représenté ?
--- # Les opérations ## Définition - La déclaration d'une opération contient les paramètres + leur type et le type de la valeur de retour - Une signature doit être unique (même nom et même paramètre) - Les opérations permettent de modifier, accéder, supprimer, ou encore ajouter un état à un objet .pull-left[ .under[Correct]
] .pull-right[ .underR[Incorrect]
] --- # Exemple concret classe vs objet ## Pokemon
--- # Visualisation des objets ## Note - L'approche objet nous permet de passer à l'étape de programmation - Ce n'est pas de l'UML - C'est une aide pour nous aider à representer notre système
--- # Dans un système réél ## Modélisation - C'est le diagramme de Classe(S) avec un S - c-à-d qu'il va y avoir plusieurs classes que l'on va relier entre elles ## Mais comment ? avec des relations (plusieurs types)
--- # Exemple 1/2 ## Diagramme de classes
--- # Exemple 2/2 ## Diagramme de classes
--- # Les différentes relations ## ET C'EST PARTI ! - Association - Agrégation - Composition - Généralisation (héritage)
--- # Associations ## Définition Une association traduit un lien/relation entre deux classes : ## Exemple 1
--- # Associations ## Exemple 2
## Mais il manque quelques choses ? Les cardinalités ! --- # Les cardinalités 1/2 ## Exemple 1
- Un Skate est ridé par une et une seule Personne - Une Personne peut rider un ou plusieurs Skate ## Attention *Attention malgré les similitudes avec le MCD il y a des différences :* .pull-left[ | MCD | UML | |-----|------| | 1,N | 1..* | | 0,N | 0..* | ] .pull-right[ Le sens de lecture est différent ! ] --- # Les cardinalités 2/2 ## Exemple 2
- Une Etagère peut contenir un ou plusieurs Livre - Un Livre peut être sur une et une seule Etagère ## Attention *Attention malgré les similitudes avec le MCD il y a des différences :* .pull-left[ | MCD | UML | |-----|------| | 1,N | 1..* | | 0,N | 0..* | ] .pull-right[ Le sens de lecture est différent ! ] --- # Agrégation ## Définition Une agrégation est une association permettant d'associer une classe à une autre la différence : - pas de nom à l'association, on dit par défaut : << composer de >> - pas besoin de spécifier les cardinaltés d'un côté ## Exemple
--- # Composition Une composition est une association permettant d'associer une classe à une autre la différence : - pas de nom à l'association, on dit par défaut : << composer de >> - pas besoin de spécifier les cardinaltés d'un côté .under[Exemple]
.underR[ça ressemble beaucoup à une agrégation] --- # Composition VS association ## Explication Est ce que si je détruis le livre les chapitres existent toujours ?
Est ce que si je détruis la voiture les roues existent toujours ?
.under[Attention] - c'est à l'analyste de faire ce choix sémantique autour de la donnée ! - une influence dans le reste de l'analyse et de la programmation ! --- # Généralisation 1/2 *Appeler aussi héritage !* - .under[Ça sert à quoi ?] - à simplifier la représentation graphique - à simplifier le code - .under[Comment ?] une flêche avec un sens de lecture - .under[Quand ?] généraliser l'info pour pouvoir la spécifier plus tard .under[représentation] La classe fille hérite de toutes les infos (attributs + opérations) de la classe mère
--- # Généralisation 2/3 ## Exemple 1
--- # Généralisation 3/3 ## Exemple 2
**Vers l'infini et ...**
--- # Accessibilité 1/3 ## Un élement (attribut ou opération) peut être - .underG[private] - **\-** - Uniquement accessible par la classe contenant l'élément - .underG[protected] - **#** - Uniquement accessible par la classe contenant l'élément et ses déscendants - .underG[public] - **+** - Accessible par toutes les classes - .underG[package] - **~** - Accessible par les classes appartenant au même package --- # Accessibilité 2/3 ## Règles - Tous les attributs d'une classe doivent être privés à part cas particuliers, ou besoin du client - Les méthodes permettant de récupérer/modifier des attributs doivent être public
## Ça paraît logique - si tous les attributs sont privés, - alors ils nous faut des opérations public nous permettant d'y acceder. --- # Accessibilité 3/3 ## Exemple
--- # Formalisme Attributs 1/2 ## Attributs ```java Acess nomAttribut type ``` ```java - nom : String ``` ## Opérations ```java Acess nomOperation (Type1 parame1, Type2 param2) : type de retour ``` #### S'il n'y a pas de retour on peut mettre void ! ```java + manger(Integer nbFois) : void - courir(): Integer ``` --- # Formalisme Attributs 2/2 ## Exemple
--- # Classe d'association 1/2 ## Définition Association permettant de véhiculer de l'information relative à deux classes ## Exemple 1
La quantité dépend à la fois du gâteau et de l'ingrédient --- # Classe d'association 2/2 ## Exemple 2
Souvent les notions de temps et de date à l'intérieur ! --- # Association n-aire 1/2 ## Comment ? - Il est possible en uml de relier n-classes ensemble - Il faut rajouter un losange central qui récupérera le lien ! ## Exemple 1
--- # Association n-aire 2/2 ## Exemple 2
--- # A vous de jouer !