Programmation orientée projet
Topic outline
-
Programmation Orientée Projet (en C++)
pour étudiants de Microtechnique et ElectricitéLe cours utilise et complète ce MOOC :Projet du semestre de printemps 2021-22 : TCHANZOrganisation de l'évaluation sem2 2022:
Projet de programmation (3 rendus + 1 mini-oral individuel) = 65%
Examen écrit 6 mai = 35%
Horaires, Planning, Dates importantes :
- COURS ex-cathedra en présentiel au CO1 de 14h à 16h, seulement pendant les 7 premières semaines ( 7 x 2h = 14 x 1h) ; consulter le planning détaillé ci-dessous. Le cours sera aussi donné en streaming sur ce webinar (Webinar ID: 641 8241 9470) avec un.e TA en-ligne pour répondre aux questions. La video sera mise à disposition après le cours sur moodle.
Composante de contrôle continu (65% de la note finale):- 3 rendus de projet aux dates suivantes : 3 avril, 1 mai, 22 mai
- Les deux premiers rendus peuvent donner lieu à un oral pour cas particuliers (détection de plagiat, contrôle aléatoire)
- Oral final projet obligatoire non noté en semaine 13 : vendredi 27 mai 2021 de 16h à 19h30
- Oral final noté pour cas particuliers (détection de plagiat, oral projet insuffisant)
-
Consulter la page des disponibilités d'inscriptions auprès des assistants avant de vous rendre dans les salles. Les informations concernant les inscriptions des groupes sont sur Discourse dans la catégorie Sem2_Projet_C++
-
V1.02: précision sur la condition pour déposer la nourriture dans sa fourmilière: le contact partiel de la fourmi collector avec la bordure ou le coin de sa fourmilière suffit (sections 2.3.2.1 et 2.3.3.6)
V1.01: correction d'une petite incohérence entre les section 2.3.2.1 (maintenant corrigée) et 2.3.3.6 (correcte)
-
Concernant la question: Pourquoi le collector Rouge qui disparait à cause du contact avec un defensor d'une autre fourmilière ne laisse-t-il pas sa nourriture sur place ?
Réponse: parce qu'à la même mise à jour ce collector arrive au contact (par un coin) de sa fourmilière, ce qui est OK pour transmettre sa nourriture à sa fourmi generator. Cette partie de mise à jour est faite avant la disparition de la fourmi Collector.
-
Cet outil sera utilisé pour noter l'exécution du rendu1
-
V 1.01: correction d'un faute de frappe pour f03 ; précisions supplémentaires pour f07 et f11
-
Cours : Introduction au second semestre / présentation de la programmation modulaire et de la compilation séparée
TP h1: make et makefile
TP h2: présentation des méthodes de développement de programme avec quelques questions théoriques
-
Avec questions SpeakUp: Pour la première question, la bonne réponse est B) car au moment où le compilateur compile (séparément) prog.cc il n'a pas accès au code source de l'implémentation du module calcul et donc il ne dispose pas de la définition complète de la fonction div. Par contre il a inclus l'interface et il dispose au moins de la déclaration de la fonction div() ce qui permet de vérifier que la syntaxe de l'appel est correcte. La compilation produit simplement une instruction d'appel de fonction qui sera complétée à l'étape d'édition de liens quand on aura (enfin) aussi le code objet calcul.o.
Pour la seconde question: c'est la réponse A) car le fichier d'interface est inclus dans prog.cc ; s'il change prog.cc doit être recompilé.
-
Suivre le MOOC semaine_1 / Introduction avant la classe inversée
Cours h1: Lien entre le MOOC semaine1 programmation orientée objet et la programmation modulaire
Cours h2: vue générale du projet : fonctionnement, architecture modulaire, classes et types concrets
TP h1: exercices MOOC semaine 1
TP h2: prise de connaissance de la donnée du projet / finalisation des groupes
-
La réponse est "Non" car, même si techniquement il y a une encapsulation stricte avec les attributs en private, cette protection est contournée en offrant un manipulateur qui affecte directement la valeur des paramètres aux attributs sans aucun controle. Il y a donc là aussi une perte de contrôle du module Datum sur la validité des instances du type Datum.
-
-
Suivre le MOOC semaine_2 / Constructeur_Destructeur avant la classe inversée
Cours h1: classe inversée constructeur / destructeur
Cours h2: lecture de fichier, préprocesseur
TP h1: lecture de fichier, préprocesseur et stubs, questions avancées sur la notion de type concret
TP h2: exercices MOOC semaine 2
-
La bonne réponse est D car un constructeur ayant été défini, le compilateur ne met pas en place le constructeur par défaut par défaut pour la variable r dans main(). Il produit une erreur de compilation car aucun constructeur n'existe pour cette déclaration de r.
-
Suivre le MOOC semaine_3 / Surcharge & notion de "type paramétré"
Cours h1: classe inversée sur static, variable de classe et Surcharge
Cours h2: Forces et faiblesses de vector ; Forces et faiblesses d'un type paramétré
TP h1: static à l'échelle d'un module ; type paramétré
TP h2: exercices MOOC semaine 3 (sauf exercice 11)
-
Code produisant la réponse B: essayez de le corriger.
-
fichiers de configuration et version initiale du module form
-
Suivre le MOOC semaine_4 / Héritage avant la classe inversée
Cours h1: héritage (première partie), pointeur de fonction
Cours h2: petit exemple héritage + Architecture Model-View-Control / GTKmm / dessin
TP h1: GTKmm / dessin
TP h2: exercices MOOC semaine 4
-
Section les plus utiles:
3. Les bases des fenêtres
5. Les boutons
7. Les widgets non-spéciaux, en particulier le 7.1 qui est le label
17. Le dessin
16.1 Pour ouvrir des fichiers avec une interface
24.3 La fonction idle pour effectuer une mise à jour d'une simulation
-
Suivre le MOOC semaine_5 / Polymorphisme avant la classe inversée
Cours h1: classe inversée polymorphisme
Cours h2: Programmation par événement / GTKmm
TP h1: GTKmm / GUI
TP h2: exercices MOOC semaine 5
Projet : Rendu1 le dimanche 3 avril -
Suivre le MOOC semaine_6 / Héritage_multiple avant la classe inversée
Cours h1: classe inversée héritage multiple
Cours h2: GTK idle vs timer
TP h1: GTKmm / programmation par événement
TP h2: exercices MOOC semaine 6
-
pour 3.1 : ça ne compile toujours pas même si les prototypes sont différents car le masquage invalide tous les prototypes.
l'exemple 3.2 fonctionne si l'ambiguité est supprimée entre B et C pour autant qu'on utilise la version redéfinie qui masque celle de A.
-
-
TP h1 et h2: temps dédié au projet avec encadrement en salles de TPProjet : Rendu2 le dimanche 1 mai
-
EXAMEN écrit de 14h à 16h
TP h1 et h2: temps dédié au projet avec encadrement en salles de TP
examen en contrôle continu le 6 mai 14h15-15h45
Tous les documents "papier" sont autorisés: livre, notes personnelles, tout document imprimé (cours, séries, projet, etc...)LES APPAREILS ELECTRONIQUES SONT INTERDITS, EN PARTICULIER LES CALCULATRICESVotre salle d'examen est indiquée dans le fichier pdf ci-dessous
-
TP h1 et h2: temps dédié au projet avec encadrement en salles de TP
-
TP h1 et h2: temps dédié au projet avec encadrement en salles de TP
Projet : rendu final dimanche 22 mai 23h59 + un jour
-
5. Forme du rendu3 (reprise de la donnée du rendu3)Documentation : l’entête de vos fichiers source doit indiquer le nom du fichier et les noms des membres du groupe avec, pour les fichiers .cc, une estimation du pourcentage de contribution de chaque membre du groupe au code de ce fichierRendu: pour chaque rendu UN SEUL membre d’un groupe (noté SCIPER1 ci-dessous) doit télécharger un fichier zip sur moodle (pas d’email). Le non-respect de cette consigne sera pénalisé de plusieurs points.Le nom de ce fichier zip a la forme : SCIPER1_SCIPER2.zipCompléter le fichier fourni mysciper.txt en remplaçant 111111 par le numéro SCIPER de la personne qui télécharge le fichier archive et 222222 par le numéro SCIPER du second membre du groupe.Le fichier archive du rendu3 doit contenir (AUCUN répertoire) :• Fichier texte édité mysciper.txt
• Votre fichier Makefile produisant un executable projet
• tout le code source (.cc et .h) nécessaire pour produire l'exécutable• le fichier pdf du rapportOn doit pouvoir produire l’exécutable projet à partir du Makefile après décompression du contenu du fichier zip. La commande make ne doit faire AUCUN déplacement de fichier ; tout reste dans l’unique répertoire créé par la décompression du fichier archive.Auto-vérification : Après avoir téléversé le fichier zip de votre rendu sur moodle (upload), récupérez-le (download), décompressez-le et assurez-vous que la commande make produit bien l’exécutable et que celui-ci fonctionne correctement.
-
-
Oral final hybride présentiel(CO 020+021+023)/ Online(Zoom) vendredi 27 mai, à partir de 16h00 et jusqu'à 19h30
Accès présentiel : attendre son tour en CO 020 ; on viendra vous appeler pour passer l'oral en CO 021-23
-
On viendra vous chercher dans la salle d'attente CO 020.
Vendredi matin nous indiquerons la correspondance entre l' Oral Spot indiqué par une lettre et le lien Zoom pour ceux qui ont indiqué ce format ; un fichier pdf sera visible à la suite de cet horaire.
-
Oral individuel approfondi au cas par cas