Le langage des modules

Documents pareils
modules & compilation

Cours de Programmation 2

21 mars Simulations et Méthodes de Monte Carlo. DADI Charles-Abner. Objectifs et intérêt de ce T.E.R. Générer l'aléatoire.

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Classes et Objets en Ocaml.

Packet Tracer : configuration des listes de contrôle d'accès étendues, scénario 1

Configuration de tous les systèmes d exploitations

ADMINISTRATION DE RESEAUX SOUS LOGICIEL «OPEN SOURCE»

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours 1 : La compilation

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

ACTIVITÉ DE PROGRAMMATION

Définition des Webservices Ordre de paiement par . Version 1.0

Prérequis. Installation SNMP sous ESX. Date 19/01/2011 Version 1.1 Référence 001 Auteur Quentin OZENNE

TP1. Outils Java Eléments de correction

cc.region.beaujeu@wanadoo.fr Site Internet Actuellement nous trouvons ce schéma réseau :

Oléane VPN : Les nouvelles fonctions de gestion de réseaux. Orange Business Services

Le Client/Serveur avec Enterprise Miner version 4

Sommaire : = Configurations Obligatoire o = Configurations Facultative

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

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

Fonctionnement de Iptables. Exercices sécurité. Exercice 1

Prototype de canal caché dans le DNS

Cisco Certified Network Associate

Plateforme PAYZEN. Définition de Web-services

«Clustering» et «Load balancing» avec Zope et ZEO

TD4 - Supervision et métrologie des réseaux. 1 Supervision des applications et services réseaux et des ressources locales

Administration des ressources informatiques

Architectures en couches pour applications web Rappel : Architecture en couches

CONFIGURATION FIREWALL

Serveur de messagerie sous Debian 5.0

VIDÉOSURVEILLANCE. Procédures de paramétrage des différentes box du marché

Yann BECHET 32 ans 8 ans d expérience yann@bechet.org

L installation du module Webmail nécessite également quelques prérequis, à savoir :

DHCP et NAT. Cyril Rabat Master 2 ASR - Info Architecture des réseaux d entreprise

Déploiement de l iphone et de l ipad Gestion des appareils mobiles (MDM)

Protocoles réseaux. Abréviation de Binary Digit. C'est la plus petite unité d'information (0, 1).

Cours CCNA 1. Exercices

RESEAUX TCP/IP: NOTIONS AVANCEES. Preparé par Alberto EscuderoPascual

Serveurs de noms Protocoles HTTP et FTP

Développement des Systèmes d Information

Logiciel Libre Cours 2 Fondements: Programmation

SQUID P r o x y L i b r e p o u r U n i x e t L i n u x

Outils d'analyse de la sécurité des réseaux. HADJALI Anis VESA Vlad

VPN. Réseau privé virtuel Usages :

Quelques propositions pour une organisation des ressources réseaux prenant en compte les besoins du LACL

Guide de connexion Wi-Fi sur un hotspot ADP Télécom

Mobile OGSI.NET: Grid Computing on Mobile Devices

PRODUCTION ASSOCIEE. Le réseau de la M2L est organisé VLANs et comporte des commutateurs de niveau 2 et des routeurs.

Alexis Lechervy Université de Caen. M1 Informatique. Réseaux. Filtrage. Bureau S3-203

