expert:uml
no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | expert:uml [2018/11/17 12:53] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Introduction à UML ====== | ||
+ | {{: | ||
+ | == Notes == | ||
+ | * Bien que l' | ||
+ | * Je donne les exemple de code ici en python, pour la lisibilité extrème de ce langage. Certaines notion gagneraient certainement à être expliquées à l'aide d' | ||
+ | * Les schémas sont faits avec [[graphisme: | ||
+ | |||
+ | ==== Explication des termes ==== | ||
+ | === UML === | ||
+ | Unified Modeling Language: langage de modélisation unifié | ||
+ | * Langage: C'est un langage visuel à base de pictogrammes mais aussi un langage textuel en XML | ||
+ | * Modélisation: | ||
+ | * Unifié: UML est un standard ouvert défini par le Object Management Groupe (OGM) qui est une association à but non lucratif dont l' | ||
+ | |||
+ | UML est donc orienté objet. Il va aider à définir le schémas de persistence des données à partir des classes de l' | ||
+ | |||
+ | === La programmation orienté objet === | ||
+ | Il existe plusieurs paradigmes de programmation. Les plus courants à l' | ||
+ | |||
+ | Une classe est une sorte de modèle sur lequel on peut se baser pour construire les objets. Par exemple, prenons un tableau noir. En objet, je vais définir ce qu'est un tableau noir, ce qui le caractérise, | ||
+ | | ||
+ | À partir de cette classe, je vais pouvoir créer autant de tableaux noirs que je veux, ce sont des objets. | ||
+ | |||
+ | * Voire [[python objet|La programmation objet: les bases en python]] | ||
+ | |||
+ | === Le SGBD, le SGBDR === | ||
+ | Le Système de Gestion de la Base de Données est un ensemble de programmes qui gère les accès à une base de donnée. Dans le processus de développement moderne, la base de donnée est essentielle. Le données ne sont pas gardées dans le programme lui-même mais confiées au SGDB. | ||
+ | |||
+ | Il y a plusieurs types de SGDB, le plus fréquent est le relationnel, | ||
+ | |||
+ | En programmation objet, on fait correspondre à chaque classe une table. Les attributs composeront les champs de la table tandis que les objets en seront les entréées. | ||
+ | |||
+ | Les tables peuvent inclure des méthodes dans un langage spécifique au SGBDR. | ||
+ | |||
+ | Enfin, les tables incluent les relations avec les autres tables (héritage, primary key, foreign key, etc). | ||
+ | ==== Les types de diagrammes UML ==== | ||
+ | * diagramme de classes | ||
+ | * diagramme de cas d' | ||
+ | * diagramme de composants | ||
+ | * diagrammes de séquences | ||
+ | * diagrammes de collaboration | ||
+ | * diagrammes d' | ||
+ | * diagrammes d' | ||
+ | |||
+ | ==== Méthodologie en UML ==== | ||
+ | |||
+ | UML n' | ||
+ | |||
+ | Pour décrire un processus industriel de type chaîne de montage, par exemple, on partira plus facilement d'un diagramme d' | ||
+ | |||
+ | Sans compter que vous pouvez vous servir de UML pour tout autre chose que pour le développement... | ||
+ | |||
+ | Pour la programmation orientée objet, c'est le diagramme de classe qui va être l' | ||
+ | |||
+ | ==== Les outils pour faire de l'UML ===== | ||
+ | |||
+ | Une feuille de papier ou un tableau blanc sont préférés par certains à un logiciel. Essayez pour voire si ça vous convient! | ||
+ | |||
+ | Du côté des logiciels: | ||
+ | * Dia: dans la philosophie unix, ne fait que des diagrammes mais le fait bien | ||
+ | * Gaphor: écrit en python, même philosophie | ||
+ | * argoUML: écrit en java, complet mais un peu lourd à l' | ||
+ | * Umbrello: logiciel kde, très complet et visuel mais sensiblement plus lourd et présence de bugs | ||
+ | * UMLet: écrit en java, orienté texte | ||
+ | |||
+ | ===== Les diagrammes de classe ===== | ||
+ | |||
+ | Notez que l'on peut aussi créer des diagrammes d' | ||
+ | |||
+ | ==== Classes ==== | ||
+ | |||
+ | La classe est l' | ||
+ | |||
+ | // | ||
+ | < | ||
+ | class individu(): | ||
+ | nom = " | ||
+ | | ||
+ | def get_nom(self): | ||
+ | return self.nom | ||
+ | | ||
+ | def set_nom(self, | ||
+ | self.nom = new | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === Attributs === | ||
+ | |||
+ | Les différentes variables afférant à la calsse. Selon le langage, les variables peuvent être privées, protégées ou publiques. Dans l' | ||
+ | |||
+ | == Clef primaire, clef étrangère == | ||
+ | |||
+ | Les clefs primaires et étrangères sont essentielles à l' | ||
+ | |||
+ | Chaque instance se doit d' | ||
+ | |||
+ | Chaque fois que deux classes sont liées, une clef étrangère dans l'une ou les deux classes doit renvoyer à la classe liée. Là encore, il peut être judicieux de le spécifier dans le diagramme. | ||
+ | |||
+ | === Opérations === | ||
+ | |||
+ | Les fonctions (ou méthodes) de la classe. En dehors des constructeurs, | ||
+ | |||
+ | Conventionnellement, | ||
+ | |||
+ | Dans la plupart des langages, les classes ont des attributs et des méthodes dits privés, protégés ou public. Un attribut ou une méthode privée n'est visible que par la classe elle-même. Il faut donc créer des méthodes dont le but est de lire ou modifier celles-ci. | ||
+ | |||
+ | À noter que même si certains langages permettent d' | ||
+ | |||
+ | ==== Packages ==== | ||
+ | |||
+ | Les packages permettent de mettre de l' | ||
+ | ==== Relations, contraintes ==== | ||
+ | |||
+ | Les principales relations entre les classes sont l' | ||
+ | |||
+ | === Agrégations === | ||
+ | |||
+ | Décrit la relation entre un tout (l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | == Composition == | ||
+ | |||
+ | La composition est une forme d' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Ici, la classe bâtiment est composée d' | ||
+ | |||
+ | Concrètement, | ||
+ | |||
+ | == Cardinalités == | ||
+ | |||
+ | La cardinalité est un symbole (un chiffre ou une lettre: 1,2,3,n) qui indique combien de parties peuvent appartenir à combien d' | ||
+ | * many2many | ||
+ | * many2one ou one2many | ||
+ | * one2one | ||
+ | |||
+ | // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Un bâtiment ne peut avoir qu'un seul toit et un toit ne peut couvrir qu'un seul bâtiment. | ||
+ | |||
+ | Une bâtiment peut avoir plusieurs étages mais un étage ne peut appartenir qu'à un seul bâtiment. | ||
+ | |||
+ | Un bâtiment peut compter plusieurs employés et un employé peut être affecté à plusieurs bâtiments. | ||
+ | |||
+ | On peut cependant affiner son modèle avec des cardinalités plus complexes, par exemple: | ||
+ | |||
+ | 0..n -> 1..4 : ici, 0 ou plusieurs instances a sont liées à 1, 2, 3 ou 4 instances b | ||
+ | |||
+ | Ceci est très rarement utile, sauf au niveau conceptuel. | ||
+ | |||
+ | === Généralisation/ | ||
+ | |||
+ | L' | ||
+ | |||
+ | // | ||
+ | |||
+ | < | ||
+ | class individu(): | ||
+ | nom = " | ||
+ | prenom = " | ||
+ | | ||
+ | def marcher(): | ||
+ | pass | ||
+ | | ||
+ | def courir(): | ||
+ | pass | ||
+ | | ||
+ | | ||
+ | class plombier(individu): | ||
+ | charge_chalumeau = 100 | ||
+ | | ||
+ | def changer_robinet(): | ||
+ | pass | ||
+ | | ||
+ | | ||
+ | class peintre(individu): | ||
+ | couleur_pot = " | ||
+ | | ||
+ | def peindre_mur(): | ||
+ | pass | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Ici, les deux classes " | ||
+ | |||
+ | Pour continuer l' | ||
+ | |||
+ | < | ||
+ | |||
+ | In [11]: dir(yves) | ||
+ | Out[11]: | ||
+ | [' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | In [12]: help(yves) | ||
+ | |||
+ | Help on instance of peintre in module __main__: | ||
+ | |||
+ | class peintre(individu) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | En utilisant l' | ||
+ | |||
+ | == Classes abstraites == | ||
+ | |||
+ | Les classes abtraites sont des classes qui ne peuvent pas être instanciées. Leur utilité est de fournir une base aux classes filles qui en héritent. | ||
+ | |||
+ | Dans l' | ||
+ | |||
+ | === Interface === | ||
+ | |||
+ | Une interface est une classe spéciale qui ne contient que des méthodes. | ||
+ | |||
+ | ===== Les cas d' | ||
+ | Avec le diagramme de classe, le diagramme de cas d' | ||
+ | |||
+ | On le met en place en liaison avec l' | ||
+ | |||
+ | ===== Les diagrammes de composants ===== | ||
+ | Le diagramme de composant permet de définir l' |
expert/uml.txt · Dernière modification : 2018/11/17 12:53 de 127.0.0.1