Je débute en UML et je vais réaliser un projet modélisation et C++ à partir de demain.
Les 2 points ci-dessous restent assez flous dans ma tête pour le diagramme de classes et malgré des recherches dans différents ouvrages et sites Web, je ne trouve rien de vraiment clair, net et précis.
1/Héritage multiple
Pour l'héritage simple, pas de problème particulier : une généralisation est une relation de type "sorte-de". Jusque là, c'est bon.
En revanche, avec l'héritage multiple, ça se complique au niveau représentation.
Ici, on a une généralisation, pas de soucis :
En revanche, ici on a pas du tout une relation "sorte-de". Mensualisé et horaire sont des sous-classes qui représentent des modes de rémunération, d'où la classe abstraite Salarié qui n'aura pas d'instances directes.
Ici
on est dans la relation "sorte-de".
Ici transmission multiple :
Si j'ai bien compris, on a 2 choses à ne pas confondre : la généralisation avec "sorte de" (héritage simple) et l'héritage multiple où il y a transmission multiple aux sous-classes.
2/Dépendance
J'ai lu qu'il y a plusieurs types de dépendance et qu'une dépendance est utilisée pour représenter une relation entre concepts et non pas directement entre classes (pas d'héritage donc).
Parmi les dépendances, on a la réalisation pour représenter notamment une implémentation d'interface :
Contrairement à une dépendance simple, si j'ai bien compris, la réalisation n'est pas temporaire.
ex : Une imprimante peut imprimer à un moment une page d'où concept temporaire donc dépendance simple
ex : Envoi d'une commande, une interface avec sauvegarde... va être implémentée d'où concept non temporaire d'où réalisation
En revanche, je ne comprends pas trop ce genre de réalisation qui ne concerne pas une interface ou un concept :
j'espère ne pas répondre trop tard, je viens seulement de voir le message.
généralisation
Je ne suis pas d'accord avec plusieurs siagrammes d'heritage, et il est possible que tes problemes viennent de là.
Ainsi l'heritage de la voiture n'a aucun sens, une voiture ne se comporte pas comme une porte, par contre une voiture as des portes. Si tu remplaces les generalization pas une association, là le diagramme est correcte.
De même pour le diagramme avec salarie est limite limite, le fait d'etre mensualise ou au tarif horaire est plus une propriete d'un salarie. Cependant c'est nettement moins flagrant que pour la voiture.
Bref tu peux toujours comprendre la generalisation, meme multiple, via "sorte de" (ce que cache l'exemple avec la voiture).
dépendance
contrairement a la generalisation qui se fait entre objet du meme type (sans jeu de mot ), la dépendance peut se faire entre different type d'objets.
la realisation est un cas particulier de generalisation, ce n'est pas une dependance au sens au on l'entend , meme si tout heritage contient bien evidemment un dependance. Je dis cela car si tu penses que dependre est un cas particulier d'heritage alors tu ne feras que des dependance entre objets du meme type.
une interface est un contrat (non implemente), une classe concrete qui herite d'une interface et implemente le contrat le 'realise', et pour etre plus clair on utilise donc une 'realisation'.
Enfin, il faut bien voir que d'un cote il y a UML, et de l'autres les langages de programmation, par exemple C++. Il y a une intersection non nulle entre les deux, mais le but des deux n'est pas le meme, et leur histoire non plus. UML est un langage de modelisation, C++ un langage de realisation. Tu ne dois donc pas te faire une idee de ce qu'est UML en partant de C++ et inversement.