MGL7010
Bienvenue à MGL7010, "Programmation orientée objet et conception orientée objet détaillée"
Objectifs d’apprentissage
Dans ce cours, vous apprendrez les concepts fondamentaux de la programmation orientée objet à travers l’exemple du langage de programmation Java. Vous apprendrez non seulement à appliquer les constructions du langage, mais aussi des lignes directrices concrètes qui vous permettront de déterminer quelles caractéristiques du langage conviennent le mieux aux problèmes courants de conception logicielle orientée objet. Vous apprendrez également à utiliser des représentations visuelles standardisées pour communiquer des idées de conception, l’écosystème des outils Java, ainsi qu’une série d’indicateurs de niveaux de code pour juger rapidement de la qualité du code.
Succès
Ce cours vous fournit une boîte à outils technique et théorique pour prendre des décisions de conception orientée objet adaptées, ainsi que la capacité d’appliquer ces concepts au niveau du langage de programmation.
Contenu du cours
Ce cours comprend deux principaux volets pédagogiques autour de l’orientation objet comme objectifs d’apprentissage :
- Les concepts du langage et les fondements techniques de la programmation orientée objet.
- Les concepts de la conception orientée objet.
Philosophie
Ceci est un cours sur la conception logicielle. Bien qu’il ne puisse pas y avoir de logiciel sans programmation, ce n’est pas la même chose que la conception logicielle.
Une distinction fondamentale
La programmation n’est pas identique à la conception logicielle :
- Programmation est l’activité quotidienne consistant à écrire du code fonctionnel. La maîtrise du langage et la familiarité sont nécessaires pour écrire du code fonctionnel.
- Conception logicielle est l’art de faire les bons choix structurels et comportementaux afin que le code ne fonctionne pas seulement de façon sporadique, mais qu’il respecte aussi des exigences non fonctionnelles comme la maintenabilité, l’évolutivité et la fiabilité.
Dans ce cours, vous allez programmer activement, mais l’évaluation porte principalement sur la conception logicielle, c’est-à-dire votre capacité à raisonner avec des éléments de conception, à faire les bons choix et à expliquer vos décisions.
Contenu détaillé
Pour couvrir à la fois la maîtrise de la programmation et l’aisance avec les décisions de conception, ce cours présente
les deux sous forme de sous-sections.
Durant la première moitié du trimestre, nous nous concentrerons sur la révision des éléments du langage, ensuite nous
nous appuierons sur ces éléments pour réaliser des décisions de conception.
Programmation orientée objet
- Un bref aperçu des principaux paradigmes de programmation
- Révision des concepts fondamentaux, intermédiaires et avancés de la programmation orientée objet
- Écosystèmes entourant le langage de programmation Java, notamment les bibliothèques standard et les systèmes de construction.
Conception orientée objet
- Le cycle de vie logiciel comme approche orientée modèle
- Les principes de conception, comme guide pour la prise de décision
- Rappel d’une sélection de patrons de conception courants
- Anti-patrons et mauvaises odeurs de code
Communication
Veuillez respecter la nétiquette de communication suivante (vous êtes nombreux, nous sommes peu).
Matériel du cours
- Si vous avez des questions concernant le matériel du cours, veuillez ne pas m’envoyer de courriel ni de message direct – publiez-les plutôt sur le canal Mattermost.
- Le canal n’est accessible que sur invitation – veuillez suivre les instructions données dans la première unité du cours pour y accéder.
- Notez que le canal a des règles de communication strictes et que le non-respect peut entraîner votre retrait du canal.
Notes
- Les notes reflètent la qualité de votre travail ou de votre compréhension.
- Vous pouvez me contacter par message direct (courriel / Mattermost) si vous avez découvert une erreur formelle d’évaluation.
- Exemples :
- Une erreur de calcul, c’est-à-dire que les points sur votre copie ne correspondent pas au total.
- Une partie de votre travail a été omise et non évaluée, alors que vous aviez respecté les consignes de remise.
Quand ne pas contacter le professeur
- Les critères d’évaluation ne sont pas négociables :
- Je ne peux pas modifier votre note en fonction de votre souhait ou de vos besoins d’obtenir une meilleure
note :
- "Je vais échouer le cours si vous ne me donnez pas des points supplémentaires."
- "Il me manque seulement X points pour avoir une meilleure note."
- "Je vais perdre ma bourse si vous ne m’accordez pas de points supplémentaires."
- Je ne peux pas modifier votre note en fonction de vos efforts :
- "J’ai investi X heures de travail, et je suis déçu de ma note."
- Je ne peux pas changer les critères d’évaluation :
- "Si vous changiez les critères d’évaluation de y à z, j’aurais une meilleure note."
- Je ne peux pas modifier votre note en fonction de votre souhait ou de vos besoins d’obtenir une meilleure
note :
Vérifiez bien avant de me contacter
Je ne peux pas modifier votre note, ou les critères d'évaluation, en fonction de vos efforts, de vos souhaits ou de vos besoins.
Éléments d’évaluation
| Description sommaire | Date | Pondération |
|---|---|---|
| Laboratoire noté 1 | 30-09-2025 | 5% |
| Projet 1 | Code: 03-10-2025 23:59 h | |
| Presentation: 07-10-2025 | 10% | |
| Examen intra | 27-10-2025 18h-21h | 20% |
| Laboratoire noté 2 | 21-10-2025 | 5% |
| Projet 2 | Code: 07-11-2025 23:59 h | |
| Presentation: 11-11-2025 | 15% | |
| Laboratoire noté 3 | 25-11-2025 | 5% |
| Projet 3 | Code: 05-12-2025 23:59 h | 10% |
| Présentation: 09-12-2025 | 10% | |
| Examen final | 15-12-2025 18h-21h | 30% |
En raison du contenu tant théorique que pratique du cours, il faut :
- Un minimum de 50% aux examens, 60% aux TPs, et 60% sur toute la matière, pour réussir le cours.
- Un minimum de 60% aux examens pour avoir une note supérieure à B-
- Un minimum de 70% aux examens pour avoir une note supérieure à A-
Usage d'outils d'IA génerative
L'usage d'outils d'IA générative dans la production des soumissions notés (code, rapports, examen) est strictement et formellement interdit. Différents outils de détection seront utilisés.
La détection de quelconque outil d'IA générative est considéré une tentative de plagiat.
Projects
- Les trois projets doivent être réalisés en équipe de trois.
- Tous les membres de l’équipe doivent participer à toutes les parties du travail de chaque projet.
- Les laboratoires notés seront réalisés individuellement.
Soumission tardive
- Un travail remis en retard reçoit la note zéro à moins d'avoir fait l'objet d'une entente préalable avec le professeur.
- Le détail des conditions de réalisation de chaque travail est précisé avec la description du travail.
Examens
Les examens se dérouleront en présentiel durant la période indiquée à l’horaire. Aucun document ou appareil électronique n'est permis durant l'examen.
Matériel
Ce cours est axé sur la pratique, c’est-à-dire qu’il y aura des exemples de programmation en direct à chaque séance.
Avertissement
Les séances de programmation en direct sont de simples démonstrations, où vous pouvez découvrir des possibilités conceptuelles. Il est absolument essentiel que vous acquériez une maîtrise pratique des concepts vus en classe en assistant aux laboratoires et en résolvant les exercices.
Pas de diapositives
Il n’y aura pas de diapositives pour ce cours. Toute l’information est communiquée via ce site web.
- La présence en classe n’est pas optionnelle.
- De nombreuses informations et exemples illustratifs seront présentés exclusivement en classe.
- Vous êtes censé décider vous-même ce qui est pertinent et prendre des notes supplémentaires.
Version PDF
Vous pouvez télécharger le matériel du cours sous forme de livre PDF en utilisant ce lien.
Remarque : Le lien est actuellement en maintenance, il y a quelques problèmes avec le rendu des diagrammes dans la version PDF.
Vérifiez régulièrement les mises à jour
Par nature, la version PDF est une capture statique et ne se mettra pas automatiquement à jour sur votre ordinateur lorsque du nouveau contenu ou des corrections sont ajoutés à la version web. Il est de votre responsabilité de vérifier régulièrement que vous travaillez avec la version la plus récente.
Recherche de contenu
- Dans ce cours, vous devez abstraire et combiner des connaissances à travers les différentes unités.
- Pour faciliter la recherche d’exemples et de définitions, cette page est entièrement indexée.
Utilisez la fonction de recherche
Utilisez la fonction de recherche en haut à droite pour naviguer rapidement dans le matériel du cours.
Jeu
- Tout au long de vos TPs, vous allez implémenter le jeu de cartes Skyjo (et plus tard certaines extensions).
- Skyjo est un jeu de cartes court et amusant, mais ses mécanismes sont suffisamment complexes pour permettre une modélisation et une conception logicielle sérieuses.
- La meilleure préparation pour coder (ou concevoir) un projet logiciel est de bien comprendre les exigences. C’est
pourquoi je vous invite à jouer régulièrement à ce jeu avec vos coéquipiers.
Deux exemplaires du jeu peuvent être empruntés temporairement à mon bureau.
Les règles sont disponibles en PDF ici.
Règles de base
- Skyjo est un jeu de cartes, avec un paquet allant de
-2à12.- Les cartes ne sont pas uniques, il existe plusieurs
-2, plusieurs-1, etc. - Le nombre indiqué sur une carte correspond au nombre de points qu’elle vaut.
- Les cartes ne sont pas uniques, il existe plusieurs
- L’objectif pour gagner à Skyjo est d’accumuler le moins de points possible.
- Après chaque manche, les points sont ajoutés au total de chaque joueur.
- Le jeu est répété autant de manches qu’il faut pour qu’un joueur dépasse 100 points.
- Le gagnant est le joueur qui a le moins de points à la fin de la partie.
Manches de Skyjo
-
Le jeu comporte deux piles :
- Une pile de cartes cachées
- Une pile de cartes défaussées (ouverte)
-
Chaque joueur commence avec une matrice de cartes
4 x 3:

