% INF2120 — Programmation II % UQAM — Département d'informatique % Plan de cours — Été 2020 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Laforest, Louise PK-4725 poste 7790 Enseignement ------------- Lord, Mélanie PK-4115 poste 3699 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; - Connaître la conception d'une interface graphique (GUI) avec les composants de base; - 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 Modalités d'évaluation ====================== DESCRIPTION SOMMAIRE DATE PONDÉRATION ---------------------- ------ ------------- Mini test 1 \* 15% Mini test 2 \* 15% Mini test 3 \* 15% TP 1 \* 15% TP 2 \* 20% TP 3 \* 20% \* Disponibles sur le site moodle du cours Règles concernant le seuil de passage ------------------------------------- La note de passage du cours est de 60 %. 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é. - La politique concernant les retards pour les travaux pratiques est à la discrétion de chacun des enseignants. - 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 - Java 5 et 6* -- 6E ÉDITION, EYROLLES, 2009. - LR -- *Environnement de développement BlueJ (gratuit)* - LR -- *Environnement de développement Eclipse (gratuit)* - LR -- *Environnement de développement NetBeans (gratuit)*