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
        • Projets vedettes 2025
        • 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
        • Calendrier
        • Structure du cours
        • Évaluations
        • 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
      • Jquery
      • Jquery Ui
      • Point de vue sur l'IA
    Modele
    • Théorie: notion de modèle
      • Le modèle contient les données d’une page
      • Le modèle contient des valeurs
      • Le modèle est formé d’un ou plusieurs objets
      • Le modèle est indépendant de la logique du programme
      • Le modèle implante la logique du domaine
      • Truc: déléguer aux valeurs

    Théorie: notion de modèle #

    Le modèle contient les données d’une page #

    1. Imaginons un ModeleTexte pour du texte structuré en paragraphes et en phrases

    2. En Ntro, il s’agit d’une classe Java qui implante Model

      public class ModeleTexte implements Model {
      
    3. On doit déclarer chaque modèle dans le client:

      
      public class AppPong implements NtroAppFx {
      
          // ...
      
          @Override
          public void registerModels(ModelRegistrar registrar) {
      
              registrar.registerModel(ModeleTexte.class);
      
          }
      
    4. Les attributs de la classe déterminent les données à mémoriser dans le modèle

      public class ModeleTexte implements Model {
      
      	private String texteBrut;
      
      }
      

    Le modèle contient des valeurs #

    1. Une Valeur est un objet qui n’est pas une valeur de base comme String ou int

    2. Pour notre exemple ModeleTexte, imaginons deux valeurs:

      • Paragraphe
      • Phrase
    3. En Ntro, une valeur est une classe Java qui implante Value

      public class Paragraphe implements ModelValue {
      
      	private String paragrapheBrut;
      
      }
      
      public class Phrase implements ModelValue  {
      
      	private String phraseBrute;
      
      }
      
    4. On doit déclarer chaque valeur dans le client

      
      public class AppPong implements NtroAppFx {
      
          // ...
      
          @Override
          public void registerModels(ModelRegistrar registrar) {
      
              // ...
      
              registrar.registerValue(Paragraphe.class);
              registrar.registerValue(Phrase.class);
          }
      
    5. Le ModeleTexte peut maintenant mémoriser une liste de paragraphes

      public class ModeleTexte implements Model {
      
      	private String texteBrut;
      
      	private List<Paragraphe> paragraphes = new ArrayList<>();
      
      }
      
    6. Chaque Paragraphe peut mémoriser une liste de phrases

      public class Paragraphe implements ModelValue {
      
      	private String paragrapheBrut;
      
      	private List<Phrase> phrases = new ArrayList<>();
      
      }
      

    Le modèle est formé d’un ou plusieurs objets #

    1. Typiquement, un modèle contient plusieurs objets

      • un objet principal (le modèle comme tel)
      • des objets secondaires, qui représentent des valeurs contenu dans le modèle

    Le modèle est indépendant de la logique du programme #

    1. Le modèle ne décide pas:

      • quand il est créé
      • où il est sauvegardé (fichier ou DB)
      • sur quelle vue il est affiché
      • après quel événement usager il doit être modifié
    2. Les tâches ci-haut appartiennent au dorsal ou au frontal

      • (ou au Contrôleur du patron MVC)

    Le modèle implante la logique du domaine #

    1. Le modèle décide:

      • quelles données mémoriser et afficher (mais pas comment les afficher)
      • comment modifier ces données
    2. La logique du domaine est spécifique au type de données qu’on représente, p.ex.

      • jeu d’échecs
        • comment bouger les pièces
      • logiciel d’impôts
        • comment calculer le total des revenus imposables
      • traitement de texte
        • où appliquer les alinéas (indentation au début d’un paragraphe)
    3. Dans notre exemple, on peut imaginer une méthode genererHtml

    Truc: déléguer aux valeurs #

    1. La division du modèle en valeurs facilite l’implantation de genererHtml

      • le ModeleTexte délègue la génération de chaque paragraphe
      public class ModeleTexte implements Model {
      
          // ...
      
      	public String genererHtml() {
      		String html = "";
      
      		for(Paragraphe paragraphe : paragraphes) {
      			html += paragraphe.genererHtml();
      		}
      
      		return html;
      	}
      }
      
      • le Paragraphe délègue la génération de chaque phrase
      public class Paragraphe implements ModelValue {
      
          // ...
      
      	public String genererHtml() {
      		String html = "<p>";
      
      		for(Phrase phrase : phrases) {
      			html += phrase.genererHtml();
      		}
      
      		html += "</p>";
      
      		return html;
      	}
      
      }
      
      • la Phrase est simple à générer
      public class Phrase implements ModelValue  {
      
          // ...
      
      	public String genererHtml() {
      		return phraseBrute + ". ";
      	}
      
      }
      
    2. Voici le résultat

      <p>Phrase a1. Phrase a2. Phrase a3. </p><p>Phrase b1. Phrase b2. </p>
      
    3. On peut aussi ajouter des retours de ligne \n et des indentations \t

      <p>
          Phrase a1.
          Phrase a2.
          Phrase a3.
      </p>
      <p>
          Phrase b1.
          Phrase b2.
      </p>
      
      
    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike
    • Théorie: notion de modèle
      • Le modèle contient les données d’une page
      • Le modèle contient des valeurs
      • Le modèle est formé d’un ou plusieurs objets
      • Le modèle est indépendant de la logique du programme
      • Le modèle implante la logique du domaine
      • Truc: déléguer aux valeurs