Type Objet
À première vue, les types d'objets ressemblent à des type Enregistrement - ici et là, il y a une liste de champs qui nomme et types des champs de données. Les objets n'offrent pas la possibilité de variantes, mais non seulement les champs de données peuvent être déclarés, mais aussi les procédures (souvent également appelées méthodes en relation avec des objets), et il y a la possibilité de champs de données déjà déclarés dans un autre type d'objet et les méthodes sont faciles à adopter, c'est ce qu'on appelle l'héritage. Il est préférable de donner un exemple immédiatement:
Le point essentiel ici est que les propriétés communes peuvent déjà être définies dans le type de base (ici Figure) - par exemple, que chaque figure a une coordonnée x et y et est capable de se dessiner.type Figure = object (* pas enregistrer, mais objet, eh bien *) x, y: Real; (* Champs de données: coordonnées *) procedure Draw; virtual; (* Méthode de dessin de la figure *) end; rectangle = object (Figure) (* Le rectangle est dérivé (hérité) de la figure *) largeur, hauteur: Real; (* Seuls les nouveaux champs sont déclarés *) procedure Draw; virtual; (* Méthode de dessin du rectangle *) end; Cercle = object (Figure) (* Le cercle est dérivé (hérité) de la figure *) radius: Real; (* Seuls les nouveaux champs sont déclarés *) procedure Draw; virtual; (* Méthode de dessin du cercle *) end;
La nouvelle déclaration de la méthode Draw dans le rectangle et le cercle des types dérivés indique au compilateur que même si la tête de procédure doit être adoptée à partir de la Figur de type de base, l'implémentation changera.
En parlant d'implémentation: vous avez vu que nous n'écrivions que la tête des méthodes dans la déclaration des types d'objets. L'implémentation de la méthode est attendue par le compilateur au sein de la même unité ou du même programme. À cet égard, déclarer une méthode dans un objet revient à déclarer un forward - Déclaration d'une procédure: vous annoncez la procédure ou la méthode maintenant, mais vous la mettez en oeuvre plus tard.
La directive virtual dans l'exemple a pour effet qu'une décision n'est prise qu'au moment de l'exécution quant à la méthode qui est finalement appelée.
La directive private (non représentée ici) permet aux champs de données et aux méthodes d'être "cachés" des autres unités.
Les directives Constructeur et Destructeur sont des méthodes spéciales qui initialisent les objets ou les "nettoient" correctement après utilisation.