Implémentation Ada Gestion de la mémoire. Put 20 L'affectation de Comptes (σ-modèle) La sémantique intuitive des comptes ne laisse guère de place à l'affectation.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

THALES Communications Les informations contenues dans ce document sont la propriété exclusive du Groupe THALES. Elles ne doivent pas être divulguées sans.
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Partie publique Corps Partie privée p1 Un paquetage est constitué dune partie publique dune partie privée et dun corps.
Algorithmes et structures de données 9ème cours Patrick Reuter maître de conférences
C++ 5ème cours Patrick Reuter maître de conférences
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
High Frequency Trading Introduction. Séminaires de 30 minutes, une fois par semaine (8 en tout) Sujets abordés – Définition dun algorithme et introduction.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Chapitre IV Object, interfaces, classes imbriquées.
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Sous-programmes Concepts généraux Passage de paramètres Fonctions
10 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux déclencheurs.
Cours VHDL Chap 3: sémantique VHDL
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 La Concurrence Déclarative Peter Van Roy Département dIngénierie Informatique, UCL
Langage Oriente Objet Cours 4.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
La programmation objet Illustration de la POO en Pascal
Approche mémoire partagée Threads – Paradigme de lapproche – Objets exécutés par les processeurs threads vs processus, – un thread possède : Ses registres,
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Gestion des erreurs Packages ©Alain Villeneuve, 1999
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
18/05/05SE Info2 - S. L'haire UNIGE1 Lecture cha î ne caract è res Un document HTML est compos é de balises Une balise est compos é e de caract è res entre.
Miguel Garzon CrUise Lab - SITE. Introduction Data Types and Sizes Constants Logic Operators Type conversions Example.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Faculté I&C, Claude Petitpierre, André Maurer Le parallélisme Introduction.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Ift 2251 Introduction au Génie Logiciel
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
Java, les objets : tout de suite ! Rassembler, grouper les objets
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes Usage.

99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
Héritage et composition
LANGAGE PASCAL Introduction rapide….
23/03/05SE Info2 - S. L'haire UNIGE1 TP 7 PROCEDURE Inserer(VAR a, crt : AgendaPtr; j, h : INTEGER; IN s : Chaine); VAR nouveau, temp : AgendaPtr; BEGIN.
27/02/2006L3 MIAGE - GLO ADA1 Les Paquetages Permettent d’encapsuler un groupe d’entités logiquement reliées. Comme toute unité de programme, le paquetage.
2.1 - Historique Chapitre 2 : Introduction au langage C++
Programme de retouche d’images sous python
Add-on pour Navision® Workflow
Modélisation VHDL d’un chemin des données
Ch. PAUL - Piles et Files à l'aide de listes chainées
4 Introduction des objets. Les chaînes et tableaux
Packages et Types De la Spécification Formelle A l'implémentation Ada.
La notion de type revisitée en POO
Cours No8 La programmation à l’aide d’objets. Contenu 1. Terminologie objet 2. Classe vs Objet 3. Création d’une classe 4. Déclaration d’une variable.
Types Abstraits.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Cours 7 Classes locales Clonage Divers: tableaux.
Créer des packages.
Concepts intermédiaires de VHDL
Tutorat en bio-informatique
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
Programmation en C++ Fonctions
Analyse et programmation langage ADA
Transcription de la présentation:

Implémentation Ada Gestion de la mémoire

