La gestion des Fichiers et des Exceptions



Documents pareils
Génie Logiciel avec Ada. 4 février 2013

Algorithmique & programmation

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Arbres binaires de recherche

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Cours Bases de données 2ème année IUT

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

4. Groupement d objets

Bases de données avancées

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

T. BLOTIN Lycée Paul-Eluard SAINT-DENIS

Compléments de documentation Scilab : affichage de texte et formatage de nombres

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Paris Airports - Web API Airports Path finding

Le langage VHDL. Eduardo Sanchez EPFL

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Programmer en JAVA. par Tama

Once the installation is complete, you can delete the temporary Zip files..

Environnements de développement (intégrés)


A QUOI SERVENT LES BASES DE DONNÉES?

Le langage C. Séance n 4

Bases de Données Avancées PL/SQL

Utilitaires méconnus de StrataFrame

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Bernard HAMM, Évelyne LAVOISIER

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java Licence Professionnelle CISII,

Chapitre 5 : Les procédures stockées PL/SQL

LES TYPES DE DONNÉES DU LANGAGE PASCAL

ACTIVITÉ DE PROGRAMMATION

Chapitre VI- La validation de la composition.

Présentation du langage et premières fonctions

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

TP3 : Manipulation et implantation de systèmes de fichiers 1

Algorithmique et programmation : les bases (VBA) Corrigé

OCL - Object Constraint Language

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

//////////////////////////////////////////////////////////////////// Administration bases de données

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Gestion distribuée (par sockets) de banque en Java

Structure fonctionnelle d un SGBD

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Ordonnancement temps réel

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Le langage procédural PL-PGSQL

Corrigé des TD 1 à 5

Corrigés détaillés des exercices

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

TP Contraintes - Triggers

Cours Informatique Master STEP

Héritage presque multiple en Java (1/2)

Devoir Data WareHouse

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

.NET - Classe de Log

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

VTP. LAN Switching and Wireless Chapitre 4

Chapitre 2 Devine mon nombre!

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

données en connaissance et en actions?

Introduction à la programmation concurrente

Notes de cours : bases de données distribuées et repliquées

Connaître la version de SharePoint installée

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Sécurité des applications web. Daniel Boteanu

Instructions Mozilla Thunderbird Page 1

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Cours 14 Les fichiers

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Paginer les données côté serveur, mettre en cache côté client

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Intégrité des données

Programmation par composants (1/3) Programmation par composants (2/3)

Application web de gestion de comptes en banques

Gestion de base de données

Programmation système I Les entrées/sorties

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Algorithmique des Systèmes Répartis Protocoles de Communications

Cours de Programmation 2

Intégrité sémantique dans les bases de données relationnelles

PARAGON Disk Wiper. Guide de l utilisateur. Paragon Technology GmbH, System Programmierung. Copyright Paragon Technology GmbH

Oracle Le langage procédural PL/SQL

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

Généralités sur le Langage Java et éléments syntaxiques.

Projet de programmation (IK3) : TP n 1 Correction

Configurer la supervision pour une base MS SQL Server Viadéis Services

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Transcription:

Séance 4 La gestion des Fichiers et des Exceptions Objectifs : Les concepts de base pour la gestion des fichiers Exploration des paquetages Input/Output Comprendre la gestion des Exceptions. 1 1

Gestion des fichiers: Les concepts de base Les fichiers internes et externes Interne: Clavier, Affichage sur écran. Externes : Sur disque. Les modes d ouverture de fichier In : le programme peut lire les données à partir du fichier Out : le programme peut écrire des données dans le fichier L accès direct aux fichiers doit avoir le mode in out. L accès séquentiel doit avoir le mode Append. 2

Les paquetages Input/Output La lecture/ecriture des fichiers textuels utilise les paquetage : Ada.Text_IO Ada.Wide_Text_IO Les deux paquetages fournissent un type privé nommé «File_Type». Type File_Mode is (In_File, Out_File, Append_File) Voir aussi Ada.sequential_IO et Ada.Direct_IO. Type File_Mode is (In_File, InOut_File, Out_File) 3

Instanciation Package Sequential_Integer_IO is new Ada.Sequential_IO (Integer); Package Direct_Integer_IO is new Ada.Direct_IO (Integer); Exception possibles: Status_Error: utilisation d un fichier interne qui n est pas associé à un fichier externe. Mode_Error: opération input sur un fichier en mode out ou append. Name_Error: Spécification d un nom de fichier externe invalide au moment de l association avec le fichier interne. Use_Error: opération input/output sur un fichier externe dont l environnement n accepte pas cette opération. Device_Error: Problème matériel, logiciel ou de média qui fournit le service input/output. End_Error: tentative de lecture après la fin de ce dernier. Data_Error: les données ne respectent pas la forme attendue. Layout_Error: opération de formatage des données textuelles invalide. 4

