Advertisement
CNAMusers123

exercice générique CNAM

Nov 6th, 2019
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //class interface donc 100% abstraite
  2. interface Mesurable {
  3.     length: number;
  4.     //nom: String;
  5. }
  6. //Trajet implémente l'interface Mesurable (créer/initialiser attr et corps de fonctions)
  7. /*Son rôle est de crée un objet Trajet qui possède:
  8.     -un nom et une distance en km
  9.     -afficher en 'string' ces caractèristiques
  10. */
  11. class Trajet implements Mesurable {
  12.     //attribut propre à Trajet
  13.     //nom: string;
  14.     private nom: String;
  15.     //crée attribut implémenté
  16.     public length: number
  17.  
  18.     //on instancie nos attribut
  19.     constructor(nom: string, length: number){
  20.         this.nom = nom;
  21.         //dont celui obligatoire (length)
  22.         this.length = length;
  23.     }
  24.    
  25.     //override de la méthode 'toString()'
  26.     /*on retourne un string qui contient:
  27.         -le nom et la taille de l'objet en cours d'utilisation
  28.     */
  29.     toString(): string {
  30.         return "Trajet "+this.nom+" de "+this.length+" Km";
  31.     }
  32. }
  33.  
  34. //class qui possède une spécificité générique <T qui hérite de l'interface 'Mesurable'>
  35. //si on avait hérité de Trajet, uniquement un Type Trajet aurait fonctionner donc pas String let chaineMinMax = new MinMax(chaines);
  36. //Elle permet de gérer la distance max et min de l'interface Mesurable
  37. class MinMax<T extends Mesurable> {
  38.     //Objets 'min' et 'max' de type générique. Pourquoi ?
  39.     //pour contenir le plus petit/grand élément dit 'Mesurable'
  40.     private min: T;
  41.     private max: T;
  42.  
  43.     /*Le constructeur recoit un paramètre générique qui est un tableau
  44.     Tableau qui contient 3 objets Trajet ou String
  45.     Sous la forme new Array( new instance Objet1, new instance Objet2, new instance Objet3)
  46.     pour instancier (obligatoire) les attributs générique (min et max) de façon 'arbitraire'
  47.     Pourquoi arbitraire ? car obligatoire (génériqueet permet d'être le point de départ de
  48.     la comparaison avec computeMinMax
  49.     */
  50.     constructor(t: Array<T>) {
  51.         /*contient:
  52.         -un objet (Object { nom: "a", length: 271 }) car [0]
  53.         -ou un String (chaineDe9) car [0]
  54.         */
  55.         this.min = t[0];
  56.         this.max = t[0];
  57.         //méthode qui recoit le tableau générique en paramètre
  58.         this.computeMinMax(t);
  59.     }
  60.  
  61.     //Méthode qui recoit un tableau générique
  62.     /*Pour chaque élément (objet ou String) et ce graçe à l'attribut abstrait 'length'
  63.     dans le tableau générique, on peut instancier les attributs min et max
  64.     Si on avait eu 'nom' dans l'interface, on aurait pu en plus de e.length, faire e.nom
  65.     */
  66.     private computeMinMax(t: Array<T>){
  67.         for (let e of t) {
  68.             //e.length sera: 271, 161 et 314
  69.             //e.nom aurait été: "a", "b" et "c"
  70.             this.min = e.length < this.min.length?e:this.min;
  71.             this.max = e.length > this.max.length?e:this.max;
  72.         }
  73.     }
  74.     //Getters pour récupérer une valeur générique (objet ou string ici) de min et max
  75.     getMin(): T{
  76.         return this.min;
  77.     }
  78.  
  79.     getMax(): T{
  80.         return this.max;
  81.     }
  82.  
  83. }
  84. //Une variable reçoit un tableau qui contiendra des 3 objets comportant 2 attributs de type Trajet
  85. let trajets: Array<Trajet> = new Array(new Trajet("a", 271), new Trajet("b", 161), new Trajet("c", 314));
  86. //permet d'exécuter computeMinMax
  87. let trajetMinMax = new MinMax(trajets);
  88. //Trajet c de 314 Km
  89. console.log("Le plus grand trajet est : "+trajetMinMax.getMax());
  90. //Trajet b de 161 Km
  91. console.log("Le plus petit trajet est : "+trajetMinMax.getMin());
  92.  
  93. //Une variable reçoit un tableau qui contiendra des 3 String
  94. let chaines: Array<string> = new Array("chaineDe9", "chDe5", "grandeChaineDe16");
  95. //permet d'exécuter computeMinMax
  96. let chaineMinMax = new MinMax(chaines);
  97. //grandeChaineDe16
  98. console.log("La plus grande chaine est : "+chaineMinMax.getMax());
  99. //chDe5
  100. console.log("La plus petite chaine est : "+chaineMinMax.getMin());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement