Programmation OO en Scheme

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

as Architecture des Systèmes d Information

Classes et Objets en Ocaml.

Objets et Programmation. origine des langages orientés-objet

TP1 : Initiation à Java et Eclipse

Une introduction à Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmer en JAVA. par Tama

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

Arbres binaires de recherche

Algorithmique & programmation

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

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

Cours de Programmation 2

Package Java.util Classe générique

OCL - Object Constraint Language

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Chapitre VI- La validation de la composition.

Auto-évaluation Programmation en Java

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

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Traduction des Langages : Le Compilateur Micro Java

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

Initiation à JAVA et à la programmation objet.

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

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

INITIATION AU LANGAGE JAVA

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

TP Contraintes - Triggers

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

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

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Présentation du PL/SQL

Java c est quoi? Java pourquoi?

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

Remote Method Invocation (RMI)

Le langage VHDL. Eduardo Sanchez EPFL

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Java 1.5 : principales nouveautés

Cours 1: Java et les objets

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

ACTIVITÉ DE PROGRAMMATION

Programmation MacOSX / ios

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Patrons de Conception (Design Patterns)

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

Diagramme de classes

JavaServer Pages (JSP)

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

Plan du cours. Historique du langage Nouveautés de Java 7

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

Gestion mémoire et Représentation intermédiaire

4. Groupement d objets

IRL : Simulation distribuée pour les systèmes embarqués

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java Licence Professionnelle CISII,

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

Introduction au Génie Logiciel

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

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

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

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

modules & compilation

Cours d initiation à la programmation en C++ Johann Cuenin

Chapitre 2. Classes et objets

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

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Développement Logiciel

Machines virtuelles fonctionnelles (suite) Compilation ML Java

TP1 : Initiation à Java et Eclipse

Programmation en Java IUT GEII (MC-II1) 1

1 Définition d une classe en Java

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Présentation du langage et premières fonctions

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

Bases de données avancées

Programmation Objet - Cours II

F. Barthélemy. 17 mai 2005

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

3. UML - Unified Modeling Language Diagrammes statiques

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Application 1- VBA : Test de comportements d'investissements

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

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

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

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

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Apprendre Java en 154 minutes

Cours 1 : La compilation

Bases Java - Eclipse / Netbeans

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Programmation Orientée Objet application au langage Java Version Novembre 2007

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Exercices INF5171 : série #3 (Automne 2012)

Compilation (INF 564)

Transcription:

Programmation OO en Scheme Comment encapsuler la pile avec les procédures empiler! et depiler!? La variable PILE ne peut pas être une variable locale dans la fermeture d aucune procédure. Solution : messages avec une fonction de «dispatch» qui décide comment modifier les données locales. Université de Montréal Programmation modulaire notes de cours 1 OO en Scheme II (define pile (lambda () (let ((PILE ())) (lambda msg (case (car msg) ((depiler!) (let ((resultat (car PILE))) (set! PILE (cdr PILE)) resultat)) ((empiler!) (set! PILE (cons (cadr msg) PILE))) (else (error "Methode inconnue"))))))) (define p1 (pile)) (p1 empiler! 2) (p1 empiler! 4) (p1 depiler!) => 4 Université de Montréal Programmation modulaire notes de cours 2

OO en Scheme III Encapsulation de données et méthodes : L objet boîte : méthodes placer!, montrer : messages placer! valeur et montrer (define boite (lambda (valeur-initiale) (let ((valeur valeur-initiale)) (lambda message ; (case (car message) ; message montrer retourne la valeur stockee ((montrer) valeur) ; message placer! val pour changer la valeur stockee ((placer!) (set! valeur (cadr message))) ; message reset! ((reset!) (set! valeur valeur-initiale)) (else (deleguer objet-base message))))))) ; [heritage] Université de Montréal Programmation modulaire notes de cours 3 OO en Scheme IV Délégation : héritage de méthodes (define deleguer (lambda (objet msg) (apply objet msg))) ; objet de base: aucune méthode (define objet-base (lambda message indicateur-methode-indefinie)) (define indicateur-methode-indefinie "Methode inconnue.") Université de Montréal Programmation modulaire notes de cours 4

OO en Scheme V héritage avec sous-classe (define accumulateur (lambda () (let ((super (boite 0))) (lambda message (case (car message) ((placer!) indicateur-message-indefinie) ; n est pas héritée ((add!) ; message add! valeur (envoyer super placer! (add (envoyer super montrer) (cadr message)))) (else (deleguer super message))))))) Université de Montréal Programmation modulaire notes de cours 5 OO en Scheme VI Procédure pour envoyer des messagesaux objets : envoyer (define envoyer (lambda args ; (objet. message) ; A FAIRE: appliquer message à objet: erreur si résultat ; est indicateur-methode-indefinie )) (notez que la forme des messages est différente en TP3 : ici, il n y a pas de self) Université de Montréal Programmation modulaire notes de cours 6

