Vidéo: UML Diagrammes de Cas d'utilisation Tutoriel 2024
Il est naturel de classer les objets dans des catégories et d'organiser les catégories en sous-catégories. Si vous cherchez un endroit où vivre, vous vous trouvez à classer une unité d'habitation comme une maison, un appartement, une maison en rangée, une copropriété, un manoir, et ainsi de suite. Les maisons peuvent, à leur tour, être davantage organisées par des styles tels que ranch, split-level, colonial, et saltbox. UML vous fournit une notation pour capturer ces types de classifications - également connues sous le nom de généralisation et spécialisation - et les utilise comme modélisateur et programmeur.
Certains développeurs orientés objet vont faire de grands efforts pour économiser un peu de travail. Quand ils peuvent modéliser quelque chose et le réutiliser, ils sont intéressés. S'ils peuvent écrire une méthode (code de programme pour une opération) pour une classe seulement une fois et l'utiliser plusieurs fois, alors inscrivez-les pour une productivité plus élevée. Si vous voulez gagner du temps en spécifiant une fois les attributs et les opérations, puis en les réutilisant plusieurs fois, lisez la suite.
Lorsque vous définissez des classes, vous pouvez remarquer que certaines classes ont les mêmes attributs ou les mêmes opérations. Lorsque c'est le cas, vous placez ces fonctionnalités communes (attributs, opérations, etc.) dans une classe plus générique appelée superclasse . Les classes qui partagent les caractéristiques communes sont appelées sous-classes de la superclasse. Par exemple, la longueur du matériel enregistré sur une bande vidéo, une bande audio, un disque compact ou un film cinématographique est un attribut des quatre types de supports enregistrés. Ces classes peuvent également partager d'autres attributs, tels que leurs dimensions physiques et la date à laquelle chacun a été utilisé pour effectuer un enregistrement. Dans ce cas, la superclasse serait RecordedMedia, les sous-classes seraient Videotape, Audiotape, CompactDisc et MovieFilm, et certains attributs partagés pourraient inclure recordedLength et totalLength.
Ce processus de recherche d'attributs ou d'opérations similaires entre classes est connu sous le nom de généralisation . Par exemple, vous généraliser l'attribut recordLength dans une classe plus générique appelée RecordedMedia. Le processus pour montrer une généralisation en UML est simple:
1. Identifiez les sous-classes.
Recherchez des classes ayant les mêmes attributs et / ou opérations. Ces classes sont vos sous-classes.
2. Créer une superclasse.
Fournir une superclasse pour contenir les attributs communs et / ou les opérations des sous-classes. Donnez à la superclasse un nom qui catégorise toutes les sous-classes. Placer la superclasse au-dessus des sous-classes dans le diagramme facilite la lecture mais n'est pas nécessaire.
3. Ajoutez des fonctionnalités communes à la superclasse.
Supprimez les attributs communs et les opérations des sous-classes et placez-les (une fois) dans la superclasse.
4. Dessinez une relation de généralisation.
Vous tracez une ligne de généralisation de chaque sous-classe vers la superclasse. En UML, la ligne de généralisation est représentée par une ligne continue avec une pointe de flèche vide à l'extrémité de la superclasse. En UML, une ligne avec la pointe de flèche vide qui connecte une sous-classe à une superclasse s'appelle une relation de généralisation.
Après avoir créé une super-classe avec les caractéristiques communes telles que les attributs et les opérations, les sous-classes héritent de ces entités de la super-classe. De cette façon, il vous suffit d'écrire les caractéristiques communes une fois dans la superclasse au lieu de plusieurs fois dans chacune des sous-classes.
Vous pouvez dire si vous avez une généralisation en regardant la langue que vous (ou d'autres) utilisez pour décrire la relation entre les classes. Notez que dans la description des supports enregistrés et de ses différents types tels que la bande vidéo plus haut dans cette section, l'expression "quatre types de supports enregistrés" est apparue. Si vous vous trouvez en utilisant des expressions telles que «type de» ou «type de», alors vous avez une généralisation sur vos mains.
Supposons qu'un de vos clients se soucie de garder la trace des documents dans une archive. Ce client a accumulé différents types de supports d'enregistrement tels que des bandes vidéo et des bandes audio. En tant que modélisateurs, vous devez capturer les différences entre ces médias ainsi que leurs similitudes. Le diagramme de la figure 1 montre les débuts de plusieurs généralisations, organisées dans une hiérarchie d'héritage .
Figure 1: Hiérarchie d'héritage simple.
Les développeurs utilisent le terme de généralisation ou d'héritage pour désigner le même concept de réutilisation des attributs et des opérations partagés que vous affichez dans une superclasse et que vous réutilisez dans des sous-classes. La généralisation fait référence au concept de généralisation des spécificités (les sous-classes) au générique (la superclasse). L'héritage fait référence à l'effet de la généralisation sur les sous-classes.
Lorsque vous voyez une relation généralisation entre classes, sa signification est très différente de celle d'une relation association entre classes. Une association est finalement une relation parmi plusieurs objets - certaines instances d'une classe ont une relation (lien) avec les instances de l'autre classe. Dans une relation de généralisation entre classes , la relation concerne vraiment les classes. Le mieux que vous puissiez dire est qu'un objet créé à partir d'une sous-classe contient toutes les caractéristiques de la sous-classe et de la superclasse.
Vous n'avez qu'un objet d'une classe dans une relation de généralisation. Même si vous montrez deux classes, la sous-classe et la super-classe, vous n'avez qu'un objet créé. Vous pouvez penser à un objet de la classe Videotape étant également un objet de la classe RecordedMedia en raison de l'héritage. La figure 2 montre un objet créé à partir de la classe Videotape avec tous ses attributs.(L'instance d'une classe est représentée comme un symbole d'objet.) Vous n'avez pas deux objets différents (un pour RecordedMedia et un pour Videotape), juste un objet. Lorsque l'objet vtu83-1023 a été créé, toutes les valeurs de ses attributs ont été définies. L'enregistrement sur la bande est de 57 minutes. La longueur totale de la bande physique est de 60 minutes. Le ruban est une vidéocassette Umatic d'une hauteur de 10 pouces, d'une largeur de 7 pouces et d'une profondeur de 1,5 pouces. L'enregistrement est analogique et un journal du contenu de la bande est attaché à la bande pour que l'archiviste puisse s'y référer.
Figure 2: Une instance montrant tous les attributs hérités.
Vous n'avez qu'une seule instance définie par une sous-classe et sa superclasse. La sous-classe et la superclasse peuvent avoir une opération de constructeur (pour créer l'instance) et une opération de destructeur (pour détruire l'instance). Lorsque votre logiciel s'exécute et que vous créez une instance d'une sous-classe, le constructeur de la superclasse est exécuté en premier, suivi du constructeur de la sous-classe. Quand vient le temps d'éliminer l'instance que vous avez créée, le destructeur de la sous-classe est appelé en premier, suivi du destructeur de la superclasse. Si les choses sont plus complexes parce que vous avez des sous-classes de sous-classes, souvenez-vous simplement que: Les constructeurs sont invoqués du haut de la hiérarchie d'héritage au bas; les destructeurs sont appelés dans l'ordre de la sous-classe la plus basse jusqu'à la superclasse la plus élevée.