This repository has been archived on 2023-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
GestionProjet/TODO.md
2023-10-28 11:53:25 +02:00

3.9 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)
  • 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 et RunProjet
  • Méthodes utiles qu'à ses sous-classes
  • Méthodes (cf. le PDF du prof)
    • pick_two_random_tasks()
    • contains()
    • Surcharge de << : 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
  • 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-elles
    • bool ajoute(nom, durée, id) : ajoute une tâche qui doit se réaliser après la tâche qui à l'id correspondant (et avant la tâche finale)
    • bool ajoute(nom, durée, id1, id2) : ajoute une tâche entre les 2 tâches qui ont l'identifiant id1 et id2
    • Surcharge de <<

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âche
    • run(sequence_taches) : Exécute une liste de tâches dans l'ordre donnée
    • Surcharge de <<

Concepteur

L'utilisateur final en somme

  • Interagis avec un ProtoProjet pour y mettre des tâches

Gestionnaire

  • Étudie/Analyse des RunProjet

  • 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 de << : Affiche une facturation
    • pair<vector<int>, int> avis(const RunProjet &) : renvoie l'ordonnancement et la durée totale restante

Consultant

  • Calcule sans parallélisation des tâches

Expert

  • Calcule avec parallélisation des tâches

Tâches

Est-ce que l'on ne rendrait pas la classe complètement privée avec comme ami Projet et Gestionnaire ?

  • 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()
    • Surcharge de <<