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 suivant dans le train
  • afficher_wagon affiche l’information complète d’un seul wagon.
  • afficher_train affiche l’information complète du wagon et de tous les wagons suivants du train.
  • affréter affrè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 est null, le wagon est libéré.
  • monter fait monter le voyageur dans un wagon. Si le voyageur est déjà dans un autre wagon, il en descend automatiquement
  • descendre fait 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.