Put 20 L'affectation de Comptes (σ-modèle) La sémantique intuitive des comptes ne laisse guère de place à l'affectation (c'est-à-dire la copie de comptes). Néanmoins les commodités de la programmation peuvent sembler accrues par l'affectation. Elle permet en particulier de traduire l'évolution d'un même compte. declare X : account := open (100) ; begin X := put (X, 20) ; end; α Open 100 X β X

Put 20 L'affectation de Comptes Elle devient périlleuse dès lors que plusieurs (variables) comptes entrent en jeu. declare X : account := put (open (100), 20) ; Y : account := get (open (50), 30) ; beginY := get (X, 10) ; end; α Open 100 X β Get 30 γ Open 50 Y δ Get 10 Y εβ

Get 10 γ Put 20 L'affectation de Comptes Jeter la partie gauche avant affectation ? declare X : account := put (open (100), 20) ; beginX := get (X, 10) ; end; α Open 100 X ββ X C'est couper la branche sur laquelle on est assis...

Get 10 γ Put 20 L'affectation de Comptes Libérer l'objet pointé quand le pointeur disparaît? declare X : account := put (open (100), 20) ; begin declare Y : account := X; begin X := get (X, 10) ; end ; put_line (natural'image (balance (X))); end; α Open 100 X β X C'est couper la branche sur laquelle on est assis... Y β

Get 10 γ Put 20 Modifier l'affectation de Comptes L'affectation du pointeur recopie la structure pointée. declare X : account := put (open (100), 20) ; begin declare Y : account := X; begin X := get (X, 10) ; end ; put_line (natural'image (amount (X, 1))); end; α Open 100 X β Plus de partage, plus de résidus... Y Put 20 δ Open 100 ε Put 20 ρ Open 100 σ γ

Get 10 γ Put 20 Modifier l'affectation de Comptes Un compteur contrôle le partage. declare X : account := put (open (100), 20) ; begin declare Y : account := X; begin X := get (X, 10) ; end ; put_line (natural'image (amount (X, 1))); end; α Open 100 X β Du partage contrôlé, sans résidus... Y β β γ

Naissance, vie et mort d'un compte declare X : account; begin X := X; end; À chaque étape, une procédure est lancée qui peut modifier l'état de la variable … Par défaut ces procédures ne font … rien ADJUST FINALIZE AFFECTATION INITIALIZE (X) FINALIZE (X) Si le type est « contrôlé »

Les Comptes (contrôlés) with ada.finalization ; with ada.unchecked_deallocation; package Accounts is type account is private ; function Open (m : natural) return account; function Put (a : account ; m : natural) return account; function Get (a : account ; m : natural) return account; function Operations (a : account) return natural; function Amount (a : account ; n : natural) return natural; function "=" (x, y : account) return boolean; private … type account is new ada.finalization.controlled with... end Accounts; En devenant contrôlés, les comptes retrouvent - l'affectation, - l 'égalité

Les Comptes (copie) type builder is (Open, Put, Get); type term (selon : builder) is record case selon is when Open => initial : natural ; when Put | Get => changed : account ;change : natural ; end case; end record ; type acces is access term ; type account is new ada.finalization.controlled with record controle : acces; end record; procedure initialize (x : in out account); procedure adjust (x : in out account); procedure finalize (x : in out account); Le type contrôlé n'a d'effet que si les procédures initialize/adjust/finalize sont redéfinies.

Les Comptes (copie) package body Accounts is procedure initialize (x : in out account) is begin null ; end initialize; procedure adjust (x : in out account) is begin if x.controle = null then raise program_error; else x.controle := new term'(x.controle.all) ; end if ; end adjust ; procedure finalize (x : in out account) is procedure finalize is new ada.unchecked_deallocation (term, acces); begin finalize (x.controle); end finalize;...  Ne rien à faire à l'initialisation,  Copier (récursivement) à l'ajustement,  Détruire (récursivement) à la finalisation.

Les Comptes (compteur) type builder is (Open, Put, Get); type term (selon : builder) is record case selon is when Open => initial : natural ; when Put | Get => changed : account ;change : natural ; end case; end record ; type acces is access term ; type compteur is access positive; type account is new ada.finalization.controlled with record occurrences : compteur ; controle : acces; end record; procedure initialize (x : in out account); procedure adjust (x : in out account); procedure finalize (x : in out account); Les occurrences sont stockées au bout d'un pointeur pour être partagées..

Les Comptes (compteur) package body Accounts is procedure initialize (x : in out account) is begin x.occurrences := new positive'(1); end initialize; procedure adjust (x : in out account) is begin if x.controle = null then raise program_error; else x.occurrences.all := x.occurrences.all+1 ; end if ; end adjust ; procedure finalize (x : in out account) is procedure finalize is new ada.unchecked_deallocation (term, acces); procedure finalize is new ada.unchecked_deallocation (positive, compteur); begin if x.occurrence.all = 1 then finalize (x.occurrence); finalize (x.controle); end finalize ; else x.occurrences.all := x.occurrences.all+1 ; end if ; end finalize ;... accès initial + d'accès - d'accès

De la Spécification Formelle A L’Implémentation Ada - la spécification algébrique peut se traduire en ADA par un σ-modèle utilisant un terme constitué de constructeurs comme représentation des objets. - cette traduction implique généralement des pointeurs qui doivent faire l'objet d'un soin particulier pour leur dés-allocation. - elle n'exclut pas d'autres modèles, plus efficaces, qui partageront la partie publique de la spécification ADA, et dont il faudra prouver qu'ils respectent les axiomes.