Bonjour,
J'ai une question portant sur la conception objet en général : pour faire simple je vais prendre un exemple : une usine produit différent produits. On veut gérer chaque produit individuellement, et on veut savoir quel type de produit l'usine PEUT produire (c'est à dire si elle est équipée pour, pas si elle en déjà produit).
Voilà une première façon de modéliser cela avec un diagramme de classe :
Chaque instance d'Usine aura alors un tableau de TypeProduit contenant tous les types de produit qu'elle peut produire.
Mais voilà mon problème ce situe dans la relation entre TypeProduit et Produit. Cela me semble bizarre d'avoir une Classe TypeProduit "séparée" de Produit alors qu'un Produit est l'instanciation d'un certain type de produit.
D'où une deuxième solution : on introduit dans le diagramme UML la classe de Produit, appelée ClasseProduit (notons que ClasseProduit sera la classe mère de nombreuses autres classes comme : ClasseAspirateur, ClasseMixeur, ClasseTV). Un aspirateur donné de numéro de série 4653 sera donc aussi un produit. Voilà le diagramme des classes correspondant :
Chaque instance d'Usine aura alors un tableau de Class contenant toutes les classes de produit qu'elle peut produire.
La deuxième solution me semble plus proche de la POO (on utilise les classes comme un moule pour instance, mais aussi comme un type d'instance), mais est plus lourde (il faut faire une nouvelle classe par type de produit). Alors laquelle des deux trouve grâce auprès de vous ?
Merci d'avance pour toutes les précisions que vous pourrez apporter sur ces deux possibilités.
P.S. : la cardinalité de Produire dans le diagramme 2 est 1..* des deux côtés. De plus dans le diagramme 2 on a ajouté la relation "instance de", qui n'existe pas. Mais comment représenter en UML une relation concernant la classe et pas une de ses instances ?
P.P.S. : Usine aura alors un tableau de Class contenant normalement QUE des classes dont les instances seront des produits (c'est à dire que dans la hiérarchie des classes-mères, on tombera forcément sur ClasseProduit comme superclasse à un moment donné).
Mais comment s'assurer de cela ? Pourrait-on spécialiser le type Class ?
Partager