Unités (Units)

Une unité (Unit) regroupe les déclarations partagées de types, fonctions, procédures, constantes et variables afin qu’elles puissent être appelées par d’autres unités ou le programme principal. Elle correspond aux modules / paquets des autres langages de programmation.

Créer une unité

Une unité est composée de deux blocs principaux :

Section interface : Contenu exposé publiquement, accessible directement après import par d’autres fichiers ;

Section implementation : Code privé interne, visible uniquement au sein de l’unité et inaccessible depuis l’extérieur.

Exemple

Créez un fichier nommé MyUnit.pas pour contenir une unité.

unit MyUnit;

{$ifdef FPC}
{$mode objfpc}{$H+}{$J-}
{$endif}

// Section interface : déclarations publiques
interface

procedure MyProcedure(const A: Integer);
function MyFunction(const S: string): string;

// Section implementation : code privé interne
implementation

procedure MyProcedure(const A: Integer);
begin
  WriteLn('A + 10 is: ', A + 10);
end;

function MyFunction(const S: string): string;
begin
  Result := S + 'strings are automatically managed';
end;

end.Langage du code : JavaScript (javascript)

Les lecteurs attentifs remarqueront que le marqueur final end. n’a pas de bloc begin correspondant.

La structure syntaxique d’une unit (unité) Pascal diffère de celle d’un program (programme)

program Programme principal : nécessite un bloc begin ... end. comme point d’entrée de l’exécution

unit Unité : aucun begin global n’est requis

Toute unité se termine par end. (le point marque la fin du fichier, sans begin global associé)

  • Dans interface : prototypes de fonctions/procédures, types, constantes et variables globales ; ils peuvent être appelés par des fichiers externes après l’instruction uses ;
  • Dans implementation : seule l’implémentation complète des fonctions est écrite. Les procédures locales et variables privées définies ici restent invisibles aux autres unités ;
  • Les fichiers d’unité commencent par unit Nom; et se terminent par end..

Importer une unité dans le programme principal

Notre fichier de programme principal est mydemo.pas

Chargez une unité personnalisée grâce au mot-clé uses

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

program MyProgram;

// Importer l’unité personnalisée MyUnit
uses
  MyUnit;

begin
  WriteLn(MyFunction('Note: '));
  MyProcedure(5);
  ReadLn;
end.Langage du code : PHP (php)

La ligne MyUnit; sous uses désigne le nom de l’unité, pas le nom du fichier .pas.

Il s’agit du nom indiqué sur la première ligne de MyUnit.pas : unit MyUnit;

Même si le nom du fichier peut différer du nom de l’unité, il est recommandé de les faire correspondre. En cas de divergence, l’instruction uses utilise toujours le nom de l’unité et non le nom du fichier.

Compilez et exécutez maintenant ; le programme principal appellera les fonctions de l’unité.

Compilez et exécutez maintenant

Après compilation, deux nouveaux fichiers apparaissent dans le dossier du projet

.ppu (Pascal Unit File, fichier de métadonnées de compilation d’unité)

Ce fichier n’est généré que lors de la compilation d’un fichier unité ; le programme principal program ne produit pas de fichier .ppu

  • Stocke les métadonnées compilées de la section interface de l’unité : prototypes de fonctions, types, constantes, symboles exportés ;
  • Lorsque d’autres fichiers utilisent uses MyUnit, le compilateur ne réanalyse pas l’intégralité du code source MyUnit.pas et lit directement le fichier .ppu pour valider rapidement l’interface ;
  • Accélère considérablement la compilation des grands projets ; c’est le fichier central de la compilation incrémentielle de FPC.

MyUnit.o : Instructions binaires machine compilées à partir de MyUnit.pas (l’intégralité du code de la section implementation)

mydemo.o : Code machine binaire du programme principal mydemo.pas

Le compilateur convertit d’abord chaque fichier .pas en fichiers objets binaires indépendants .o ; l’éditeur de liens fusionne ensuite tous les fichiers .o pour produire l’exécutable .exe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *