name: inverse layout: true class: center, middle, inverse --- # JAVA - Cours 1 ## Le diagramme des classes ## Inès de Courchelle ![image](../img/CY-tech.png) --- layout: false # Introduction .under[Objectif] Avant de coder, Il faut réaliser une première phase d'analyse (TOUJOURS) .under[Comment ?] Avec UML, et plus particulièrement le diagramme de classes ! .under[Pourquoi ?] Et bin, java est basé sur le diagramme de classes UML !
--- # Rappel - Analyse très importante
--- # UML 1/2 - .under[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 - .under[Pourquoi ?] - Analyser les besoins - Diminuer les coûts de maintenance et d'évolution - Vérifier la faisabilité - ... - .under[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 - .under[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 - .under[Elle sert à quoi ?] - Définir une structure pour un objet - Donner un état et des actions à un objet - .under[Comment elle est representé ?]
*Attention le nom d'une classe commence toujours par une majuscule !* --- # Un objet - .under[c'est quoi ?] - C'est une spécialisation d'une classe - On dit qu'un objet est une instance d'une classe - .under[Il sert à quoi ?] Spécialiser la classe à travers un état - .under[Comment il est représenté ?]
--- # Les opérations - 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
--- # Visualisation des objets - 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 - 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 .under[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)
--- # Association Une association traduit un lien/relation entre deux classes : .under[Exemple 1]
.under[Exemple 2]
**Mais il manque quelques choses ?** Les cardinalités ! --- # Les cardinalités 1/2 .under[Exemple 1]
- Un Skate est ridé par une et une seule Personne - Une Personne peut rider un ou plusieurs Skate *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 .under[Exemple 2]
- Une Etagère peut contenir un ou plusieurs Livre - Un Livre peut être sur une et une seule Etagère *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 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é .under[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 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 .under[Exemple 1]
--- # Généralisation 3/3 .under[Exemple 2]
**Vers l'infini et ...**
--- # Accessibilité 1/3 .under[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 .under[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
.under[Ç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
--- # Formalisme Attributs 1/2 Soyons un peu plus précis dans notre Analyse ! .under[Attributs] : ```java Acess nomAttribut type ``` ```java - nom : String ``` .under[Opérations] : ```java Acess nomOperation (Type1 parame1, Type2 param2) : type de retour ``` .underG[S'il n'y a pas de retour on peut mettre void !] ```java + manger(Integer nbFois) : void - courir(): Integer ``` --- # Formalisme Attributs 2/2 .under[exemple]
--- # Classe d'association 1/2 .under[Définition] Association permettant de véhiculer de l'information relative à deux classes .under[Exemple 1]
La quantité dépend à la fois du gâteau et de l'ingrédient --- # Classe d'association 2/2 .under[Exemple 2]
Souvent les notions de temps et de date à l'intérieur ! --- # Association n-aire 1/2 - Il est possible en uml de relier n-classes ensemble - Il faut rajouter un losange central qui récupérera le lien ! .under[Exemple 1]
--- # Association n-aire 2/2 .under[Exemple 2]
--- # A vous de jouer !