2023-10-21 15:42:07 +02:00
# TP5
TODO avant rendu :
2023-10-27 18:52:27 +02:00
- [ ] 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
2023-10-28 04:26:01 +02:00
- [x] Toute classe doit être surchargée avec `<<`
2023-10-27 18:52:27 +02:00
- [ ] Gestion satisfaisante des copies, affectation, destruction
### Projet
2023-10-27 20:29:48 +02:00
- [x] Ne dois **pas** être instanciée directement
- [x] Se décompose en tâches (vecteur de tâches)
- [x] Durée totale dépend du degré de parallélisme que le gestionnaire décide
- [x] Deux natures de projets dépendantent de `Projet`
2023-10-27 18:52:27 +02:00
- En cours d'élaboration (`ProtoProjet`)
- En cours d'exécution (`RunProjet`)
2023-10-27 20:29:48 +02:00
- [x] Peut être vu comme un graphe acyclique (utilisation de `vector` ) des tâches
2023-10-27 18:52:27 +02:00
- Les sommets sont des tâches
- Une tâche `fin` servira de source au graphe
- Garder un ordre topologique (triée par dépendances)
2023-10-27 20:29:48 +02:00
- [x] Mère des deux classes `ProtoProjet` et `RunProjet`
- [x] Méthodes utiles qu'à ses sous-classes
2023-10-27 18:52:27 +02:00
- Méthodes (cf. le PDF du prof)
2023-10-27 20:29:48 +02:00
- [x] `pick_two_random_tasks()`
2023-10-27 21:41:03 +02:00
- [x] `contains()`
2023-10-27 21:51:27 +02:00
- [x] Surcharge de `<<` : afficher toutes les tâches
2023-10-28 04:26:01 +02:00
- [x] `consult_tasks()`
2023-10-27 21:40:27 +02:00
- [x] `topologicalSort()`
2023-10-27 18:52:27 +02:00
#### ProtoProjet
2023-10-27 21:51:27 +02:00
- Permet de pouvoir ajouter de nouvelles tâches
- Ne peut pas progresser (a.k.a ne peut pas lancer les tâches)
2023-10-27 18:52:27 +02:00
- Champs
2023-10-27 21:51:27 +02:00
- [x] Tâche `début`
- [x] Tâche `fin`
2023-10-27 18:52:27 +02:00
- Méthodes (cf. le PDF du prof) ** ⇒ Tout ça avec l'ordre topologique**
2023-10-28 01:34:58 +02:00
2023-10-27 21:51:27 +02:00
- Pas de méthode d'ajout d'un objet `Tache`
2023-10-27 23:27:41 +02:00
- [x] `bool ajoute(nom, durée)` : sélectionne au hasard 2 tâches déjà
2023-10-27 18:52:27 +02:00
enregistrer et **ajoute** la nouvelle tâche entres-elles
2023-10-28 01:34:58 +02:00
- [x] `bool ajoute(nom, durée, id)` : **ajoute** une tâche qui doit se réaliser
2023-10-27 18:52:27 +02:00
**après** la tâche qui à l'`id` correspondant (et avant la tâche finale)
2023-10-27 23:27:41 +02:00
- [x] `bool ajoute(nom, durée, id1, id2)` : **ajoute** une tâche entre les 2 tâches
2023-10-27 18:52:27 +02:00
qui ont l'identifiant `id1` et `id2`
2023-10-28 00:10:54 +02:00
- [x] Surcharge de `<<`
2023-10-27 18:52:27 +02:00
#### RunProjet
2023-10-28 02:09:10 +02:00
- [x] Construit uniquement via un `ProtoProjet`
2023-10-28 04:16:35 +02:00
- [x] Avance vers sa conclusion en prenant en compte des tâches ponctuelles
2023-10-28 03:45:22 +02:00
- [x] Vide le contenu d'un `ProtoProjet` pour se construire, rendre les tâches "read-only"
2023-10-27 18:52:27 +02:00
- Méthodes (cf. le PDF du prof)
2023-10-28 03:45:22 +02:00
- [x] `run(id)` : Lance une tâche
- [x] `run(sequence_taches)` : Exécute une liste de tâches dans l'ordre donnée
2023-10-28 03:00:22 +02:00
- [x] Surcharge de `<<`
2023-10-27 18:52:27 +02:00
### Gestionnaire / Concepteur
2023-10-28 04:16:35 +02:00
- [x] Étudie/Analyse des `RunProjet`
- [ ] Interagis avec un `ProtoProjet` pour y mettre des tâches <!-- Comment ça ? -->
2023-10-28 11:17:43 +02:00
- [x] Recommande des ordonnancements pour la suite des exécutions à venir
2023-10-27 18:52:27 +02:00
(ordre d'exécutions des tâches)
2023-10-28 04:16:35 +02:00
- [x] Calcule la durée totale restante d'un projet
2023-10-27 18:52:27 +02:00
- [ ] Demande un salaire pour travailler
- Méthodes
2023-10-28 04:24:35 +02:00
- [x] Surcharge de `<<` : Affiche une facturation
2023-10-28 11:17:43 +02:00
- [x] `pair<vector<int>, int> avis(const RunProjet &)` : renvoie l'ordonnancement
2023-10-27 18:52:27 +02:00
et la durée totale restante
#### Consultant
Calcule **sans** parallélisation des tâches
#### Expert
Calcule **avec** parallélisation des tâches
### Tâches
2023-10-27 21:51:27 +02:00
Est-ce que l'on ne rendrait pas la classe complètement privée avec comme ami Projet et Gestionnaire ?
2023-10-27 18:52:27 +02:00
- [x] Dépendantes, entre-elles
- [x] Durée exacte, fixe, propre à elle-même
- [x] Ne peut être lancé que si toutes les dépendances sont réalisées
- [x] Dépendances = autres tâches
- [x] Élément atomique (final)
- Champs
2023-10-27 19:31:44 +02:00
- [x] Nom
2023-10-27 18:52:27 +02:00
- [x] Numéro unique
- [x] État (réalisée/en attente)
- Réalisée → En attente : **interdit**
- En attente → Réalisée : **autorisé**
- [x] Vision locale des dépendances (`vector`)
- Méthodes (cf. le PDF du prof)
- [x] `bool realise()`
- [x] `bool depends_from(Tache & x)`
- [x] `bool ajouteDependance(Tache & x)`
- [x] `int dureeParal()`
2023-10-27 21:51:27 +02:00
- [x] Surcharge de `<<`