Laboratoire 1 - Héritage et Spécialisation
Une équipe de développement a fait l’analyse et une partie de la conception d’un programme gérant des trains. L’équipe n’avait pas encore décidé du langage final d’implémentation et a produit des artefacts de code dans un pseudo-langage.
Voici le diagramme des classes principales du programme.

- Un wagon connaît le wagon
suivantdans le train afficher_wagonaffiche l’information complète d’un seul wagon.afficher_trainaffiche l’information complète du wagon et de tous les wagons suivants du train.affréteraffrète le wagon à un marchand. Si un autre marchand a déjà affrété le wagon, celui-ci libère le wagon. Si le marchand estnull, le wagon est libéré.monterfait monter le voyageur dans unwagon. Si le voyageur est déjà dans un autre wagon, il en descend automatiquementdescendrefait descendre le voyageur de son wagon. Si le voyageur n’est pas dans un wagon, rien ne se passe.
Étape 0. Débutons
Implémentez le programme ainsi que le programme principal de test suivant (en pseudo code)
var v1 = new Voyageur("Philémon")
var v2 = new Voyageur("Peninna")
var m = new Marchand("Far★Star")
var w1 = new WagonVoyageur
v1.monter(w1)
v2.monter(w1)
var w2 = new WagonMarchandise
w1.suivant = w2
w2.affreter(m)
var w3 = new WagonMarchandise
w2.suivant = w3
w3.affreter(m)
var w4 = new WagonVoyageur
w3.suivant = w4
v2.monter(w4)
w1.afficher_train
Qui doit afficher:
VOYAGEUR: voyageur(s)=Philémon
MARCHANDISE: marchand=Far★Star
MARCHANDISE: marchand=Far★Star
VOYAGEUR: voyageur(s)=Peninna
TRAVAIL Vous devez implémenter le programme au moins 4 fois, une version pour chacun des groupes de langages suivants:
- Ruby et/ou Pharo (héritage simple dynamiquement typé)
- Python3 et/ou CLOS (héritage multiple dynamiquement typé)
- Java et/ou C# (héritage simple statiquement typé)
- C++ et/ou Nit et/ou Eiffel (héritage multiple statiquement typé)
Notes:
- Mettez la version de chaque langage dans un seul fichier source
- Dans chacun des langages, vous devez vous efforcer de respecter le style et les bonnes pratiques du langage.
- Je fais une exceptions pour les accesseurs: si ça réduit votre nombre de ligne, vous pouvez mettre les champs publics au lieu d’utiliser des getters/setters
- Assurez-vous aussi que le code soit de bonne qualité, sans redondances, lourdeurs ou fragilités.