Une compagnie de fret spatial FAR★STAR propose du transport de marchandises dans la galaxie. La compagnie possède principalement deux catégories de vaisseaux:
Les vaisseaux de combat peuvent s’équiper d'armes de combats spatiaux.
Il y a deux types d'armes: les phasers qui sont des armes qui envoient des photons à haute énergie (PHoton mASER) et les blasters (appelés aussi cannons à plasma) qui envoient des particules de gaz fortement ionisées.
Les vaisseaux de combats légers ne peuvent équiper que des phasers. Les vaisseaux de combats lourds peuvent équiper des phasers et des blasters.
Les armes équipées sont connectées au système d'alimentation énergétique du vaisseau. Toutefois, les blasters nécessitent d’être chargés en gaz. On peut donc connaitre le niveau de gaz de chaque blaster (en pourcentage) et les recharger.
Chaque vaisseau de combat à un nombre maximal d'arme qu'il peut équiper.
Les vaisseaux de transport peuvent transporter dans leurs soutes des containers, mais aussi des armes et des vaisseaux plus petits qu'eux.
Le transport d'objets est contraint par deux caractéristiques principales: le volume et la masse.
Le volume et la masse d'un container sont spécifiques à chacun d'eux (même si les dimensions sont standardisées). Le volume et la masse d'une arme sont spécifiques à chaque type d'arme. Le volume des vaisseaux est spécifique à chaque vaisseau, toutefois la masse est plus variable:
La masse des vaisseaux de combat correspond à la masse du vaisseau non armé, plus la masse de chacune des armes équipées. La masse d'un vaisseau de transport correspond à la masse à vide du vaisseau plus la masse de chacune des choses transportés dans la soute.
La capacité maximale de transport d'un vaisseau est limitée et dépend du type de vaisseau et de modifications spécifiques à chaque vaisseau. Il y a deux limites à la capacité d'un vaisseau de transport: une pour la masse et une pour le volume. La somme des masses des choses transportées ne peut pas dépasser la capacité massique maximale du vaisseau. La somme des volumes des choses transportées ne peut pas dépasser la capacité volumique maximale du vaisseau.
Notons que le volume d'un vaisseau de transport est toujours plus grande que sa capacité volumique.
Dans certains rares cas, des vaisseaux de transports hybrides permettent à la fois de transporter du matériel et de combattre. Il s'agit souvent de modèles anciens; la norme actuelle lors du transport dans des zones spatiales infestées de pirates de l'espâââce est de faire escorter des vaisseaux dédiés au transport par des vaisseaux dédiés au combat.
L'objectif est d'analyser, concevoir et implémenter la composante d'un programme permettant de gérer les vaisseaux de la compagnie FAR★STAR.
Vous devez développer une API permettant de réaliser les opérations suivantes:
Ces opérations doivent s'assurer que les règles métier (par exemple la gestion de la capacité des vaisseaux) et de bon sens (par exemple qu'une arme ne pas être équipée par deux vaisseaux à la fois) soient respectées.
Vous devez offrir au programmeur une API simple et suffisante pour réaliser par exemple le scénario suivant
Le travail peut être réalisé par groupe de deux.
Le programme doit être réalisé dans trois langages à objet différents, à choisir dans les catégories suivantes:
Vous devez réaliser et remettre:
Seront pris en compte dans la notation: