% INF2120 — Programmation II % UQAM — Département d'informatique % Plan de cours — Été 2022 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Laforest, Louise PK-4725 Enseignement ------------- Lord, Mélanie PK-4115 Groupes: 020 Description du cours ==================== Approfondir les concepts de la programmation orientée-objet, de mise au point et de test de composants logiciels. Identification et définition des classes d'une solution logicielle. Relations entre les classes : composition et héritage. Classes abstraites et polymorphisme. Algorithmes récursifs simples. Structures de données classiques : piles, files, listes et arbres binaires de recherche. Techniques classiques de recherche (séquentielle et binaire) et de tri. Gestion des événements et des exceptions, fils d'exécution. Conception de paquetages Introduction à un environnement de développement logiciel. Préalables académiques : INF1120 Programmation I Objectif du cours ================= - Approfondir les méthodes de conception et de programmation orientée-objet; - Spécialisation des classes; - Connaître les structures de données fondamentales et savoir les choisir et les utiliser; - Connaître les techniques de base de la recherche de données et des tris; - Acquérir des connaissances de base en génie logiciel; - S'initier aux étapes de la réalisation d'un produit logiciel; - Stratégies de conception, de mise au point et de tests; - Documentation du logiciel; - Approfondir le langage Java; - À la fin de la session, l'étudiant(e) devrait être en mesure d'élaborer un programme structuré et fonctionnel en utilisant les notions de génie logiciel étudiées au cours et en se servant des différentes structures de données fondamentales. Contenu du cours ================ 1. Retour sur le concept de classe ---------------------------------- - Variable d'instance, de classe et valeur constante - Accès aux composants d'une classe - Notion d'encapsulation - Méthode d'instance et de classe - Constructeur 2. Notion d'héritage -------------------- - Contexte d'utilisation - Classe Object - Constructeur de la sous-classe et Super - Héritage et méthodes : redéfinition, surcharge - Contrôler l'héritage : Final - Notion de polymorphisme - Conversion de type entre les classes d'une hiérarchie 3. Junit -------- - Utilisation de Junit pour les tests 4. Introduction aux collections ------------------------------- - Notion de collection en Java - Notion de type abstrait (TDA) - Notion de structure de donnée a) Introduction à `ArrayList` b) Notion d'interface -- Notion de contrat -- Utilisation vs implémentation c) Introduction au TDA Pile -- Interface des services sur Pile -- Exemples d'utilisation -- Implémentation avec `ArrayList` d) Introduction au TDA File -- Interface des services sur File -- Exemples d'utilisation -- Implémentation avec `ArrayList` e) Notion de paquetage 5. Introduction à la récursitivé -------------------------------- - Fonctionnement : cas de base et convergence - Trace d'exécution - Conception d'une méthode récursive - Conversion d'une méthode récursive en une méthode itérative 6. Introduction aux listes chaînées ----------------------------------- - Avantages - Notion de Noeud ou Maillon de liste - Notion de chaînage - Nouvelles implémentations des TDA Pile et File avec liste chaînée - Insertion et retrait dans une liste chaînée - Notion de remorque de fin de liste - Parcours d'une liste - Liste ordonnée - Notion de liste doublement chaînée 7. Introduction aux interfaces Java. ------------------------------------ - Déclaration d'interface, implémentation et code par défaut. - Présentation des interfaces `Comparable`, `Iterable`, `Iterator`. - Boucle `for` augmentée. - Classe anonyme. - Présentation des interfaces fonctionnelles : `Runnable`, `Function`, `Supplier`, `Consumer`, `Predicate`.\ - Lambda - Utilisation des `Thread`, - Utilisation de base des `Stream`. 8. Techniques de recherche -------------------------- - Recherche séquentielle non ordonnée et ordonnée - Recherche binaire - Notation grand-O - Arbre binaire de recherche : Construction, insertion, recherche, parcours préfixe, postfixe et infixe. 9. Techniques de tri -------------------- - Tris simples (O(n2)) - Sélection - Échange (tri à bulles) - Insertion - Tri rapide : QuickSort Communication ============= Une page générale du cours est disponible sur Moodle. Elle contient les informations essentielles à tous les groupes cours et de nombreuses ressources. Chaque groupe-cours a également une page Moodle dédiée qui rassemble les informations et les documents spécifiques à chaque groupe. Formule pédagogique et matériel requis ====================================== Les cours et les démonstrations auront lieu aux jours et heures indiqués dans la description générale du cours fournie ici : . Vous aurez besoin d'un ordinateur personnel sur lequel vous devez pouvoir installer un environnement de développement Java pour réaliser les travaux et laboratoires. ```{=html}

```   ```{=html}

``` Modalités d'évaluation ====================== DESCRIPTION SOMMAIRE DATE PONDÉRATION ---------------------- ----------------- ------------- Examen intra 23 juin 2022 30% Examen final 11 août 2022 25% Quiz 1 9 juin 2022 4 % Quiz 2 28 juillet 2022 4 % TP 1 \* 11% TP 2 \* 13% TP 3 \* 13% \* Disponibles sur le site moodle du cours Aucune reprise possible pour les quiz, peu importe la raison. Règles concernant le seuil de passage ------------------------------------- Pour passer le cours, vous devez avoir au moins 50 % comme note finale. Si la note moyenne pondérée des examens est inférieure à 50 % ou si la note moyenne pondérée des travaux pratiques est inférieure à 50 %, la mention échec (E) sera automatiquement attribuée au cours. La note finale littérale pour le trimestre sera attribuée en fonction de l'atteinte des objectifs spécifiques à travers les évaluations. La distribution des résultats dans le groupe pourrait aussi être utilisée. Aucune autre opportunité (travail supplémentaire, etc.) afin augmenter le nombre de points ne sera accordée. Travaux pratiques ----------------- - À moins d'avis contraire, les travaux pratiques sont strictement individuels. - En cas de doute sur l'originalité des travaux, un rapport sera soumis au comité sur les infractions académiques. - Tous les cas de plagiat seront référés au comité de discipline de la Faculté. La sanction peut aller de la note 0 pour le travail ou pour l'examen jusqu'à l'exclusion de l'université. - Il est de la responsabilité de l'étudiant de faire des copies de sauvegarde de ses travaux. Les étudiants doivent consulter régulièrement le site Web des cours de programmation. NOUS RAPPELONS AUX ÉTUDIANTS QU'ILS DOIVENT S'ATTENDRE À FOURNIR UNE MOYENNE DE 6 HEURES DE TRAVAIL PERSONNEL PAR SEMAINE POUR UN COURS DE TROIS CRÉDITS (TOTAL DE 90 HEURES). Médiagraphie ============ - VR LEWIS & CHASE -- *Java Software Structures* -- 3E ÉDITION, ADDISON-WESLEY, 2010. - VR DELANNOY, C -- *Programmer en Java : Couvre Java 10 à 14* -- 11E ÉDITION, EYROLLES, 2020. - LR -- *Environnement de développement BlueJ (gratuit)* - LR -- *Environnement de développement Eclipse (gratuit)* - LR -- *Environnement de développement NetBeans (gratuit)*