Suport de cours de langage Ada 95 en pdf


Télécharger Suport de cours de langage Ada 95 en pdf

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


OOP : TYPES ET SOUS-PROGRAMMES ABSTRAITS (Exemple)

n Développement d'une infrastructure ALERT

withAda.Calendar;packageNormal_Alert_Systemis

typeDeviceis( Teletype, Console, Big_Screen);typeLow_Alertis newBase_Alert_System.Alertwith record

Time_Of_Arrival : ;

Message : Text;end record;

-- Fournir le sous-programme actuel  pour le sousprogramme abstrait

procedureHandle ( La :in outLow_Alert);procedureDisplay   

( La :inLow_Alert; On :inDevice);

9-21 procedure Log           

( La :inLow_Alert);procedureSet_Alarm ( La :inLow_Alert);

OOP : types Controlled et Limited_Controlled

n Deux types abstraits étiquetés sont déclarés dans le paquetage avec leurs opérations

–   Controlled : type non-limité (:=, =, /=)

–   Limited_Controlled : type limité (:=, =, /=)

- Opérations fournies sont appelées automatiquement lorsque ces objets sont créés ou cessent d’exister. Le type Controlled et ses descendants possèdent de plus une opération qui est appelée lors de l’affectation.

- C++ : constructeur, destructeur, et surcharge de l’opérateur =.

9-24

--AdaOOP-24--00-03-06-15:42

OOP : Ada.Finilazition Opération :Initialize n La procédure Initialize est appelée:

–   Lors de l’élaboration d’une déclaration d’un type contrôlé, si la déclaration ne spécifie pas de valeur initiale,

–   Lors de l’élaboration d’une déclaration d’un type composite qui directement ou indirectement contient une composante contrôlée, si

  • aucune valeur n’a été spécifiée pour la déclaration de l’objet,
  • aucune valeur de défaut n’a été spécifiée pour la ou les composantes contrôlées,

–   Lors de l’évaluation d’un allocateur (new) créant un objet contrôlé, si l’allocateur ne spécifie pas de valeur initiale,

–   Lors de l’évaluation d’un allocateur (new) pour un objet composite qui directement ou indirectement contient une composante contrôlée si

< aucune valeur n’a été spécifiée pour la déclaration de l’objet,

< aucune valeur de défaut n’a été spécifiée pour la ou les composantes contrôlées,

n Les procédures Initialize pour les composantes

9-26 contrôlées sont appelées avant la procédure Initialize de l’objet contenant les composantes.



OOP : Ada.Finilazition Opération : Adjust

n La procédure Adjust est appelée juste après l’affectation d’une valeur à un objet contrôlé dans les circonstances suivantes:

–   Durant l’exécution d’un énoncé d’affectation, une valeur est affectée à la variable cible,

–   Lors de la création d’un objet avec une valeur initiale, la valeur est affectée au nouvel objet, < valeur initiale : déclaration objet

< valeur initiale : appel à un allocateur

< valeur initiale : dans la déclaration du type

–   Lors de l’évaluation des résultats d’un agrégat dans la création d’un nouvel objet. Les valeurs de l’agrégat sont affectées aux composantes de l’objet,

–   Sauf dans le cas d’une fonction retournant une référence (pointeur), l’exécution d’un return dans le corps de la fonction 9-27 crée un nouvel objet pour contenir le résultat de la fonction.

n Les procédures Adjust sont appelées pour les composantes les plus internes avant les composantes externes.

OOP : Ada.Finilazition Opération : Finalize

n Les procédures Finalize sont appelées dans l’ordre inverse des procédures Initialize lorsque les objets cessent d’exister:

–   Un objet cesse d’exister lorsque le programme quitte la construction dans lequel l’objet est déclaré par exemple:

< pour un objet déclaré dans un sous-programme, lorsque l’on quitte le sous-programme, l’objet cesse d’exister,

< pour un objet déclaré dans un bloc, lorsque l’on quitte le bloc, l’objet cesse d’exister,

–   Un objet alloué dynamiquement cesse d’existe

< Lors d’un appel avec une instance de la procédure générique Ada.Unchecked_Deallocation avec un pointeur à l’objet. (en C++, delete).

< Si un compilateur fournit un ramasse-miette (garbage collector), un objet cesse d’exister lorsqu’il est réclamé par le ramassecessent d’exister.

