Université du Québec en Outaouais Département d'informatique et d'ingénierie
Sigle : INF1573  Gr. 01
Titre : Programmation II
Session : Hiver 2017  Horaire et local
Professeur : Colmenares, Giancarlo
1. Description du cours paraissant à l'annuaire :

Objectifs

Approfondir les concepts de la programmation orientée-objet. Sensibiliser au développement de programmes de qualité.

Contenu

Types abstraits, polymorphisme, généricité, événements. Utilisation de librairies (JDK, STL ou similaire). Récursivité. Vérification, tests et documentation de programmes. Présentation des langages C et C++, discussion de certains concepts dans le contexte du langage Java : passage de paramètres, pointeurs, structures, "templates", etc. Notions d'analyse numérique: précision.
2. Objectifs spécifiques du cours :
  1. Maîtriser les concepts de la programmation objet et leurs applications
  2. Être capable d'analyser les conséquences d'utilisation des concepts objet
  3. Acquérir des connaissances sur les composantes JDK permettant de faire la programmation par événements
  4. Acquérir des expériences pour développer des interfaces graphiques basées sur la programmation par événements
  5. Acquérir des connaissances sur les critères de qualité de la programmation par objet
  6. Expérimenter les méthodes d'analyse de qualité de la programmation incluant l'application des concepts objets et leurs impacts.
  7. Distinguer la différence de la résolution de problèmes par les méthodes itératives et les méthodes récursives
  8. Maîtriser l'application des concepts objet sur deux langages différents : JAVA et C++

Ce cours couvre 3 des 12 qualités requises des diplômés telle que définies dans les normes d'agrément des programmes de génie au Canada. (http://www.engineerscanada.ca/fr/ressources-en-matiere-dagrement) :

a. Qualité 1 : Connaissance en génie

b. Qualité 2 : Analyse de problèmes

c. Qualité 5 : Utilisation d'outils d'ingénierie

Les qualités 2 et 5 sont mesurées dans ce cours pour fins de rétroaction

Objectifs spécifiques Qualité Indicateurs Introduit Développé Utilisé
1. Maîtriser les concepts de la programmation objet et leurs applications
2
2. Formuler un processus de résolution de problème, comprenant des approximations et des hypothèses.
x
2. Être capable d'analyser les conséquences d'utilisation des concepts objet
2
4. Évaluer les résultats obtenus et formuler des conclusions
x
1. Acquérir des expériences pour développer des interfaces graphiques basées sur la programmation par événements
5
2. Utiliser les outils, techniques de mesure, modèles ou simulations appropriés
x
3. Stratégies pédagogiques :
Les formules pédagogiques suivantes seront utilisées :
  • L'enseignement est dispensé sous forme magistrale (3h/semaine). Des exercices seront donnés durant ces séances pour illustrer les notions nouvellement introduites.
  • Les étudiants doivent participer en classe pour mieux saisir les notions qui seront présentées pendant le cours.
  • Des séances de travaux dirigés (2h/séance) viendront appuyer les séances de cours. Ces séances se font en présence d'un assistant. La présence des étudiants est obligatoire.
4. Heures de disponibilité ou modalités pour rendez-vous :
Consultations : mardi : 10 h à 12 h ou sur rendez-vous.
5. Plan détaillé du cours sur 15 semaines :
Semaine Thèmes Dates
1    Introduction
  • Plan du cours
  • Présentation des concepts objets :
    1. Concepts de classes et objets
    2. Concepts d'héritage et polymorphisme
    3. Concepts d'encapsulation
  • Notions de généricité
  • Notions sur les types abstraits
11 jan. 2017 
2    Programmation orientée objet: Différentes formes d'héritage et notions sur la réutilisation
  • Introduction
  • Relation d'héritage
  • Étude de cas

Travail dirigé #1 : Le lundi 16 janvier ou le jeudi 19 janvier 2017 : Les Concepts objet

18 jan. 2017 
3    Programmation orientée objet (suite) : Polymorphisme
  • Introduction
  • Classes et méthodes abstraites
  • Études de cas
  • Énoncé du devoir 1

Travail dirigé #2 : Le lundi 23 janvier ou le jeudi 26 janvier 2017 : Les Concepts objet (Suite - TD 1)

25 jan. 2017 
4    Programmation par événements
  • Les composantes graphiques
  • Les Applets
  • Les swings
  • Études de cas

Travail dirigé #3 : Le lundi 30 janvier ou le jeudi 2 février 2017 : Applications : relations entre les classes et héritage

01 fév. 2017 
5    Principes de qualité de la programmation
  • Introduction
  • Tests de vérification

Travail dirigé #4 : Le lundi 6 février ou le jeudi 9 février 2017 : Utilisation du polymorphisme

08 fév. 2017 
6    Qualité de la programmation (suite)
  • Étude de cas
  • Révision pour l'examen intra
  • Énoncé du devoir 2

Travail dirigé #5 : Le lundi 13 février ou le jeudi 16 février 2017 : La programmation par événements

