Pour celles et ceux qui sont en conformité avec le cours
(cf https://moodlearchive.epfl.ch/2023-2024/mod/forum/discuss.php?d=96100),
je viens de publier les notes du devoir à la maison
et vais vous envoyer sous peu un email votre programme et le détail des points obtenus.
Vos correcteurs/correctrices ont PEUT ETRE ajouté des commentaires dans votre code
ou dans la fiche de correction (qui vont vous être retourné), mais sinon, les principales erreurs sont
détaillées ci-dessous.
Celles et ceux qui s'étaient enregistrées pour l'étude sur un feedback
détaillé (cf https://moodlearchive.epfl.ch/2023-2024/mod/forum/discuss.php?d=96997)
devraient le recevoir bientôt.
Avec une moyenne de 5.5 et un taux de réussite de 97%
(distribution des points en fin de ce message),
c'est un devoir très bien réussi.
Bravo !
Au niveau des points positifs :
- globalement, les concepts ont l'air d'avoir été bien intégrés ;
- beaucoup de codes bien commentés et joliment présentés ;
- pas mal d'utilisation du const& ;
- (bon réflexe : ) plusieurs pensent à des cas potentiellement
problématiques non évoqués dans la donnée.
Cependant il reste encore des aspect à améliorer :
- il y a encore trop souvent de la répétition de code (« copié-collé ») ;
- d'autres par contre ont mal compris ce conseil (« pas de copié-collé »)
et font trop de fonctions inutiles (s'il n'y a pas de copié-collé
**ET** si la fonction est petite (disons moins de 2 lignes) ou ne
correspond pas à un concept IMPORTANT, ce n'est pas la peine d'en
faire une fonction).
Autre exemple (lié au manque d'abstraction) : faire une fonction
auxiliaire pour regarder si un element appartient a la liste
d'appels passes, et une autre fonction auxiliaire pour verifier si
un element appartient a la liste des appels reçus, au lieu de faire
simplement une fonction "appartient" (dégager l’abstraction).
- peu de groupes ont vérifié l'id donné à chat() (ou se préserver
contre un System vide) : il est important que les « fonctions
d'interface » (fonctions de plus haut niveau) vérifient la cohérence
de ce qu'elles reçoivent/font
- éviter les copies inutiles (de données ; p.ex. dupliquer le System)
- mauvaise conception : vector<Client> : c'est incohérent du point de
vue de la logique des données (duplication incohérente
d'information, p.ex. comment lister les appelés des appelés de X?)
et aussi de la copie inutile de données
- utilisation de int au lieu de size_t
- fonction de recherche dans le System qui retourne l'index 0 alors
que ceci est un index valable (celui du premier Client)
- beaucoup d'étudiant(e)s ne voient pas encore l'importance de donner
des noms compréhensibles et pertinents aux fonctions, variables ou
type. Ce n'est pas encore très important dans ce type de devoirs,
mais ce genre de reflexes vous aidera beaucoup dans votre futur en
Prog, notamment pour le projet du prochain semestre (et
accessoirement cela rendrait la correction de certaines copies plus
agréable).
- Un autre petit commentaire suite à des questions posées
pendant les séances d'exercices : plusieurs étudiant(e)s étaient
surpris(e)s qu'il est possible de `return;` (sans rien) d'une fonction
`void`. On l'a aussi vu dans certains rendus où des plusieurs
`if ... else ...` sont enchaînées au lieu de simplement sortir
de la fonction (par « return; ») en cas d'erreur.
Distribution des points : (en % du total qui était de 45.5 points)