next up previous
Next: Àpropos de ce document...

ADA


Concepts


On va se concentrer sur les aspects suivants:

Exemple


-- Exemple d'un programme ADA
with TEXT_IO; 
-- use TEXT_IO;
procedure hello is
 S : String (1 .. 5);
 begin
   S := "world";
   TEXT_IO.Put_Line ("Hello " & S & "!");
   -- Put_Line ("Hello " & S & "!");
 end hello;
Compilation


Types de données


Types


Attributs d'un type


Exemple (exemple.adb):
        with TEXT_IO; use TEXT_IO;
        procedure exemple is
          subtype OCTET is INTEGER range 0 .. 255;
          package OCTET_IO is new INTEGER_IO(OCTET);
          use OCTET_IO;
        begin
          Put(OCTET'First);
          Put(OCTET'Base'Last);
        end exemple;

Opérateurs prédéfinis


Pour chacun des types il existe un nombre d'opérateurs prédéfinis comme: not, and, or, xor, =, /=, <, <=, in, not in, +, -, etc...

        with TEXT_IO; use TEXT_IO;
        procedure ESSAI is
           M : INTEGER := 3;
        begin
           if M in 1 .. 5 then
              PUT("GAGNE");  -- sera affiché
           end if;
        end ESSAI;

Types scalaires


Tableaux


Articles


Déclaration de variables


   type NAT is range 0 .. INTEGER'Last;
   type VEC is array (NAT range <>) of BOOLEAN;
   type JOUR is (LU, MA, ME, JE, VE, SA, DI);

   COUNT, SUM : INTEGER;
   SORTED : BOOLEAN := FALSE;
   COLOR_TABLE : array (1 .. 20) of JOUR;
   OPTION : VEC(1 .. 10) := (1 .. 10 => TRUE);

   LIMIT : constant := 1000;
   LOW_LIMIT : constant INTEGER := LIMIT / 10;

procedure exemple is
   type OCTET is  range 0 .. 255;
   type VEC is array (OCTET range <>) of BOOLEAN;
   type MYCHAINE(TAILLE : OCTET := 2) is record
      VALEUR : VEC(1 .. TAILLE) := (1 .. TAILLE => TRUE);
   end record;
   type JOUR is (LU, MA, ME, JE, VE, SA, DI);
   J_TABLE : array (1 .. 3) of JOUR;
   A : STRING(1 .. 10);
   LIMIT : constant := 1000;
   LOW_LIMIT : constant INTEGER := LIMIT / 10;
   CH : MYCHAINE;
   CH1 : MYCHAINE(10);
   CH2 : MYCHAINE := (5,(TRUE,TRUE,TRUE,TRUE,TRUE));
begin
   CH := (10,(1 .. 3 => TRUE, others => FALSE));
   CH1 := CH;     CH2 := CH1;
   J_TABLE(J_TABLE'Range):= (LU,LU,LU);
   J_TABLE := (J_TABLE'Range => LU);
   A(1 .. 6) := "corico";    A(3 .. 8) := A(1 .. 6);
end exemple;

Instructions


Instructions (suite)


Bloc


  NOM_DU_BLOC :
      declare
            < ... DECLARATIONS>
      begin
            < ... INSTRUCTIONS>
      exception
            < ... TRAITE-EXCEPTIONS
      end NOM_DU_BLOC ;
Seuls les mots-clés begin et end sont obligatoires!
Sous-programmes


Mécanisme de surcharge


Gestion des anomalies


Modularité


Projet II


Exemple: listes


Types privés


Renommage


Généricité


Objets formels génériques


  generic
     TAILLE : NATURAL ;
     LONGUEUR : INTEGER := 200 ;
     SURFACE : INTEGER := LONGUEUR * LONGUEUR ;

Typets formels génériques


 generic
    type ELEMENT is private ;
    type DISCRET is (<>) ;
    type ENTIER is range <> ;
    type TABLE is array (ENTIER range <>) of ELEMENT ;
    PREMIER : ENTIER := ENTIER'First ;
    SECOND : ENTIER := ENTIER'Succ(PREMIER) ;

Sous-programmes formels génériques


generic
 type ELEMENT is private ;
 with function addition(X,Y : ELEMENT) return ELEMENT ;
 with procedure inverse(X : in out ELEMENT) is <> ;
 with function prod(X,Y : ELEMENT) return ELEMENT is "*";

Instanciation


Exemple:

package INT_IO is new TEXT_IO.INTEGER_IO(INTEGER);

Exercice


generic
  type ELEMENT is <> ;
  with function add(X,Y : ELEMENT) return ELEMENT;
function prod(X, Y : ELEMENT) return ELEMENT is
  ...
begin
  ...
exception
  ...
end ;
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    


 
next up previous
Next: Àpropos de ce document...
Wojtek Fraczak
3/18/1998