- [ ] 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
- [ ] Se décompose en 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 : 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)` : **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)
- [ ]`bool ajoute(nom, durée, id1, id2)` : **ajoute** une tâche entre les 2 tâches
qui ont l'identifiant `id1` et `id2`
#### 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
### 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