Modules def : module = regroupement syntaxique de données et procédures But : organisation logique du programme unité de compilation Université de Montréal Programmation modulaire notes de cours 7 Modules II utilité de modules : introduire des types abstraits représentation n est pas visible à d autres modules : règles de visibilité pour «information hiding» Type abstrait : 1. définition+opérations en une unité syntaxique 2. d autres unités peuvent déclarés des variables de ce type 3. visibilité de représentation bien contrôlée (encapsulation) Université de Montréal Programmation modulaire notes de cours 8

Modules en Simula SIMULA 67 : 1ère langage de oo pour simulation de grands systèmes avec beaucoup d objets qui s interagissent class Mouse; begin -- variables -- -- procédures -- -- code -- end Mouse; en une unité syntaxique, d autres unités peuvent déclarer des variables de ce type mais la visibilité n est pas contrôlée : les variables locales de la classe sont accessibles à tous Ada, C++, Java : possibilité d avoir des types abstraits Université de Montréal Programmation modulaire notes de cours 9 Modules en Ada Ada : interface (package) et implémentation (package body) package PILEPACK is type PILETYPE is limited private; TAILLE_MAX: constant := 100; function VIDE(PILE: in PILETYPE) return BOOLEAN; procedure EMPILER(PILE: in out PILETYPE; EMT: in INTEGER); function DEPILER(PILE: in out PILETYPE) return INTEGER; -- private type LISTETYPE is ARRAY (1..TAILLE_MAX) of INTEGER; type PILETYPE is record LISTE: LISTETYPE; POS: INTEGER range 0..TAILLE_MAX := 0; end record; end PILETYPE; Université de Montréal Programmation modulaire notes de cours 10

Modules en Ada II 1. limited private déclare un type abstrait qui est visible à d autres unités mais sa représentation est visible seulement au compilateur (nécessaire en Ada pour compilation séparée) 2. la signature des procédures publiques est donnée (nécessaire pour compilation séparée) le nom des paramètres est spécifié car appel par paramètres nommés est possible en Ada : EMPILER(EMT => 8, PILE => MA_PILE); 3. notez les paramètres passés par valeur (in) et par valeurrésultat (in out) 4. private introduit la partie invisible à d autres modules (mais visible au compilateur lors de leur compilation) (un type abstrait peut être déclaré limited private ou private, si private, alors affectation et égalité sont prédéfinis ; si limited private, alors aucune opération n est prédéfinie.) Université de Montréal Programmation modulaire notes de cours 11 Modules en Ada III Implémentation : package body package body PILEPACK is function VIDE(PILE: in PILETYPE) return BOOLEAN is begin return STK.POS = 0; end VIDE; -- implementation d autres procedures: EMPILER et DEPILER end PILEPACK; usage with PILEPACK, TEXT_IO; -- pour importer le package use PILEPACK, TEXT_IO; -- pour ecrire DEPILER au lieu de PILEPACK.DEPILER procedure EXEMPLE is MA_PILE: PILETYPE; begin EMPILER(MA_PILE, 6);... end EXEMPLE; Université de Montréal Programmation modulaire notes de cours 12

Modules paramétrés Ada : generic TAILLE_MAX: POSITIVE; type EMT_TYPE is private; package PILEPACK is type PILETYPE is limited private; procedure EMPILER(PILE: in out PILETYPE; EMT: in EMT_TYPE); -- etc. end PILE_PACK;... package PILE_D_ENTIERS is new PILEPACK(100, INTEGER); package PILE_D_FLOTTANTS is new PILEPACK(999, FLOAT); Université de Montréal Programmation modulaire notes de cours 13 Classes En Ada, rien n empêche de mettre un ou plusieurs types abstraits en un module, un module d Ada n est pas un type. Classes (C++, Java, SIMULA) : types en un module ATTRIBUTS (données) + OPÉRATIONS (méthodes, fonctions, messages) sur ces données. Une classe est un type d objets ayant la même structure et le même comportement. Instance (de classe) : il s agit d un objet du type défini par la classe. Université de Montréal Programmation modulaire notes de cours 14

Classes II Différence entre classe et module : une classe est comme un module mais elle définit aussi un nouveau type. Ainsi on pourra instancier plusieurs objets de ce type (alors que dans le cas du module, il n existe qu une seule instance des variables du module). C++ : constructeurs et destructeurs Java : constructeur (pas de destructeur car ramasse-miette méthode finalize appellée par le «garbage collector» quand l objet est libéré mais à un temps indéfini qui dépend de l implémentation de gc) Université de Montréal Programmation modulaire notes de cours 15