< Lors du départ d’une construction contenant un type accès, toutes variables allouées dynamiquement par l’allocateur pour ce type

OOP : Ada.Finilazition Opération : Finalize

n Les procédures Initialize sont appelées juste avant

l’affectation d’une valeur à une variable cible dans un énoncé d’affection (fait partie du processus de « finalisation » ).

n Les objets créés temporairement pendant l’exécution d’une

expression sont aussi “finalisés ”.

n Dans certaines affectations : A(I .. J) := A ( K .. L); le

compilateur se crée des objets temporaires:

declare

Objet_Temporaire : T := A ( K .. L);begin

A ( I .. J ) := Objet_Temporaire;



9-30               end;

OOP : Ada.Finilazition Opération : Finalize

n Les étapes suivantes sont effectuées:

–   L’objet temporaire est créé.

–   L’objet temporaire est initialisé en affectant la valeur de droite de l’énoncé d’affectation du programmeur. Adjust est appelée pour chaque composante contrôlée de l’objet temporaire et si

l’objet affecté est contrôlé, Adjust est appelé pour l’objet luimême.

–   Le côté gauche de l’énoncé d’affectation du programmeur est « finalisé ».

–   La valeur de l’objet temporaire est affecté au côté gauche de l’énoncé d’affectation du programmeur. Adjust est appelée pour chaque composante contrôlée de la variable cible et si

cette dernière est de type contrôlé, Adjust est appelée pour

9-31                    cette variable.

– L’objet temporaire est « finalisé ».

... ...

Package Temps en Ada 95 (Spécification)

... ... ...

OOP - Héritage Multiple

n Ada 95 ne supporte pas directement l’héritage multiple

on contourne

withClass_Account, Class_Name_Address;useClass_Account, Class_Name_Address;packageClass_Name_Accountis

typeNamed_Accountis tagged private;subtypePmoneyisClass_Account.Pmoney;subtypeMoney     isClass_Account.Money;procedureSet              ( The :outNamed_Account; Str :inString);procedureDeliver_Line ( The  :outNamed_Account;

Line :inPositive )returnString;

functionLines ( The :inNamed_Account)returnPositive;procedureStatement( The :inNamed_Account);

-- … deposit, withdraw, balanceprivate

typeNamed_Accountis tagged record

Acc : Account; -- An account object

9-73  Naa : Name_Address;-- A Name and address object

end record;

endClass_Name_Account;

Ingénierie du Logiciel avec Ada- -ªLouis Granger--AdaOOP-73--00-03-06-15:42

UNITÉ ENFANT PRIVÉE

n Dans les gros systèmes, il peut être nécessaire de décomposer un système pour faciliter l'implémentation. Ada 83 fournit les sous-unités pour décomposer le corps d'un système.



–   la recompilation d'une sous-unité n'affecte pas les sous-unités de même niveau,

–   si un changement est effectué à un niveau supérieur, toutes les sous-unités doivent être recompilées.

n Pour résoudre ce problème,Ada 95 ajoute une unité.enfant qui est totalement privée pour le parent.

UNITÉ ENFANT PRIVÉE

n Une unité.enfant peut être déclarée n'importe où dans l'arbre hiérarchique. Les règles de visibilité pour les unités.enfants privés sont les mêmes que pour les unités.enfants normales sauf que:

–   l'unité.enfant privée est visible seulement à l'intérieur du sous-arbre  où la racine est son parent; et seulement pour les parties corps (non-visible pour la partie spécification)

–   la partie privée de l'unité.enfant peut accéder la partie privée du parent (ne peut exporter à un client une partie privée du parent)

UNITÉ ENFANT PRIVÉE

n Visibilité -- Sommaire

–   une spécification n'a pas besoin d'importer (with) son parent; mais elle peut importer un enfant (sibling) -- ne peut importer un enfant privé

–   un corps (body) n'a pas besoin d'importer (with) son parent; il peut importer un enfant (sibling) privé ou pas; il peut importer ses propres enfants

–   une unité.enfant privée n'est jamais visible en dehors de l'arbre

–   la partie privée et le corps d'un enfant peut accéder la partie privée de son parent ( et grand-parent )

–   la partie visible d'un enfant privé peut aussi accéder la partie privée de son parent ( et grand-parent )

–   une clause with pour une enfant implique une clause with pour

9-89                     ses ancêtres

– une clause use pour une unité rend l'unité.enfant accessible par nom_simple               


122