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