La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 1 Cours n° 9 Interopérabilité logicielle I Entre C++

Présentations similaires


Présentation au sujet: "Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 1 Cours n° 9 Interopérabilité logicielle I Entre C++"— Transcription de la présentation:

1 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 1 Cours n° 9 Interopérabilité logicielle I Entre C++ et Perl

2 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 2 1. Interopérabilité entre C++ et Perl 1.Appels de programmes et de sous-programmes Perl en C++ Sommaire

3 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 3 INTRODUCTION Problématique (1) Multitude de langages informatiques universels 1956 – Fortran (FORmula TRANslation) 1959 – Cobol (COmmon Business-Oriented Language) (DARPA) 1965 – Basic (Beginner's All-purpose Symbolic Instruction Code) 1968 – Pascal (successeur d’Algol-1951 ALGOrithm Langage) 1972 – C (successeur de B lui-même successeur de A-1951) Bell Labs 1981 – C++ 1983 – Ada (DARPA) 1995 – PHP (Personal Home Pages Hypertext Processor) 1996 – Java (Sun) 2000 – C# (Microsoft) 2001 – WDSL (Web Services Description Language ) IBM, Microsoft

4 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 4 INTRODUCTION Problématique (2) Pas de langage informatique universellement utilisé Habitudes de programmation anciennes normes de développement Maintenance du logiciel existant Bibliothèques de composant logiciel Difficulté de la traduction automatique Influence du matériel ancienneté du parc machine disponibilité des compilateurs et des interpréteurs inflation de la mémoire utilisée Nécessité d’une interopérabilité entre langages

5 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 5 INTRODUCTION Solutions (1) - CORBA (www.corba.org) Common Object Request Broker Architecture Pont logiciel ou intergiciel (norme de communication inter-applications en environnement hétérogène) multi-langages, multi-systèmes, multi-communications Langage de définition d’interfaces (Interface Definition Langage) Transmission des paramètres par un bus logiciel (Object Request Broker) 1995 – Version 2.0 IDL pour les langage C, C++ 1997 – Version 2.1 IDL pour les langages Cobol et Ada 1998 – Version 2.2 IDL pour le langage Java (version standard) 2003 – Règles de construction des IDL, standardisées pour les langages Lisp, PL1, Python, Smalltalk, XML/DTD Solution complexe, non triviale à mettre en oeuvre

6 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 6 INTRODUCTION Solutions (2) - Microsoft.NET (www.microsoft.com/net) Plateforme Microsoft pour les services Web/XML Intégré au système d’exploitation Windows (CE, XP, Xbox) Bibliothèque unifiée de classes accessible d’un ensemble de langages CLR (C, C++, C#, Cobol, Fortran, Eiffel, Python, Pascal mais pas Java) Langage commun de spécification d’interface CLS (inspiré de CORBA) Plateforme de développement multilingue (Visual Studio.NET) Lancement en 2001 Solution efficace, plus simple que CORBA à mettre en œuvre, mais propriétaire

7 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 7 INTRODUCTION Solutions (3) - Java Native Interface (www.sun.org) Interface de communication entre des méthodes en Java et des méthodes écrites dans un autre langage (non natives) Intégrée directement le langage Java (langage pivot) Prise en compte de types évolués (objet) 1996 JDK 1.0 – Native Method Interface (NMI) 1997 JDK 1.1 – Java Native Interface (JNI) 2002 J2SE 1.4 – Java Native Interface Extension Solution très efficace, facile à mettre en œuvre, mais restreinte aux langages C, C++ (Cobol, Ada, Fortran)

8 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 8 INTRODUCTION Solutions (4) - Edition de Liens Assemblage d’un ensemble de programmes compilés dans le but de créer un exécutable Introduit par la programmation modulaire Norme commune de représentation des symboles (noms de variables et de méthodes) Pas de norme commune de représentation des variables Restriction aux langages compilés natifs (C, C++, Pascal, Ada, Fortran, Cobol) Librairies statiques (.o.lib) ou dynamiques (.dll.so) Solution simple, accessible sur tous systèmes, mais complexe si transmission de paramètres

9 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 9 1.1 INTEROPERABILITE ENTRE C++ ET PERL Caractéristiques et méthodologies Lien naturel entre C++ et Perl Implémentation de Perl en C, Bibliothèque Perl58.lib (toutes les fonctionnalités de Perl) Edition de liens statique (ajout d’un interpréteur Perl) Bibliothèques de macros et de fonctions perlembed (ajout d’un interpréteur Perl) perlcall (conventions de communication entre C++ et Perl) perlguts (API Perl) Ajout d’un interpréteur Perl (fonction PerlToCpp) Un paramètre d’entrée (1 booléen) création (true) / destruction (false) Paramètre de retour (PerlInterpreter) référence sur un interpréteur Perl

10 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 10 1.1. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Extrait de l’API Perl perl_parse(…) Evaluation d’une expression ou exécution d’un programme call_pv(N, T) Exécution d’un sous-programme N T (type du retour) {G_NOARGS, G_SCALAR, G_ARRAY} newSViv(I) Conversion (C++ -> Perl) d’un entier I newSVpv(s, 0) Conversion de (C++ -> Perl) d’une chaîne de caractères s newSVnv(x) Conversion de (C++ -> Perl) d’un réel x sv_2mortal(V) Ajout d’une variable v dans la pile Perl POPi Conversion du sommet de Pile en un entier (Perl -> C++) POPp Conversion du sommet de Pile en une chaîne de caractères (Perl -> C++) POPs Conversion du sommet de Pile en un réel (Perl -> C++)

11 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 11 1.1.1. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Exemple 1 – Exécution du programme « bonjour.pl » print("bonjour"); Implémentation Perl 5.8 (fonction CallPerlProgram) Deux paramètres d’entrée (référence sur un interpréteur Perl, nom du programme Perm) #include "CppToPerl.h" int main (int argc, char* argv[]) { PerlInterpreter *iPerl = CppToPerl(true); string prog("cours4b/perl/bonjour.pl"); CallPerlProgram(iPerl, prog); }

12 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 12 1.1.2. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Exemple 2 – Exécution d’un sous-programme (1) sub boucle { for ( $i=10 ; $i>=0 ; $i-- ) { print("$i"); } Création d’une méthode d’interface void boucle(PerlInterpreter *my_perl) { cout >" << endl; call_pv("boucle", G_NOARGS); }

13 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 13 1.1.2. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Exemple 2 – Exécution d’un sous-programme (2) int main (int argc, char* argv[]) { PerlInterpreter *iPerl = CppToPerl(true); string prog("cours4b/perl/lib1.pl"); CallPerlProgram(iPerl, prog); boucle(iPerl); Exécution Début d'exécution du programme Perl > > 109876543210

14 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 14 1.1.3. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Exemple 3 – Passage de paramètres (1) sub ssChaineG { my($s, $n) = @_ ; return substr($s, 0, $n); }

15 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 15 1.1.3. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Création et utilisation d’une pile Perl string ssChaineG(PerlInterpreter *my_perl, string s, int n) { dSP ; ENTER ; SAVETMPS ; PUSHMARK(SP) ; // création de la pile XPUSHs(sv_2mortal(newSVpv(s.c_str(), 0))); // string empilé XPUSHs(sv_2mortal(newSViv(n))); // entier empilé PUTBACK ; call_pv("ssChaineG", G_SCALAR);// lancement du sous-programme SPAGAIN; string res((char*)POPp);// résultat dépilé PUTBACK; FREETMPS ; LEAVE ; return res; }

16 Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 16 1.1.3. APPEL DE PROGRAMMES ET DE SOUS-PROGRAMMES PERL EN C++ Exemple d’exécution int main (int argc, char* argv[]) { PerlInterpreter *iPerl = CppToPerl(true); string prog("cours4b/perl/lib1.pl"); CallPerlProgram(iPerl, prog); string s("maison rouge"); cout << ssChaineG(iPerl, s, 4) << endl; } > mais


Télécharger ppt "Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 1 Cours n° 9 Interopérabilité logicielle I Entre C++"

Présentations similaires


Annonces Google