Les types abstraits introduisent la notion de méthodologie objet dans les algorithmes.
Un type abstrait est constitué de plusieurs constantes, variables et méthodes (fonctions ou procédures) dont certaines constituent une interface par laquelle un objet pourra être manipulé sans pour autant connaître sa mise en oeuvre (ou implémentation).
# Création d'un type abstrait #
type abstrait : identificateur
interface
# Déclaration des méthodes #
{fonction* | proc} nom_méthode([arguments]){: type*};
...
{fonction* | proc} nom_méthodeN([arguments]){: type*};
représentation
# Déclaration des variables et constantes #
{var | const} nom : type;
...
{var | const} nomN : type;
algorithmes
# Définitions des méthodes #
{fonction* | proc} nom_méthode([arguments]){: type*};
...
début
...
fin
...
{fonction* | proc} nom_méthodeN([arguments]){: type*};
...
début
...
fin
ftypeabstrait
# Création d'un objet #
var identificateur_objet : identificateur_type_abstrait;
# Utilisation des méthodes #
identificateur_objet.nom_méthode([arguments]);
# Utilisation des variables et constantes # Une variable ou une constante déclarée dans représentation peut être accédé dans toutes les méthodes du type abstrait.
Les variables peuvent également être modifiées à partir du bloc d'instructions de ces mêmes méthodes.
# Exemple #
type abstrait : Calculatrice
interface
proc saisie(res valA, valB : réel, valOP : opération);
proc calcul(val valA, valB : réel, valOP : opération, res resultat: réel);
proc affichage(val valA, valB, resultat : réel, valOP : opération);
représentation
type opération : énumération : ('+','-','*','/');
var valA, valB : réel, valOP : opération
algorithmes
proc saisie();
début
écrire("Entrez un calcul simple
[Nombre, (+ | - | * | /), Nombre (ex.:10.2, *, 5)] :");
lire(valA, valOP, valB);
fproc
proc calcul(res result: réel);
début
choix
type_calcul = '+' -> cas
result := addition(valA, valB);
fcas
type_calcul = '-' -> cas
result := soustraction(valA, valB);
fcas
type_calcul = '*' -> cas
result := multiplication(valA, valB);
fcas
type_calcul = '/' -> cas
result := division(valA, valB);
fcas
fchoix
fproc
proc affichage(val result : réel);
début
écrire("Opération : ", valA, " ", valOP, " ", valB, " = ", result);
fproc
fonction addition(val a, b) : réel;
début
résultat (a + b);
ffonction
fonction soustraction(val a, b) : réel;
début
résultat (a - b);
ffonction
fonction multiplication(val a, b) : réel;
début
résultat (a * b);
ffonction
fonction division(val a, b) : réel;
début
résultat (a / b);
ffonction
ftypeabstrait
algorithme
var calc : Calculatrice;
valeur_resultat : réel;
début
calc.saisie();
calc.calcul(valeur_resultat);
calc.affichage(valeur_resultat);
fin