ntro.ca

        • Contrats de classe
        • Liens utiles
        • Calendrier
        • Calendrier groupe 2
        • Calendrier groupes 1, 3
        • Structure du cours
        • Évaluations
        • Matériel à se procurer
        • Les profs
          • Marc-Olivier Tremblay
          • Mathieu Bergeron
        • Module 1.1: installation + trier des cartes
        • Module 1.2: rappels POO
        • Module 1.3: tableau d'objets
        • Examen 1
        • Module 2.1: données JSON
        • Module 2.2: données en Java
        • Module 2.3: récursivité
        • Examen 2
        • Module 3.1: structure générique
        • Module 3.2: efficacité (1)
        • Module 3.3: efficacité (2)
        • Examen 3
        • Module 4.1: liste naïve
        • Module 4.2: liste par tableau
        • Module 4.3: liste chaînée
        • Examen 4
        • Module 5.1: mappage naïf
        • Module 5.2: mappage par hachage
        • Module 5.3: mappage par arbre
        • Examen 5
        • Équipes
          • Horaire groupe 1
          • Horaire groupe 2
          • Horaire groupe 3
          • Groupe 1
          • Groupe 2
          • Groupe 3
        • Projets vedettes 2022
        • Projets vedettes 2023
        • Projets vedettes 2024
        • Survol
        • Structure
        • Calendrier
        • Calendrier des séances
        • Évaluations
        • Exemples de jeu
        • Exemples de pages
        • Réponses à vos questions
        • Module 1: créer le projet
        • Module 2: concevoir l'application
        • Module 3: vues NtroFx
        • Module 4: modèle et navigation
        • Module 5: ajouter le dorsal, modifier le modèle
        • Module 7: améliorer l'affichage
        • Module 8: jeu en 2d
        • Module 9: client/serveur
        • Module 10: plusieurs instances du même modèle
        • TP1
        • Examen 1
        • TP2
        • Examen 2
        • Projet de fin de session
      • Ajout Format JSON
        • Calendrier
        • Évaluations
        • Structure du cours
        • Contrat de classe
        • Le prof
        • 01: Windows et Word
          • Astuces et raccourcis
        • 02: Word
        • 03: Word
          • Exercice Word: insertion d'éléments spéciaux
          • Exercice Word: tableaux
        • 04: Word
          • Exercice Word: références
          • TP01: Word (15%)
        • 05: PowerPoint
          • TP02: PowerPoint (10%)
        • 06: Examen Word (20%)
        • 07: Excel
        • 08: Excel
        • 09: Excel
          • TP03: Excel (15%)
        • 10: Excel
        • 11: Examen Excel (20%)
        • 12: Access
        • 13: Access
        • 14: Access
        • 15: Examen Access
      • Sondage H2023 (dept. info)
      • Vision H2023 (dept. info)
      • P1) exercices interactifs de lecture
      • P2) transition Excel vers Python
        • Atelier 2: un exemple
      • Index
      • Point de vue sur l'IA
    Théorie 1.2.0: Code de librairie Vs code d'application
    • Théorie 1.2.0: Code de librairie Vs code d’application
      • Programmeur de librairie Vs programmeur d’application
      • Pour écrire du code lisible
      • Un exemple
      • Et les structures de données?

    Théorie 1.2.0: Code de librairie Vs code d’application #

    1. Code de librairie: classes conçues pour être utilisées dans plusieurs programmes
    2. Code d’application: classes spécifiques à un programme

    Programmeur de librairie Vs programmeur d’application #

    • Pour comprendre la différence, imaginer trois programmeurs:

      1. Alice programme la librairie art.jar qui fait de l’art ascii

      2. Bob programme banner qui affiche des messages:

         ######   #######  #     #        #  #######  #     #  ######   
         #     #  #     #  ##    #        #  #     #  #     #  #     #  
         #     #  #     #  # #   #        #  #     #  #     #  #     #  
         ######   #     #  #  #  #        #  #     #  #     #  ######   
         #     #  #     #  #   # #  #     #  #     #  #     #  #   #    
         #     #  #     #  #    ##  #     #  #     #  #     #  #    #   
         ######   #######  #     #   #####   #######   #####   #     #  
        
      3. Charles programme cowsay qui affiche des bulles de dialogue:

          _________
         < Bonjour >
          ---------
                 \   ^__^
                  \  (oo)\_______
                     (__)\       )\/\
                         ||----w |
                         ||     ||
        
    • Sans connaître à l’avance le code que Bob et Charles vont écrire, comment Alice peut-elle écrire du code utile pour les deux?

    • La clé réside dans la notion de contrat ($[link ../../../01/03/theorie/](théorie 1.3))

    • C’est comme si Alice disait:

      • Pour utiliser mon code de librairie, vous devez définir:
        • Une classe Dessin avec les méthodes suivantes:

          • int obtenirLargeur()
          • int obtenirHauteur()
          • char obtenirSymbole(int x, int y)
        • Ensuite, vous devez créer un objet Dessin et appeler ma méthode:

          • afficherDessin(Dessin dessin)
    • Bob et Charles doivent remplir le contrat.

    • Par exemple, Bob pourrait se dire:

      • J’ai un String message que je veux afficher en gros
      • Je vais créer ma classe Message extends Dessin
        • ma méthode obtenirHauteur va retourner 7
        • ma méthode obtenirLargeur va retourner message.length() * 5
        • ma méthode obtenirSymbole(int x, int y) va:
          • chercher de quel lettre il s’agit
          • chercher dans cette lettre quel caractère afficher
          • retourner ce caractère
      • Je vais ensuite appeler afficherDessin(new Message("Bonjour"));
    • Alice peut écrire son code sans savoir comment Bob va remplir le contrat

    • P.ex. l’appel afficherDessin(new Message("Bonjour")) fonctionne puisque:

      • Message extends Dessin, c-à-d
      • la classe Message se comporte comme le Dessin décrit par Alice

    Pour écrire du code lisible #

    • Un bon truc est d’écrire comme s’il s’agissait de code de librairie

    • Dans ma classe Foo, je me demande:

      • Pour que Foo fonctionne, quel contrat est-ce que le reste du code doit remplir?
    • Je définit ce contrat en écrivant des Interfaces et des Classes abstraites

    • Ailleurs dans le programme, je remplis le contrat avec des extends et des implements

    • (la théorie sur les interfaces et les classes abstraites plus tard dans le cours)

    Un exemple #

    Et les structures de données? #

    • Les structures de données sont des classes de librairie

    • Une classe Tableau doit fonctionner peu importe le contenu du tableau

      • (entiers, rééels, chaînes, objets)
    • Comment définir une classe Tableau générale?

    • Comment trier le tableau sans connaître le type des éléments?

    • (la réponse à ces questions plus tard dans le cours)

    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike
    • Théorie 1.2.0: Code de librairie Vs code d’application
      • Programmeur de librairie Vs programmeur d’application
      • Pour écrire du code lisible
      • Un exemple
      • Et les structures de données?