IFT1010 Programmation I

Département d'informatique et de
recherche opérationnelle

Hiver 2002


Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Notes de cours

Deux types de notes vous sont proposés ici:

  • les transparents accompagnant le livre de Lewis et Loftus disponibles sous deux formats répandus: powerpoint et pdf. Les originaux en anglais ainsi qu'une traduction en français réalisée par les enseignants de la session précédante sont disponibles de même que les programmes de ce livre couverts en exemples.
    Le cours suivra en grande partie ces transparents.
  • des brèves de cours qui résument très sommairement les points importants abordés en cours et proposent le cas échéant des exemples vus en cours mais non extraits du livre (un peu de variété ne fait pas de mal).
Mes bonnes résolutions de début d'année: Je ferai le maximum pour que cette page soit mise à jour avant chaque cours afin que vous puissiez vous y présenter avec les exemples que nous étudierons. D'avance mille excuses pour les fois où je n'y parviendrai pas.

Échange de bon procédé: Une bonne habitude consiste à lire les notes avant de vous présenter en classe. Ce 10-15 minutes vous permet d'arriver au cours avec une meilleure idée des points qui pourraient vous sembler plus difficiles à comprendre.


Acétates et programmes extraits de l'ouvrage de Lewis et Loftus

ChapitrePowerPoint (français)PowerPoint (anglais)PDF (français)PDF (français)
6 par page
PDF (anglais)Programmes Java (tar.gz)
Chap. 1 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 2 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 3 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 4 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 5 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 6 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 7 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 8 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 11 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz
Chap. 12 fichier ppt file ppt fichier pdf fichier pdf file pdf file tar.gz

Les fichiers contenant les programmes couverts en exemple sont aussi fournis dans un fichier tar.gz (tar gzipped). Pour les décompresser, vous devez utiliser la commande (sous unix): tar -zxvf pgmsxy.tar.gz ou xy sont à remplacer par les chiffres adéquats.