15 fév. 2017 
7    Qualité de la programmation (suite)
  • Documentation des programmes

Travail dirigé #6 : Le lundi 20 février ou le jeudi 23 février 2017 : Analyse de la qualité de la programmation

22 fév. 2017 
8    Semaine d'études 01 mars 2017 
9    Examen de mi-session (2 heures)
  • Le traitement des exceptions
08 mars 2017 
10    Le traitement des exceptions
  • Bases de traitements des exceptions
  • Exemples de classes d'exceptions
  • Déclarations de nouveaux types d'exception

Travail dirigé #7 : Le lundi 6 mars ou le jeudi 9 mars 2017 : Concepts objet en C++ - Partie 1

15 mars 2017 
11    Récursivité
  • Concepts de récursivité
  • Exemples utilisant la récursivité
  • Récursivité vs itération
  • Énoncé du devoir 3

Travail dirigé #8 : Le lundi 13 mars ou le jeudi 16 mars 2017 : Concepts objet en C++ - Partie 2

22 mars 2017 
12    Étude de cas
  • Résolution de problèmes d'analyse numérique

Travail dirigé #9 : Le lundi 20 mars ou le jeudi 23 mars 2017 : Concepts objet en C++ - Partie 3

29 mars 2017 
13    Java vs C++ : héritage multiple, amies, fonctions virtuelles, surcharge des opérateurs, templates, pointeurs

Travail dirigé #10 : Le lundi 27 mars ou le jeudi 30 mars 2017 : Concepts objet en C++ - Partie 4

05 avr. 2017 
14    Révision et préparation de l'examen final 12 avr. 2017 
15    Examen final 19 avr. 2017 
6. Évaluation du cours :

Il faut obtenir au moins 50 % de la note aux examens (mi-session et final) pour que les notes des autres travaux (devoirs et Tests en classe) soient prises en compte dans le calcul de la moyenne finale.

Outils d'évaluation Pondération Indicateurs évalués
Devoir 2
15 %
5.2, 2.2 et 2.4
Examen intra
25 %
2.2 et 2.4
Examen final
35 %
2.2 et 2.4
Travaux dirigés : 5 %
5 %
Devoirs 1 et 3
20 %

Par indicateur mesuré, on entend qu'à la fin du cours, un niveau de performance (0, 1, 2, 3) est donné pour chaque indicateur et pour chaque étudiant selon la grille ci-dessous :

Indicateurs Niveau 0 Niveau 1 Niveau 2 Niveau 3
2.2 - Formuler un processus de résolution de problème, comprenant des approximations et des hypothèses. Formulation du processus de résolution inacceptable et traitement inadéquat des approximations et des hypothèses Formulation du processus de résolution acceptable, mais traitement partiel des approximations et des hypothèses Formulation du processus de résolution et traitements des approximations et des hypothèses acceptables Formulation du processus de résolution e traitement des approximations et des hypothèses remarquable
2.4 - Évaluer les résultats obtenus et formuler des conclusions. Évaluation et/ou conclusions inexistantes Évaluation et conclusions partielles Évaluation et conclusions acceptables Évaluation et conclusions remarquables
5.2 - Utiliser les outils, techniques de mesure, modèles ou simulations appropriés. Utilisation inadéquate ou inexistante Utilisation partielle Utilisation adéquate Utilisation remarquable
7. Politiques départementales et institutionnelles :
8. Principales références :
Les notes de cours représentent la principale référence. Les étudiants doivent aussi consulter régulièrement des documents parmi ceux qui seront suggérés et particulièrement ceux qui seront mis en réserve à la bibliothèque.

    Non-obligatoires mais fortement recommandés :

    1. Object-Oriented Problem Solving. Java, Java, Java. Ralph Morelli, Prentice-Hall. ISBN 0-13-033370-0.
    2. Java Comment Programmer, 6e édition. H. M. Deitel et P.J. Deitel. Reynald Goulet, 2002. ISBN 2893772544.

    Autres références - à consulter:

  • On To Java. P. H. Winston et S. Narasimhan, 3rd Edition (version en ligne).
  • Object-Oriented Programming with Java An Introduction, D. J. Barnes, Prentice-Hall, ISBN 0-13-086900-7.
  • Understanding Object-Oriented Programming with Java. T. Budd, Addison-Wesley, ISBN 0-201-61273-9.
  • An Introduction to Object-Oriented Programming third edition, T. Budd, Addison-Wesley. ISBN: 0-201-76031-2.
  • The Java Class Libraries Second Edition, Volume 1. P. Chan, R. Lee and D. Kramer. Addison-Wesley, ISBN:0-201-31002-3.
  • Object-Oriented Programming with C++ and Smalltalk, Caleb Drake, Prentice-Hall. ISBN: 0-13-103797-8.
  • Bertrand Meyer : Object Oriented Software Construction : Prentice Hall.
9. Page Web du cours :
https://moodle.uqo.ca