Manipulation des fichiers externes Name et Form décrivent le fichier externe File est le nom de fichier interne 5

Initialisation de l ouverture du fichier Récupération de l état du fichier 6

Entrées/Sorties Exemple 7

EXCEPTIONS Ada fournit un mécanisme d'exception qui permet de transférer le contrôle en dehors du cadre où un évènement se produit. Les évènements qui déclenchent des exceptions sont: end_of_file queue_overflow divise_by_zero storage_overflow... 8

EXCEPTIONS PRÉDÉFINIES Constraint_Error (Numeric_Error) : qui correspond généralement à un dépassement des bornes, ce qui inclut le cas des problèmes en arithmétique tel que la division par zéro; Program_Error : qui apparaît si nous tentons de violer d une certaine façon la structure de contrôle, comme lorsqu on atteint un end dans une fonction, lorsqu l on viole les règles d accessibilité ou qu on appelle un sous programme dont le corps n a pas encore été élaboré; Storage_Error : qui apparaîtra en cas de dépassement mémoire, par exemple, en cas d appel de la fonction récursive Factorielle avec un paramètre trop grand; Tasking_Error : qui est levée si une tâche fait appel à une tâche avortée ou est le résultat d un échec de communication entre 2 tâches 9

CADRE DE TRAITE D'EXCEPTION La syntaxe d'un bloc avec une partie traite_d'exception est la suivante: begin Suite_D_Instructions exception Traite_Exception {Traite_Exception} end; Traite_Exception ::= when Choix_D_Exception{ Choix_D_Exception} => Suite_D_Instruction Choix_D_Exception ::= Nom_D_Exception [paramètre_de_choix : ] others 10

CADRE DE TRAITE D'EXCEPTION (Suite) Exemple: begin suite d'instructions exception when Singularité Numeric_Error => Put ("La matrice est singulière"); when Storage_Error => Put («Mémoire insuffisante"); when others => Put ("Erreur fatale"); raise Erreur; end; 11

BLOCS Ada permet des déclarations locales et le traitement d'exception dans une suite d'instructions par l'intermédiaire des instructions de bloc. La syntaxe est: instruction_bloc ::= [identificateur_de_bloc:] [declare liste_de_déclaration] begin suite_d_instructions exception traite_d_exception {traite_d_exception} end; Les blocs sont utilisés pour optimiser un programme et pour traiter localement les exceptions. 12

TRAITE D'EXCEPTION (Suite) function Demain ( aujourdhui : in T_Jour) return T_Jour is begin return T_Jour succ(aujourdhui); exception when Constraint_Error => return T_Jour first; end Demain ; 13

DÉCLARATION D'EXCEPTIONS Les exceptions peuvent être déclarées dans la partie déclarative d'un module. La syntaxe est: nom_d_exception : exception; 14

DÉCLENCHEMENT D'EXCEPTIONS Une exception est déclenchée par l'énoncé raise: raise [nom_d_exception] [with littéral_chaîne]; Exemple : raise; lever l exception courante raise Une_Exception; raise Une_Autre_Exception with Un message relié à l exception ; La vérification des exceptions prédéfinies peut être supprimée à l'exécution par l'utilisation du pragma SUPPRESS. pragma Suppress ( Index_Check, Service); pragma Suppress (Range_Check); 15

DÉCLENCHEMENT D'EXCEPTIONS pragma SUPPRESS La syntaxe du pragma Suppress est: pragma Suppress (identificateur[, ON => nom]); nom représente un nom d'objet ou de type Identificateur Access_Check Discriminant_Check Index_Check Length_Check Range_Check Division_Check Overflow_Check Elaboration_Check Storage_Check Exception Constraint_Error Numeric_Error Program_Error Storage_Error 16

Package Ada.Exceptions with Ada.Streams; with System.Standard_Library; package Ada.Exceptions is type Exception_Id is private; Null_Id : constant Exception_Id; type Exception_Occurrence is limited private; type Exception_Occurrence_Access is access all Exception_Occurrence; Null_Occurrence : constant Exception_Occurrence; function Exception_Identity (X : Exception_Occurrence) return Exception_Id; function Exception_Name (X : Exception_Occurrence) return String; function Exception_Name (X : Exception_Id) return String; procedure Raise_Exception (E : in Exception_Id; Message : in String := ""); function Exception_Message (X : Exception_Occurrence) return String; procedure Reraise_Occurrence (X : Exception_Occurrence); function Exception_Information (X : Exception_Occurrence) return String; procedure Save_Occurrence (Target : out Exception_Occurrence; Source : in Exception_Occurrence); function Save_Occurrence (Source : in Exception_Occurrence) return Exception_Occurrence_Access; 17

Package Ada.Exceptions private package SSL renames System.Standard_Library; type Exception_Id is access all SSL.Exception_Data; Null_Id : constant Exception_Id := null; subtype Nat is Natural range 0.. SSL.Exception_Message_Buffer'Last; type Exception_Occurrence (Max_Length : Nat := SSL.Exception_Msg_Max) is limited record Id : Exception_Id; Msg_Length : Natural; Msg : String (1.. Max_Length); end record; procedure Set_Exception_Occurrence (Occ : Exception_Occurrence_Access); pragma Export (C, Set_Exception_Occurrence, " set_except_occ"); procedure Exception_Occurrence_Read (Stream : access Ada.Streams.Root_Stream_Type'Class; Item : out Exception_Occurrence); procedure Exception_Occurrence_Write (Stream : access Ada.Streams.Root_Stream_Type'Class; Item : in Exception_Occurrence); for Exception_Occurrence'Read use Exception_Occurrence_Read; for Exception_Occurrence'Write use Exception_Occurrence_Write; function Exception_Occurrence_Access_Input (Stream : access Ada.Streams.Root_Stream_Type'Class) return Exception_Occurrence_Access; for Exception_Occurrence_Access'Input use Exception_Occurrence_Access_Input; Null_Occurrence : constant Exception_Occurrence := ( Max_Length => 0, Id => Null_Id, Msg_Length => 0, Msg => ""); function Exception_Name_Simple (X : Exception_Occurrence) return String; end Ada.Exceptions; 18