Cours après cours


  • [lundi 15 avril 2002] (1 heure) [chapitre12.pdf]

    dernier cours (section A)

    Notion de structures de données abstraites (suite et fin)

    • Les listes chaînées (suite et fin)
      • Que se passe-t-il si si je veux un élément de type primitif, plutôt qu'une référence à un objet dans mes maillons (MyLink) ?
      • Discussion sur les listes doublement chaînées
      • Implémentation d'une liste simplement chaînée (suite et fin)
    • Les tables de hachage (sous toute réserve)
    • Adieux déchirants (si affinités)

    Exemples complémentaires:

    • Une implémentation de la classe LinkedList disponible dans la librairie java: MyLinkedList.java
      et une classe pour réaliser des tests de cette implémentation: ListeTest.java
    • Comptons des mots dans un texte (un extrait de Jule Verne) avec des vecteurs; URLTest2.java et avec une table de hachage URLTest.java.
      Exécutez les et vérifier que la seconde version va beaucoup plus vite.


  • [jeudi 11 avril 2002] (2 heures) [chapitre12.pdf]

    Notion de structures de données abstraites

    • Les listes chaînées
      • Implémentation d'une liste simplement chaînée (to be continued)
      • Quelques mots sur les Exceptions
    • Les piles
      • ceux qui ont vraiment fait la démonstration 8 connaissent cette structure de donnée (pile d'assiettes).
        Le type en Java est: Stack
      • structure de type LILO (dernier entré, premier sorti)
    • Les queues (ou files)
      • principe du lineup à l'entrée de votre bar préféré.
        N'existe pas tel quel dans la librairie standard, mais s'implémente facilement à partir d'une liste par exemple.
      • structure de type FIFO (premiers entrés, premiers sortis)

    Exemples complémentaires:

    • Une implémentation de la classe LinkedList disponible dans la librairie java: MyLinkedList.java
      et une classe pour réaliser des tests de cette implémentation: ListeTest.java


  • [lundi 8 avril 2002] (1 heure) [chapitre11.pdf]

    • Récursivité (suite)
      • Réveil en douceur avec une implémentation récursive d'un algorithme récursif que nous avons jusque là codé de manière itérative (avec une boucle): les palindromes.
      • Trouvez une solution à un problème dont vous n'avez pas la solution, introduction au backtracking.

    Exemples complémentaires:

    • Deux versions récursives pour détecter si une chaîne est un palindrome: Palindrome.java
    • Un exemple de jeu éducatif (le cavalier d'Euler): Cavalier.java


  • [jeudi 4 avril 2002] (2 heures) [chapitre07.pdf] [chapitre11.pdf]

    • Héritage et classes abstraites
      • A quoi sert une classe abstraite, différence avec une interface
      • On ne peut pas créer un objet d'une classe abstraite
      • Exemple des employées (Lewis & Loftus)
    • Récursivité (ou attachez vos tuques)
      • définition, exemples
      • récursivité directe et indirecte
      • un classique: factoriel (illustration du principe de la récursivité)
      • une méthode de tri efficace récursive (quicksort)

    Exemples complémentaires:


  • [jeudi 28 mars 2002] (2 heures) [chapitre07.pdf]

    staring Michel Reid: héritage: prise II


  • [lundi 25 mars 2002] (1 heure) [chapitre07.pdf]

    staring Guy Lapalme: héritage: généralités et principes de base


  • [jeudi 21 mars 2002] (2 heures) [chapitre06.pdf] [chapitre07.pdf]
    • Les tableaux à deux dimensions (ou plus si affinités), suite et fin.
    • Survol de la classe Vector: pratique, pas vraiment efficace, quelques petits "pièges"

    Exemples complémentaires:

    • Un programme qui montre quelques points particuliers de la classe Vector: VectorTest.java


  • [lundi 18 mars 2002] (1 heure) [chapitre06.pdf]
    • Faites moi penser à vous reparler de swap (rapidement)
    • Trier des objets hétéroclites: vive le polymorphisme (suite)
    • Les tableaux à deux dimensions (ou plus si affinités).
    • Survol de la classe Vector: pratique, pas vraiment efficace, quelques petits "pièges"

    Exemples complémentaires:

    • Un programme qui montre quelques points particuliers de la classe Vector: VectorTest.java


  • [jeudi 14 mars 2002] (2 heures) [chapitre06.pdf]
    • Les tris (quelques algorithmes)
      • tri par sélection
      • tri par insertion
      • tri à bulle
      • notion de complexité
    • Trier des objets hétéroclites: vive le polymorphisme (prise I)

    Exemples complémentaires:

    • Une version étendue de la classe Sorts de Lewis et Loftus incluant le tri à bulle: Sorts.java
    • Un programme qui permet de tester la rapidité de plusieurs méthodes de tris: TestSorts.java


  • [lundi 11 mars 2002] (1 heure) [chapitre06.pdf]
    • Les tableaux (à une dimension) en Java
      • Passage d'un tableau en paramètre
      • Tableaux d'objets (attention les objets ne sont jamais crées automatiquement !)
      • La méthode main et la ligne de commande
      • Un objet peut contenir un tableau d'objets
      • Comment faire grandir un tableau ?

    Exemples complémentaires:

    • Illustration de la récupération des arguments de la ligne de commande: Main.java


  • [jeudi 28 février 2002] (2 heures) [chapitre04.pdf] [chapitre06.pdf]
    • Découper un code en méthodes (prise 2): rencontre avec une nouvelle classe: StringTokenizer, revoyures avec la classe String
    • Les tableaux (à une dimension) en Java
      • Un tableau est un objet => new
      • Programmeurs C: oubliez les déclarations de tableau du genre: int t [7]
      • Un tableau connait sa longueur (qui ne peut pas bouger)
      • Initialisations par défaut des éléments d'un tableau
      • L'accès à un élément d'un tableau est toujours vérifié (erreur d'exécution si un mauvais indice est spécifié)
      • Boucles et tableaux (attention aux indices)


  • [lundi 25 février 2002] (1 heure)
    • Correction de l'intra Hiver 2002


  • [jeudi 20 février 2002] (2 heures) [chapitre04.pdf] [chapitre05.pdf]
    • Révisions sur l'intra de la session Hiver 2001 (les lêves-tôt ayant déjà travaillé sur cet énoncé peuvent se lever plus tard, cette révision devrait prendre la première heure ou moins).
    • Passage d'objets en argument d'une méthode (prise 2)


  • [lundi 18 février 2002] (1 heure) [chapitre04.pdf] [chapitre05.pdf]
    • Les types de méthodes que l'on peut rencontrer dans une classe (suite):
      • méthodes de service
      • méthodes de l'interface,
      • assesseurs et modificateurs
      • toString, equals
      • les constructeurs
    • Le modificateur d'accès static
    • Quelques mots sur les mauvaises habitudes (pas de variables de classe inutiles, attention aux boucles mal organisées, etc)

    Exemples complémentaires:

    • Une autre version de la classe Rational.java du livre de Lewis et Loftus


  • [jeudi 14 février 2002] (2 heures) [chapitre04.pdf] [chapitre05.pdf]
    • Les classes
      • Passages d'arguments non primitifs (prise 1)
      • Surcharge des méthodes en JAVA
      • Les types de méthodes que l'on peut rencontrer dans une classe:
        • méthodes de service
        • méthodes de l'interface,
        • assesseurs et modificateurs
        • toString, equals
        • les constructeurs
      • Le modificateur d'accès static
      • Passage d'objets en argument d'une méthode (prise 2)

    Exemples complémentaires:


  • [lundi 11 février 2002] (1 heure) [chapitre04.pdf]
    • Il y a toujours plus simple ... Une version plus simple du programme qui affiche un X AfficheX.java (merci à Veronique Marie).
    • Les classes
      • Notion de portée d'un champ, distinction variable d'instance / variable locale
      • Mécanisme d'appel d'une méthode: paramètres effectifs et formels (ou muets)
      • Passage de paramètres en JAVA: toujours par valeur

    Exemples complémentaires:

    • Gloire (++) à votre compilateur Java qui vérifie pour vous que vos méthodes retournent bien quelque chose de cohérent avec ce qui est indiqué dans son entête: Secret.java


  • [jeudi 7 février 2002] (2 heures) [chapitre04.pdf]
    • Le contrôle du flux d'instructions (fin, cette fois-ci c'est vrai :-)
      • usage (peu recommandé) de break et continue dans les boucles
    • Les classes
      • Classe = moule/patron/canevas
      • Objet = instance/réalisation. Un objet est caractérisé par son état et son comportement
      • Création de notre première classe: champs et méthodes
      • Contrat d'une classe: l'encapsulation, modificateurs d'accès: public et private
      • Exemple de mauvaise encapsulation qui vérifie cependant les règles de bases de l'encapsulation: la classe Coin de votre livre...

    Exemples complémentaires:

    • Un exemple (pas simple) de boucles imbriquées: affichage d'un X à l'écran:DessineMoiUnX.java
    • L'exemple précédant a peut-être été trop vite, voici dans ce cas le même code mais plus détaillé: DessineMoiUnX2.java


  • [lundi 4 février 2002] (1 heure) [chapitre03.pdf]
    • Le contrôle du flux d'instructions (fin)
      1. Les boucles
        1. les boucles for
        2. les boucles imbriquées - Prise II

    Exemples complémentaires:


  • [jeudi 31 janvier 2002] (2 heures) [chapitre03.pdf]
    • Le contrôle du flux d'instructions
      1. Les boucles
        1. les boucles while
          • apprendre à compter
          • vérifier de la saisie
          • imbriquons les boucles - Prise I
        2. les boucles do-while
          • traitement fait au moins une fois
          • À ne pas confondre avec repeat - until d'autres langages

    Exemples complémentaires:

    Détendons-nous:


  • [lundi 28 janvier 2002] (1 heure) [chapitre03.pdf]
    • Comparer des flottants, des caractères, des Strings
    • Opérateurs de pré- et post- incrémention/décrémentation ++ et --
    • Le contrôle du flux d'instructions
      1. opérateur conditionnel (ternaire) ()? :

    Exemples complémentaires:

    • opérateurs de pré- et post- incrémentation/décrémentation: Tordu3.java


  • [jeudi 24 janvier 2002] (2 heures) [chapitre03.pdf]
    • Le contrôle du flux d'instructions
      1. instruction if-else (attention aux imbrications)
      2. instruction switch (attention au break)

    Exemples complémentaires:

    • attachement du else dans des if imbriqués: Tordu1.java
    • une version avec if imbriqués du programme GradeReport.java: GradeReportIf.java
    • notion d'effets de bords et gloire au compilateur javac: Tordu2.java


  • [lundi 21 janvier 2002] (1 heure) [chapitre02.pdf]

    À l'ordre du jour:

    • Utilisation de quelques classes "utiles": String, Math, etc.
    • Notion de package


  • [jeudi 17 janvier 2002] (2 heures) [chapitre02.pdf]

    À l'ordre du jour:

    • Les types "primitifs" de JAVA:
      1. les types entiers: byte, short, int, long
      2. les types "flottants": float, double
      3. les caractères: char. Les codes ASCII, l'unicode
      4. les booléens: boolean
    • Les expressions arithmétiques: composition d'opérandes et d'opérateurs
      1. attention aux priorités des opérateurs (consulter la [table des priorités])
      2. attention à l'associativité des opérateurs
    • Les conversions de type en JAVA
      1. conversions dégradantes vs les promotions de type
      2. une conversion peut arriver:
        1. lorsqu'elle est explicite (cast)
        2. dans une affectation
        3. dans une expression arithmétique

    Détendons-nous:


  • [lundi 14 janvier 2002] (1 heure) [chapitre02.pdf]

    Faites moi penser:

    • de vous dire que les fichiers sources en java doivent se nommer MonIdentificateur.java où MonIdentificateur est un nom de votre choix, respectant les règles de nommage des identificateurs.
    • de vous montrer comment lancer la machine virtuelle depuis emacs:
      ESC - X - shell (puis ENTER)
      Vous avez alors l'équivalent d'un terminal ouvert dans une fenêtre de emacs

    À l'ordre du jour:

    • Les littéraux "chaîne de caractères"
    • Variables: déclaration, affectation
    • Rencontre avec le type primitif: int


  • [jeudi 10 janvier 2002] (2 heures) [chapitre01f.pdf]

    Plan:

    • Zoom rapide sur l'intérieur d'un ordinateur (chapitre 1). En complément, voici quelques acétates extraites du cours IFT2030: [acétates].
    • Panorama des langages informatiques. Notions de langage machine, d'assembleur, de langages de haut-niveau, de compilateur et d'interpréteur.
    • Le cas de Java. Notion de machine virtuelle, de byte-code. Quelques mots sur les versions de Java. Swing/AWT.
    • Tout le monde a commencé par là: notre premier programme écrit en Java.
      • Apprendre un langage implique:
        1. la connaissance de ses éléments de base et des règles de composition de ces éléments (syntaxe)
        2. la connaissance de la sémantique du langage (que fait cette instruction ?)
      • Premier programme JAVA, première rencontre avec:
        1. les indentificateurs (réservés ou pas)
        2. les littéraux,
        3. les commentaires,
        4. l'indentation,
        5. les méthodes
        6. les objets (System.out.println())
      • Pour compiler (en byte-code) un fichier source java (ex: MonProgramme.java), il faut invoquer le compilateur:
        javac MonProgramme.java.
        Pour l'exécuter, il faut ensuite invoquer la machine virtuelle:
        java MonProgramme

    Détendons-nous:


  • [lundi 7 janvier 2002] (1 heure)

    • Tour d'horizon du cours IFT1010, conseils d'usage, etc.
    [top]


  • Dernière mise à jour : Tue Apr 16 18:37:32 EDT 2002
    dift1010@iro.umontreal.ca