Programmation concurrente
Cours : Programmation concurrente. Recherche parmi 300 000+ dissertationsPar el sayed ahmed • 28 Novembre 2015 • Cours • 1 731 Mots (7 Pages) • 795 Vues
Programmation Concurrente LI330
http://www-licence.ufr-info-p6.jussieu.fr/lmd/licence/2012/ue/prc-oct2012
Evaluation : FINAL=70% CC=30% (TME 1/3 soit 10% et PARTIEL 2/3 soit 20%)
Le langage ADA :
- Réponse du DoD à la « crise du logiciel »
- Processus en 7 étapes entre 1975 et 1979
- Standard proposé par le HOLWG au DoD (MIL-STD-1815) en 1980
- Standardisé ISO en 1983
- 2e révision de la norme 88-95
- 3e révision de la norme 96-2002
- 4e révision de la norme 2003-2012
- C’est un langage structuré fortement typé et objet
- Inclus la gestion du parallélisme
- Respect rigoureux de la norme (processus de certification)
- On ne verra pas la partie objet du langage
- C’est un langage utilisé dans de très grands projets
- Jusqu’à des millions de ligne de code source
- Efficace pour les maintenances sur de longue durées
- Domaine de prédilection : systèmes (embarqués) à sécurité élevée
- Avionique, transport, spatial, systèmes militaires
Bibliographie :
- Programmer en Ada95 de J Barnes (Addison Wesley)
- Programmation Concurrente et temps réel avec Ada95 de P.Breguet et L.Zaffalon
Rappels de programmation impérative séquentielle :
- Technique clssique de description d’une grammaire d’un langage informatique
- Mots clefs en évidence
- Référence a des lexèmes en italique
- Expression entre { } ➔ répétées 0 à N fois
- Expressions entre [ ] ➔ optionnelles (0 à 1 fois)
- | signifie un choix
Ex :
Expr_si ➔ si expr_bool alors instruction [sinon instruction]
Construction :
Commentaire :
- Texte libre n’étant pas traité par un compilateur ou interpréteur
- Fait partie du langage → en Ada commence par –
- Ex : --ceci est un commentaire
Séparateur :
- Caractère ne pouvant être intégré dans un identificateur ou un mot clef du langage
- Caractère de formatage
- Espace tabulation passage a la ligne
- Délimiteurs :
- Fin d’instruction (typiquement « ; »)
- Elément de reconnaissance de structure (typiquement (‘’,’’))
Littéraux :
- Constante booléenne
- False ,True
- Constance numérique entière ou réelles
- 10, 10.0
- Constante caractères ou chaines de caractères
- ‘c’ , ‘’c’’, ‘’voici une chaine’’
- Constantes d’un type simple énuméré
- Un type contient rouge, vert et bleu
rouge
Identificateur :
- Permet de référencer une entité du programme
- Variable type constante procédure, fonction, etc…
- Respecte des règles de construction
- Commence par une lettre, séparation des mots avec _, taille quelconque
- Ceci_Est_Un_Identificateur
- Les identificateurs ne sont pas casse-sensitifs par convention la première lettre d’un mot est en majuscule.
Opérateurs élémentaires :
- Affectation
- Recopier une zone mémoire (de taille identique)
- ECRITURE : variable := expression
- Comparaison
- Egalité, comparer deux zones mémoires de taille identique
- ECRITURE : expression=expression
- Autres(<,>,<=,>=) la sémantique dépend du type
- ECRITURE : epxression op_cmp expression
- Variable_entière = 10
- Opérateurs numériques
- Addition, soustraction division, multiplication, puissance….
- V * 10 – pas de ; car dans une expression
- X+5.0*Y – fort typage => X et Y sont de type réels
- Opérateurs booléens
- And,or,not
- ECRITURE : expression op_bool expression
Structure d’un programme :
- Le point d’entrée d’un programme est une unité dont les instructions compilées seront invoquées au lancement du dit programme
- Un programme peut s’appuyer sur d’autres unités
- Il faut déclarer les références à ces unités
- Un langage peut imposer des convention sur les manières d’identifier le point d’entreée
- Un nom particulier
- Structure type
- Liste des unités dont on a besoin
- Déclaration locales
- Suites d’instruction[pic 1]
Exemple :
With Ada,Text_Io,Ada.Integer_Text_IO ;
Use Ada.Text_Io, Ada_integer_Text_IO ;
Procedure Hello is
A : Integer ;
Begin
Get(A) ;
Put(« Hello word avec a= ») :
New_Line ;
End Hello ;
- Source contenu dans le fichier hello.adb
- Si on compile hello.adb on obtient le fichier exécutable hello
- Pour compiler : gnatmake hello
Types et variables
- Variables, espace mémoire, contenant une valeur
- Type : Ensemble de valeurs licites + des opérations
- Certaines opérations peuvent être définie implicitement
- Arithmétique pour les types entiers et réels
- Assemblage (concaténation) pour les tableaux
- Besoin minimum en général admis
- Affectation recopie d’une zone mémoire
- Comparaison d’égalité comparaison de zones mémoires
- Remarque : on souhaite parfois s’en passer
- Opérations d’un type
- Les opérations définies par le programmeur s’il y a lieu
- Les opérations implicites si elles existent à un type
Déclaration de type :
type nom_de_type is declaration de type
Type prédéfinis
- Objectif : disposer d’un mécanisme de type intégré au langage
- Avatange : on ne les déclare pas
- Inconvénient : on ne maitrise pas leurs représentation
- Booleens
- Ensemble de deux valeurs False, True, (Fasle
- Nombres entiers
- Integer, Long_Integer, Short_Integer (opérateurs arithmétiques)
- Natural (0 à +oo), Positif (1 à +oo)
- Méfiance : la représentation dépend du compilateur
- Nombres réels
- Float(opérateurs arithmétique)
- Caractères
- Character vu commeun type énuméré prédéfinis
- Chaines de caractères
- String tableau de caractères (opérateurs de concaténation &)
Utilisation du String
- Utilisation de l’unité prédéfinie Ada.Text_IO
- Déclaration d’une variable
- La_Chaine : String(1…15) ;
- Chaine de 15 caractères au maximum
- Saisie d’une chaine de caractère
- La_Longueur : Natural ;
- Get_Line(La_Chaine, La_Longueur) ;
- La longueur = nombre de caractères effectivement saisis
- Sélection d’une partie de la chaine
- La_Chaine(3) /=’2’
- Comparaison du 3e caractères avec le 2e
- Put_Line(La_Chaine(4,8)) ;
- Affichage de la chaine a partir du 4e caractère jusqu’au 8e
Utilisation des types non prédéfinis
- Permet de tailler un type pour un usage particulier
- Il faut les déclarer
Type énumérer
- Liste d’identificateurs
- Types couleur = {rouge, vert, bleu}
- Opérateurs associés
- Affectation, comparaison d’égalité (et d’inégalité)
- Comparaison d’ordre
Types entiers
- Permet de précser les caractéristiques sur les valeurs admises par une variable entière
- Intervalles de valeurs
- Les types entiers sont toujours bornés par la représentation machine
Types réels
- Deux mode de représetntation
- Virgule fixe (marge d’érrerur fixe sur l’intervalle de valeurs)
- Valeur = partie entière.Partie Décimale
- Virgule flottante
- Valeur= Mantisse*Bexposant
- Permet de préciser des caractéristiques sur la représentation d’un nombre réel
- Précision
- Partie entière, partie décimale
- Intervalle de valeur
- Mantisse, exposant
- Les types réels sont toujours bornés par la représentation machine
Exemple :
Def_réel type ident is delta expression range intervalle ;
def_réel type ident is digits expression [range intervalle] ;
def_reel type ident is delta expression digits expression [range intervalle] ;
Note complémentaire sur les types
- Manipulation des caractéristiques d’un type
- Ada s’appuie sur le naotion d’attributs prédéfinis
Nom_Type’First
Nom_Type’Last
Nom_Type’Image(Variable_Discrète)
Déclaration de variable
- Grammaire :
- Def_var identificateur{, identificateur} : identiifcateur [ :=expression] ;
- Exemple
Structures de constrole :
Conditionnelle :
- Sémantique : execution d’une unique séquence parmi celles qui sont gardées
If N mod 4 /= 0 then
Non_Bissextile
elsif N mod 100 … then
Bissexitle
elsfi N mod 400 then
Bissextile
Endif
...