Les Imprimantes EOLE 2.3. Documentation sous licence Creative Commons by-nc-sa - EOLE (http ://eole.orion.education.fr) révisé : Janvier 2014

Eole - gestion des dictionnaires personnalisés

LINUX REDHAT, SERVICES RÉSEAUX/INTERNET

Installation d un serveur virtuel : DSL_G624M

Travaux pratiques : configuration et vérification des listes de contrôle d'accès IPv6 Topologie

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Bases de programmation. Cours 5. Structurer les données

ALOHA LOAD BALANCER METHODE DE CONTROLE DE VITALITE

Les ACL Cisco. F. Nolot Master 2 Professionnel STIC-Informatique 1

La sécurité des réseaux sans fil à domicile

Clément Prudhomme, Emilie Lenel

II/ Le modèle OSI II.1/ Présentation du modèle OSI(Open Systems Interconnection)

MANUEL D INSTALLATION. du module Chronopost pour. version 1.0.0

Sélection du contrôleur

Fingerprinting d'applications Web

Documentation Utilisateur/Développeur. Client de Monitoring CamTrace

Pour configurer le Hitachi Tecom AH4021 afin d'ouvrir les ports pour "chatserv.exe", vous devez suivre la proc

Machines virtuelles fonctionnelles (suite) Compilation ML Java

GUIDE DE L UTILISATEUR

Programmation Web. Madalina Croitoru IUT Montpellier

TR2 : Technologies de l'internet. Chapitre VI. NAT statique et dynamique Overloading (PAT) Overlapping, port Forwarding Serveur Proxy, DMZ

Initiation à JAVA et à la programmation objet.

ECOLE POLYTECHNIQUE DSI. Utilisation des serveurs mandataires («proxy») avec les protocoles d usage courant

Logiciel de connexion sécurisée. M2Me_Secure. NOTICE D'UTILISATION Document référence :

SERVICE CONTACT INSTANTANÉ GUIDE D UTILISATEUR

Figure 1a. Réseau intranet avec pare feu et NAT.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

L annuaire et le Service DNS

Telecharger gratuitement convertisseur de fichier word en pdf

SPÉCIFICATIONS TECHNIQUES Impression Télécharger

GenIP 30i : Passerelle intelligente dédiée aux applications industrielles les plus critiques

Programmation Internet Cours 4

Le routeur de la Freebox explications et configuration

Java Licence Professionnelle CISII,

SECURITE DES SYSTEMES DʼINFORMATION FREEIPA Projet de semestre ITI 3eme année Etudiant RAZAFIMAHATRATRA LAURE Professeur : Gérald LITZISTORF

Procédure d installation de la solution Central WiFI Manager CWM

Administration d un client Windows XP professionnel

Standard. Manuel d installation

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

4D WebStar. WebStar, leader des serveurs internet sur Macintosh. Olivier Deschanels Simil Guetta Doug Finley. 4D WebStar. Histoire de WebStar

VIDEO SURVEILLANCE SV82400 SV82500 SV82600 Type de panne cause Que faire? VIDEO SURVEILLANCE IPSV87050 VIDEO SURVEILLANCE IPSV87050 SERR1

Créer un fichier PDF/A DÉPÔT ÉLECTRONIQUE

Les Content Delivery Network (CDN)

ETHEREAL. Introduction. 1. Qu'est-ce qu'ethereal Historique Le statut d'ethereal

Saisie sur un ordinateur OS/390 Ici sur jedi.informatik.uni-leipzig.de ou

Guide du Pilote d Imprimante Universel

Réseaux IUP2 / 2005 DNS Système de Noms de Domaine

Documentation d information technique spécifique Education. PGI Open Line PRO

Gestion d identités PSL Exploitation IdP Authentic

Transcription:

Programmation fonctionnelle avec OCaml 5ème séance, 16 avril 2015 Le langage des modules samuel.hornus@inria.fr http://www.loria.fr/~shornus/ocaml/

Rappels de la 3ème séance module type PILE = sig type a t val create : unit -> a t val push : a -> a t -> unit val pop : a t -> a module Pile : PILE = type a t = a list ref let create () = ref [] let push x p = p := x::!p let pop p = match!p with [] let rec print p = match p with []

Rappels de la 3ème séance module type PILE = signature de module sig type a t val create : unit -> a t val push : a -> a t -> unit val pop : a t -> a module Pile : PILE = type a t = a list ref let create () = ref [] let push x p = p := x::!p let pop p = match!p with [] let rec print p = match p with []

Rappels de la 3ème séance module type PILE = sig type a t val create : unit -> a t val push : a -> a t -> unit val pop : a t -> a signature de module module restreint par la signature PILE module Pile : PILE = type a t = a list ref let create () = ref [] let push x p = p := x::!p let pop p = match!p with [] let rec print p = match p with []

Rappels de la 3ème séance module type PILE = sig type a t introduit une collection de définitions : valeurs, val types create ou modules. : unit C est -> a une t ure. module val push Nom : = a -> a t -> unit permet de donner un nom à cette ure et en fait un module. val pop : a t -> a module Pile : PILE = module restreint par la signature PILE type a t = a list ref let create () = ref [] let push x p = p := x::!p let pop p = match!p with [] let rec print p = match p with []

Rappels de la 3ème séance module type PILE = signature de module sig type a t val create : unit -> a t val push : a -> a t -> unit val pop : a t -> a module Pile : PILE = sig introduit une signature de module : une interface type pour a un t = module. a list ref module let create type NOM () = sig ref [] permet de donner un nom let à cette push signature. x p = p := x::!p On let restreint pop souvent p = match une ure!p with par [] une signature pour let rec print p = match p with [] cacher certaines définitions : module Pile : PILE =

Utilisation d un module En dehors du module, on accède à ses composants grâce à la notation pointée : # let p = Pile.create ();; val p : a Pile.t = <abstr> # Pile.push 45 p;; - : unit = () # Pile.pop p;; - : int = 45 # Pile.pop p;; Exception: Failure "erreur : la pile est vide".

Utilisation d un module En dehors du module, on accède à ses composants grâce à la notation pointée : # let p = Pile.create ();; val p : a Pile.t = <abstr> # Pile.push 45 p;; - : unit = () # Pile.pop p;; - : int = 45 # Pile.pop p;; Exception: Failure "erreur : la pile est vide". Une signature de module fournit une interface entre l intérieur et l extérieur du module. Elle permet de cacher des définitions et de restreindre (ou abstraire) des types.

Le langage des modules module type NomDeLaSignature = sig signature type type val nom : type module Nom : Signature

Le langage des modules module type NomDeLaSignature = sig type val nom : type module Nom : Signature signature type module NomDuModule [: Signature] = module/ure type nom = valeur let nom [paramètres] = module Nom : Signature

Le langage des modules : les foncteurs module Nom = functor (M1 :S1 ) -> functor (M2 :S2 ) -> -> foncteur fonction foncteur = fonction d une ure vers une ure. foncteur = module paramétré par d autres modules

Le langage des modules : les foncteurs module Nom = functor (M1 :S1 ) -> functor (M2 :S2 ) -> -> foncteur fonction foncteur = fonction d une ure vers une ure. foncteur = module paramétré par d autres modules Autre syntaxe : module Nom (M1 :S1 ) (M2 :S2 ) (M3 :S3 ) =

Le langage des modules : les foncteurs Syntaxe d une signature d un foncteur : module type Nom = functor (M1 :S1 ) -> functor (M2 :S2 ) -> -> sig

Restriction d un module par une signature Sert à abstraire certains types et cacher certaines valeurs (données, fonctions) : module Nom : Signature = module Nom = Nom : Signature Sert à spécifier le contenu des modules paramètres d un foncteur : module Nom : Signature = functor (M1 :S1) -> functor (M2 :S2) -> DÉMO (ex1)

Application d un foncteur Étant donné module F (P1:S1) (P2:S2) (Pn:Sn) = On applique un foncteur à des paramètres modules, pour obtenir un nouveau module : module M = F (Titi) (Toto) M est le nouveau module, résultat du foncteur F appliqué aux n modules Titi, Toto, Titi doit respecter la signature S1 ; Toto doit respecter la signature S2, etc. DÉMO (ex2 et ex3)

Codons un module On veut créer un module pour gérer des ensembles de valeurs. On veut : créer un ensemble vide ajouter des valeurs dans un ensemble (du même type) savoir si une valeur est dans un ensemble supprimer une valeur d un ensemble

Codons un module On veut créer un module pour gérer des ensembles de valeurs. On veut : créer un ensemble vide ajouter des valeurs dans un ensemble (du même type) savoir si une valeur est dans un ensemble supprimer une valeur d un ensemble Ajout d une égalité de type : (Signature with type t1 = t2 ) où t1 est un type déclaré dans Signature

Exemple : protocoles de communication http ://www.cs.cmu.edu/groups/fox/papers/lfp-signatures.ps module type PROTOCOL = sig module Tcp (Lower : PROTOCOL)= module Ip (Lower : PROTOCOL) = module Ethernet (Lower : PROTOCOL) = Instanciation : module EthDevice : DEVICE PROTOCOL = module EthInstance = Eth(EthDevice) module IpInstance = Ip(EthInstance) module TcpInstance = Tcp(IpInstance) Utilisation : let connexion = TcpInstance.active open