Package Ada.Exceptions (Exemple) ÏÏÏ with Ada.Exceptions; ÏÏÏwith Ada.Text_IO; ÏÞßàprocedure Main is ÏÏ ÏíÏIndex_Error : exception; ÏÏ ÏíÏIndex : Integer := 234; ÏÏ ÏíÏMaximum : constant := 100; ÏÏ begin ÏÏ ¹¹ declare ÏÏ ÏÏ ÏíÏLa_Plus_Récente_Occurrence: Ada.Exceptions.Exception_Occurrence; ÏÏ ÏÏ ÏíÏPointeur_Occurrence : Ada.Exceptions.Exception_Occurrence_Access; ÏÏ ÏÏ begin ÏÏ ÏÏ ¹³ if Index > Maximum then ÏÏ ÏÏ Ï6¾¹¹ÏAda.Exceptions.Raise_Exception ( Index_Error'Identity, ÏÏ ÏÏ Ï6ÏÏÏÏÏÏÏ"Index" & Integer'Image ( Index ) & " dépasse le maximum " & ÏÏ ÏÏ Ï6ÏÏÏÏÏÏÏInteger'Image ( Maximum )); ÏÏ ÏÏ Ï Ïend if; ÏÏ ÏÏ Ïðîìexception ÏÏ ÏÏ ÏÏ ¹³ when E : Ada.Text_IO.Data_Error Constraint_Error => ÏÏ ÏÏ ÏÏ Ï6 ¹¹ÏPointeur_Occurrence := Ada.Exceptions.Save_Occurrence ( E ); ÏÏ ÏÏ ÏÏ Ï6¾êîìraise; ÏÏ ÏÏ ÏÏ Ï when E : others => ÏÏ ÏÏ ÏÏ Ï6 ¹¹ÏAda.Text_IO.Put_Line ( "Oh!, non" ); ÏÏ ÏÏ ÏÏ Ï6 ¹¹ÏAda.Text_IO.Put ( Ada.Exceptions.Exception_Name ( E )); ÏÏ ÏÏ ÏÏ Ï6 ¹¹ÏAda.Text_IO.Put ( "levée dans la procédure Main et propagée" ); ÏÏ ÏÏ ÏÏ Ï6 ¹¹ÏAda.Text_IO.New_Line; ÏÏ ÏÏ ÏÏ Ï6 ¹¹ÏAda.Exceptions.Save_Occurrence ( La_Plus_Récente_Occurrence, E ) ÏÏ ÏÏ ÏÏ Ï ¾¹¹ÏAda.Exceptions.Reraise_Occurrence ( E ); ÏÏ ÏÏ end; ÏÏ end Main; 19

Pragmas associés aux exceptions Pragmas Vérifier si une condition est satisfaite, dans le cas contraire, lever une exception pragma Assert ( Expression_Booléenne, Chaîne_Caractères); Contrôler le comportement du pragma Assert pragma Assertion_Policy (Policy_Identifier); Policy_Identifier = Check Ignore Contrôler les vérifications pour les exceptions du système pragma Suppress (identificateur[, ON => nom]); Déjà vu 20

Paquetage Ada.Assertions Le pragma Assertion est supporté par le paquetage Ada.Assertions package Ada.Assertions is pragma Pure(Assertions); Ada 2005 Assertion_Error : exception; procedure Assert(Check : in Boolean); procedure Assert(Check : in Boolean; Message : in String); end Ada.Assertions; 21

Journal d exception Exemple d un journal d exceptions : with Ada.Exceptions; with Reflection; package body cfonctions is procedure Fonctions_1 is package m is new Reflection; begin exception when Occurrence : others => m.logexception ( Occurrence ); Ada.Exceptions.Reraise_Occurence (Occurrence ); end cfonctions; 22

Journal d exception ÏÏÏ Exemple d un journal d exceptions : with Mixed_Case; ÏÏÏwith Ada.Strings.Fixed; ÏÏÏwith Ada.Tags; ÏÏÏwith Ada.Exceptions; ÏØÙÚgeneric ÏÏ Ïpackage Reflection is ÏÏ ÏíÏUnit_Name : constant String; ÏÏ ÏÛÜÝprocedure LogExceptions ( Occurrence : in Ada.Exceptions.Exception_Occurrence ); ÏÏ ÏÏ ÏÛÜÝfunction Get_Unit_Name return String; ÏÏ private Reflection ÏÏ ÏïÏtype T is abstract tagged null record; ÏÏ ÏíÏName : constant String := Ada.Tags.Expanded_Name (T'Tag); ÏÏ ÏíÏDot : constant String := "."; ÏÏ ÏíÏDirection : constant Ada.Strings.Direction := Ada.Strings.Backward; ÏÏ ÏíÏDot_Location : constant Natural := ÏÏ ÏÏÏ Ada.Strings.Fixed.Index (Source => Name (Name'First.. Ada.Strings.Fixed.Index (Source => Name, ÏÏ ÏÏÏ Pattern => Dot, ÏÏ ÏÏ Going => Direction) 1), Ï ÏÏ ÏÏÏ Pattern => Dot, ÏÏ ÏÏÏ Going => Direction); ÏÏ 1st Index finds dot before type name ÏÏ 2nd Index finds dot before instantiation name ÏÏ ÏíÏUnit_Name : constant String := Mixed_Case( Name (Name'First.. Dot_Location 1) ); ÏÏ Trim off type name and instantiation name ÏÏ end Reflection; CFONCTIONS.FONCTION_1. M.T Cfonctions.Fonction_1 23

Journal d exception Exemple d un journal d exceptions : ÏÏÏwith Ada.Text_IO; ÏÕÖ package body Reflection is ÏÏ ÏÞßàprocedure LogExceptions ( Occ : in Ada.Exceptions.Exception_Occurrence ) is ÏÏ ÏÏ ÏíÏWhere : String := Get_Unit_Name; ÏÏ ÏÏ begin ÏÏ ÏÏ ¹¹ÏAda.Text_IO.Put_Line ("Exception dans " & Where & " " & ÏÏ ÏÏ ÏÏÏÏÏÏ Ada.Exceptions.Exception_Name(Occ)) ; ÏÏ ÏÏ ¹¹ÏAda.Text_IO.Put_Line ("Exception dans " & Where & " " ÏÏ ÏÏ ÏÏÏÏÏÏ & Ada.Exceptions.Exception_Information(Occ)) ; ÏÏ ÏÏ ¹¹ÏAda.Text_IO.Put_Line ("Exception dans " & Where & " " ÏÏ ÏÏ ÏÏÏÏÏÏ & Ada.Exceptions.Exception_Message(Occ)) ; ÏÏ ÏÏ ÏÏ ÏÏ end LogExceptions; ÏÏ ÏÏ ÏÞßàfunction Get_Unit_Name return String is ÏÏ ÏÏ begin ÏÏ Â¹Ä¹¹Ïreturn Unit_Name; ÏÏ ÏÏ end Get_Unit_Name; ÏÏ begin ÏÏ ¹¹ÏAda.Text_IO.Put_Line (Get_Unit_Name); ÏÏ ÏÏ end Reflection; 24

Journal d exception Exemple d un journal d exceptions : with Ada.Characters.Handling; function Mixed_Case ( Name : in String ) return String is NameTmp : string := Name; Dot : constant Character := '.'; UnderLine : constant Character := '_'; begin for c in Name'First + 1.. Name'Last loop if Name ( Integer'Pred(c)) /= Dot and Name ( Integer'Pred(c)) /= UnderLine then NameTmp(c) := Ada.Characters.Handling.To_Lower(Name(c)); end if; end loop; return NameTmp; end Mixed_Case; 25