-
À tour de rôle, chaque joueur révèle ou remplace progressivement ses cartes :

-
La manche se termine lorsque le premier joueur a toutes ses cartes révélées. Chaque joueur compte alors son total en additionnant ses cartes révélées :

Crédit image : BoardGamesGeek.com
Un petit rebondissement
Si le joueur qui termine une manche n’a pas le plus petit total, son score est doublé (comme pénalité).
Tours de Skyjo
- Évidemment, le jeu serait plutôt ennuyeux si la seule action possible était de révéler une carte.
- Au tour d’un joueur, il peut choisir exactement une des deux actions possibles :
- Prendre la carte du dessus de la pile de défausse : Le joueur remplace l’une de ses cartes (qu’elle soit révélée ou cachée) par la carte prise de la pile de défausse. Il n’a pas le droit de regarder ses cartes cachées avant de faire son choix. La carte remplacée est placée publiquement sur la pile de défausse.
- Prendre la carte du dessus de la pile cachée : Le joueur révèle la nouvelle carte puis décide s’il...
- ...rejette la carte : La carte est placée sur la pile de défausse, mais le joueur doit révéler une de ses cartes encore cachées.
- ...accepte la carte : Il remplace une de ses cartes, suivant le même mécanisme que si la carte provenait de la pile de défausse.
Action spéciale
Il existe une règle spéciale qui peut s’appliquer à la fin de chaque tour : si un joueur a 3 fois la même carte dans une colonne, il peut éliminer toute la colonne.
- Cela est optionnel et ne compte pas comme une action distincte.
- Ensuite, le joueur a une colonne de moins.
Techniquement, l’action spéciale peut être déclenchée plusieurs fois, ce qui peut mener à une matrice entièrement vide.
Littérature
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns
- Iam Summerville - Software Engineering
- Allan Vermeulen - Elements of Java Style
- Martin Fowler - Refactoring
- Sedgewick - Basic data structures in Java
- Grady Booch - UML
- Sonatype: Maven, the definitive guide
- Head First - Design Patterns
- Bertrand Meyer - Object-Oriented Software Construction
- Tom Benner - Naming Things
Logiciels
Assurez-vous que les éléments suivants sont installés sur votre système :
- Ligne de commande Bash (si vous êtes sur Windows, installez WSL ou installez Linux)
- IntelliJ IDE Ultimate (Licence gratuite "Ultimate version" pour les étudiants de l’UQAM)
- Java 24
- Maven 3.9.11
- (JetUML, plus de détails plus tard)
Installez tous les logiciels AVANT la première séance de laboratoire !
Assurez-vous d’avoir une ligne de commande bash, IntelliJ, Java 24 et Maven 3.9.11 AVANT la première séance de laboratoire. Si vous n’avez pas installé les logiciels, vous ALLEZ prendre du retard dès le premier jour. C’est votre responsabilité d’arriver préparé aux séances de laboratoire.
Atelier 01
Voici le lien vers la première unité d'atelier : Lab 01