3.8 KiB
3.8 KiB
TP5
TODO avant rendu :
- Page rédigée montrant que l'on a tenu compte des problématiques de copies et sécurité (private/public) en expliquant en français non technique comment vous les avez traitées (
x
à pas accès ày
) - Écrire des tests pour montrer que ça fonctionne
Notes
- Toute classe doit être surchargée avec
<<
- Gestion satisfaisante des copies, affectation, destruction
Projet
- Ne dois pas être instanciée directement
- Se décompose en tâches (vecteur de tâches)
- Durée totale dépend du degré de parallélisme que le gestionnaire décide
- Deux natures de projets dépendantent de
Projet
- En cours d'élaboration (
ProtoProjet
) - En cours d'exécution (
RunProjet
)
- En cours d'élaboration (
- Peut être vu comme un graphe acyclique (utilisation de
vector
) des tâches- Les sommets sont des tâches
- Une tâche
fin
servira de source au graphe
- Garder un ordre topologique (triée par dépendances)
- Mère des deux classes
ProtoProjet
etRunProjet
- Méthodes utiles qu'à ses sous-classes
- Méthodes (cf. le PDF du prof)
pick_two_random_tasks()
contains()
- Surcharge : afficher toutes les tâches
consult_tasks()
topologicalSort()
ProtoProjet
- Permet de pouvoir ajouter de nouvelles tâches
- Ne peut pas progresser (a.k.a ne peut pas lancer les tâches)
- Champs
- Tâche
début
- Tâche
fin
- Tâche
- Méthodes (cf. le PDF du prof) ⇒ Tout ça avec l'ordre topologique
- Pas de méthode d'ajout d'un objet
Tache
bool ajoute(nom, durée)
: sélectionne au hasard 2 tâches déjà enregistrer et ajoute la nouvelle tâche entres-ellesbool ajoute(nom, durée, id)
: déplace une tâche quoi doit se réaliser après la tâche qui à l'id
correspondant (et avant la tâche finale) ⇒ création d'une dépendancebool ajoute(nom, durée, id1, id2)
: ajoute une tâche entre les 2 tâches qui ont l'identifiantid1
etid2
- Pas de méthode d'ajout d'un objet
RunProjet
- Construit uniquement via un
ProtoProjet
- Avance vers sa conclusion en prenant en compte des tâches ponctuelles
- Vide le contenu d'un
ProtoProjet
pour se construire, rendre les tâches "read-only" - Méthodes (cf. le PDF du prof)
run(id)
: Lance une tâcherun(sequence_taches)
: Exécute une liste de tâches dans l'ordre donnée
Gestionnaire / Concepteur
- Étudie/Analyse des
RunProjet
- Interagis avec un
ProtoProjet
pour y mettre des tâches - Recommande des ordonnancements pour la suite des exécutions à venir (ordre d'exécutions des tâches)
- Calcule la durée totale restante d'un projet
- Demande un salaire pour travailler
- Méthodes
- Surcharge
<<
: Affiche une facturation pair<vector<int>, int> avis(const RunProjet &)
: renvoie l'ordonnancement et la durée totale restante
- Surcharge
Consultant
Calcule sans parallélisation des tâches
Expert
Calcule avec parallélisation des tâches
Tâches
- Dépendantes, entre-elles
- Durée exacte, fixe, propre à elle-même
- Ne peut être lancé que si toutes les dépendances sont réalisées
- Dépendances = autres tâches
- Élément atomique (final)
- Champs
- Nom
- Numéro unique
- État (réalisée/en attente)
- Réalisée → En attente : interdit
- En attente → Réalisée : autorisé
- Vision locale des dépendances (
vector
)
- Méthodes (cf. le PDF du prof)
bool realise()
bool depends_from(Tache & x)
bool ajouteDependance(Tache & x)
int dureeParal()