Algorithmique en Scala : Les classes

samedi 3 février 2018
par  Emmanuel A.
popularité : 2%

Voici une présentation très légère de la notion de classe, légère car elle se limite dans cet article à l’imitation de structure, et non à la définition d’une classe au sens de la Programmation Orientée Objet.

Une classe permet de regrouper un ensemble de caractéristiques pour un élément donné.
Par exemple, une personne peut être représentée par un nom, un prénom et un age.

Si l’on souhaite gérer un ensemble de 10 personnes, il faudrait 3 tableaux :

  1. var lesNoms:Array[String] = Array.ofDim(10);
  2. var lesPrenoms:Array[String] = Array.ofDim(10);
  3. var lesAges:Array[Int] = Array.ofDim(10);

Les cases 0 des tableaux lesNoms, lesPrenoms et lesAges contiennent les informations sur la personne 0....

Pour afficher les personnes, il faudrait exécuter :

  1. for(i<-0 until 10)
  2. {
  3.  println(lesNoms(i) + " " + lesPrenoms(i) + " age : " + lesAges(i));
  4. }

Ce qui n’est pas si contraignant.
Par contre, l’échange de place de deux personnes (pour un tri par exemple) oblige à échanger les valeurs dans chacun des trois tableaux...

  1. def echangePlace(i:Int, j:Int)
  2. {
  3. var tampon = lesNoms(i); lesNoms(i) = lesNoms(j); lesNoms(j) = tampon;
  4. tampon = lesPrenoms(i); lesPrenoms(i) = lesPrenoms(j); lesPrenoms(j) = tampon;
  5. var tamponAge = lesAges(i); lesAges(i) = lesAges(j); lesAges(j) = tamponAge;
  6. }

Pour simplifier, il est possible d’utiliser une structure spéciale, appelée classe :

  1. class Personne (
  2.  var nom:String = "",
  3.  var prenom:String = "",
  4.  var age:Int = 0
  5. )

Pour créer une personne  :
Il faut définir un emplacement en mémoire pour la personne et utiliser la syntaxe suivante

  1. var p1:Personne = new Personne;
  2. p1.nom = "al"; p1.prenom = "bert"; p1.age = 52;

Pour aller plus vite, on peut aussi donner une valeur aux champs en déclarant la personne (en respectant l’ordre de déclaration (nom, prenom, age)) :

  1. var p:Personne = new Personne("Odersky", "Martin", 60);

On peut aussi ne donner une valeur qu’à quelques champs particuliers, auxquels cas, il faut les nommer :

  1. var p2:Personne = new Personne(prenom="Martin");

On peut alors définir un tableau de personnes :

  1. var monTab:Array[Personne] = Array.ofDim(10);

Pour remplir un tableau de personnes  :
On peut effectuer le code suivant :

  1. for(i<-0 until 10)
  2. {
  3.  println("personne " + i);
  4.  monTab(i) = new Personne;
  5.  print("entrez son nom : ");  
  6.  monTab(i).nom = io.StdIn.readLine();
  7.  print("entrez son prenom : ");  
  8.  monTab(i).prenom = io.StdIn.readLine();
  9.  print("entrez son age : ");  
  10.  monTab(i).age = io.StdIn.readInt;
  11. }

Pour afficher un tableau de personnes  :
On peut utilise le code suivant :

  1. for(i<-0 until 10)
  2. {
  3.  println(monTab(i).nom  + " " + monTab(i).prenom  + " age : " + monTab(i).age );
  4. }

C’est-à-dire qu’on affiche le nom de la personne dans la case i du tableau, suivi de son prénom et de son age.

Pour échanger la place de deux personnes dans le tableau, cela devient beaucoup plus simple :

  1. def echanger(i:Int, j:Int, tab:Array[Personne])
  2. {
  3. Personne tampon = tab(i);
  4. tab(i) = tab(j);
  5. tab(j) = tampon;
  6. }