REPUBLIQUE DU BENIN *******@******* MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE(MESRS) *******@******* UNIVERSITE D’ABOMEY – CALAVI(UAC) *******@******* ECOLE POLYTECHNIQUE D’ABPOMEY­CALAVI(EPAC) *******@******* DEPARTEMENT DE GENIE INFORMATIQUE ET TELECOMMUNICATION Année d’étudeème :4 année PROGRAMMATION ORIENTE OBJET COMPARAISON DESLANGAGES C,C++, JAVA ET FORTRAN Réalisé par : Professeur : ACCALOGOUN Descartes Dr ADEDJOUM AYENA Edgar AZONHOUMON Ignace GOUCLOUNON Juste SESSOU Maurice : 2012-2013 Année académique INTRODUCTION Les langagesde programmationsont des outils indispensablesaux programmeurs. Ces langagessont vraiment variés et possèdentdes caractéristiques propres et similitudes. Au nombre de ces langages, nous pouvons citer le FORTRAN, le C, le C++ et le JAVA. FORTRAN est un langage de traitement mathématique. Le C++ n’est rien d’autre que du C évolué. Quant à JAVA, il est venu pour simplifier certains aspectsdu C et C++Ces trois langagesferont l’objet de notre étude comparative. HISTORIQUE SUR LES LANGAGES C, C++ et JAVA Le langageC a été créé en 1972 par Denis Ritchie avec un objectif relativement limité : écrire un système d'exploitation (UNIX). Mais ses qualités "opérationnelles"l'ont très vite fait adopté par une large communauté de programmeurs. Une première "définition" du langage est apparue en 1978 avec l'ouvrage de Kernighan et Ritchie The C programming language. Mais le langage a continué d'évoluer après cette date à travers les différents compilateurs qui ont vu le jour. Son succès internationala contribué à sa normalisation,d'abord par l'ANSI (American National Standard Institute), puis par l'ISO (International Standardization Organisation), plus récemment en 1993 par le CEN (Comité européen de normalisation) et enfin, en 1994, par l'AFNOR. E fait, et fort heureusement, toutes ces normes sont identiques, et l'usage ve qu'on parle de "C ANSI" ou de "C norme ANSI". Le langage C++, quant à lui, a été conçu suivant une démarche hybride. En effet, Bjarne Stroustrup, son créateur, a cherché à adjoindre à un langage structuré existant (le C), un certain nombre de spécificités lui permettant d’appliquer les concepts de P.O.O. Dans une certaine mesure, i permis à des programmeurs C d’effectuer une transition en douceur de la programmationstructuréevers la P.O.O. De sa conceptionjusqu’àsa normalisation, le langage C++ a quelque peu évolué. Initialement, un certain nombre de publications de AT&T ont servi de référence du langag Les dernières en date sont : la version 2.0 en 1989, les versions 2.1 et 3 en 1991. C’est cette dernière qui a servi de base au travail du comité ANSI qu sans la remettre en cause, l’a enrichie de quelques extensions et surtou de composants standard originaux se présentant sous forme de fonctions e de classes génériques qu’on désigne souvent par le sigle S.T.L (Standard Template Library). La norme définitive de C++ a été publiée par l’ANSI en juillet 1998. En ce qui concerne JAVA, on peut faire remonter sa naissance à 1991. À cette époque, des ingénieurs de chez SUN ont cherché à concevoir un langageapplicableà de petits appareilsélectriques(on parle de code embarqué). Pour ce faire, ils se sont fondés sur une syntaxe très proche de celle de C++, en reprenant le concept de machine virtuelle déjà expl auparavant par le Pascal UCSD. L’idée consistait à traduire d’abord un programme source, non pas directement en langage machine, mais dans u pseudo langageuniversel,disposantdes fonctionnalitéscommunes à toutes les machines. Ce code intermédiaire, dont on dit qu’il est form de byte codes , se trouve ainsi compact et portable sur n’importe quelle machine ; il suffit simplement que cette dernière dispose d’un programme approprié (on parle alors de machine virtuelle) permettant de l’interpréter dans le langage de la machine concernée. En fait, ce projet de langage pour code embarqué n’a pas abouti en tant qu tel. Mais ces concepts ont été repris en 1995 dans la réalisation du logiciel HotJava, un navigateur Web écrit par SUN en Java, et capable d’exécuter d applets écrits précisément en byte codes. Les autres navigateurs Web ont suivi, ce qui a contribué à l’essor du langage qui a beaucoup évolué depuis cette date, sous forme de versions successives : 1.01 et 1.02 en 1996, 1.1 98 et 1.2 (finalement rebaptisée Java 2) en 1999, 1.3 en 2000, 1.4 en 2002 5.0 en 2004 (toujours appelées Java 2). Ainsi parle-t-on du J2SE 1.4 (Java 2 Standard Edition 1.4) basée sur le JDK 1.4 (Java Development K 1.4), plus récemment du J2SE5.0 (JDK 5.0) ou encore de Java 5. En revanch la dernière version s’intitule JSE 6 (le 2 a disparu !), ou plus simplement Java 6 1 . On notera que, au fil des différentes versions, les aspects fondamentaux d langageont peu changé(ils ont quand mêmeété complétésde façon substanciellepar Java 5, notammentpar l’introduction de la programmation générique et du remaniement des "collections"). En revanche, les bibliothèques standards (API) ont beaucoup évolué, à la fois par des modifications et par des ajouts. Il en va d’ailleurs de même des ensembles de spécifications accompagnant chaque version standard de Ja (J2EE jusqu’à la version 4 et JEE depuis la version 5). TABLEAU DE COMPARAISON DES LANGAGES C, C Eléments de comparaison Entiers Types de Base Réels Caractères Complexes Booléens Addition Soustraction Opérateurs MultiplicaArithmétition ques Division Modulo ET OU Egalite Différence Opérateurs Inférieur logiques Supérieur Inférieur ou égal Supérieur ou égal C C++ Int Long Short Float Double Char JAVA Bool boolean + * / % && || == != < > <= >= int main(int argc, char *argv[]) Fonction { principale Instructions } Syntaxe générale des fonctions public class nom_c static void main(S { instructions } } Type_fonction nom_fonction(type paramètre1, type paramètre2, … { Instructions } Type_fonction nom_fonction(type paramètre1, type paramètre2, … Passage { d’arguments Fonctions Instructions par valeur } Type_fonction nom_fonction(type* paramètre1, Passage paramètre2, …, type* paramètreN) d’arguments { par Instructions adresse } Type_fonction nom_fonction(type Passage &paramètre1, type d’arguments &paramètre2, …, type par &paramètreN) référence { Instructions } Pointeurs Déclaration Type *nom_pointeur ;Type *nom_pointeur ; type* Type_fonction nom_fonction(type paramètre1, type paramètre2, …, ty paramètreN) { Instructions } typedef struct nom_structure nom_appelation ; struct nom_structure struct nom_structure { Structures { Déclaration des variables Déclaration des variab }; les }; Types structurés Classes visibilité class nom extends class_mer class nom_class : options implements interfa d’héritage interfaceN { { Public : constructeur public constructeu visibilité : méthodes visibilité public : destructeur méthode1{instruc [optionnel] … visibilité : attributs visibilité }; méthodeN{instruc private attributs } System.out.print(v puts(‘’texte’’); System.out.println std::cout << [texte] <<[var1, Affichage printf(’’texte+format ‘’ "texte") ; var2, … varN] << [iomanip] ; , var1, var2, …, varN) ; System.out. printf format’’, var1, var Affichage et lecture à getchar() ; Scanner sc = new l’écran getch() ; Scanner(System.in getline(char*) ; gets(char*, int n) ; var = sc.nextType Lecture std::cin >> var1 >> var2 >> … scanf(“texte + format”, Scanner sc = new >> varN ; Scanner(System.in var1, var2, …, varN) ; var = sc.nextLine( Fichiers // Ecriture ifstream nom_fichier_entrée ; // Ecriture // Lecture FILE *nom_fichier=NU PrintWriter fichier Déclaration ofstream nom_fichier_sortie ; LL ; // Lecture // Ecriture + Lecture Scanner fichier ; fstream nom_fichier_d’entrée _sortie ; Try { fichier = new PrintWriter(new // Ecriture FileWriter(nom_fic nom_fichier_entrée.open(‘’ } emplacement_fichier’’) ; nom_fichier=fopen(‘’e Catch(FileNotFoun // Lecture mp on e){ nom_fichier_sortie.open(‘ Ouverture lacement_fichier’’, ‘’m } ’emplacement_fichier’’) ; ode Try { // Ecriture + lecture d’ouverture’’) ; fichier = new Scan nom_fichier_entrée_sortie.op File(nom_fichier)) en(‘’emplacement_fichier’’, } ios ::in|ios ::out) ; Catch(FileNotFoun on e){ } //Caractère fgetc(nom_fichier) ; //Chaine de caractère s Try { fgets(chaine, taille_ma nom_fichier_entrée >> var1 var = fichier.nextT x, >> var2 >>… >> varN ; var = fichier.nextL Lecture nom_fichier) ; nom_fichier_entrée_sortie >> } //Chaine de var1 >> var2 >>… >> varN Catch(Exception ; e caractères avec format } fscanf (nom_fichier, format_variable, nom_variable) ; //Caractère fputc (nom_fichier) ; //Chaine de caractère Try { s fichier.print(var + nom_fichier_sortie << var1 < fputs (chaine, taille_m fichier.println(var + < ax, fichier. printf(’’text Ecriture var2 <<… << varN << endl ; nom_fichier) ; var1, var2, …, var nom_fichier_entrée_sortie << //Chaine de caractère } var1 << var2 <<… << varN ; s avec format Catch(Exception e fprintf (nom_fichier, } format_variable, nom_variable) ; Try { fichier.close() ; Fermeture fclose(nom_fichier) ;nom_fichier.close() ; } Catch(Exception e } Si Conditions Si sinon Si sinon si sinon If (conditions) { Instructions } If (conditions) { Instructions } else { Instructions } If (conditions) { Instructions } Else if (conditions) Selon Boucles { Instructions } Else { instructions } Switch (var) { case valeur1 : instructions break case valeur2 : instructions break .…. case valeurN : instructions break default : instructions } for (initialisation; c de continuité; mod { for(initialisation;condition de continuité;modification) Instructions { } Ou Pour Instructions for (type var :table } ar) { Instructions } while (conditions) { Tant que Instructions } Répéter tantdo que { Instructions }while (conditions) ; Allocation nom_tableau=malloc(nom_tableau=new type Allocation de mémoire taille*sizeof(type)) ; [taille] ; dynamique Libération free(nom_tableau) ; delete [] nom_tableau ; de mémoire nom_tableau=new [taille] NB Toutes les syntaxes du langage C peuvent être utilisées en langage C++. En C++ il existe aussi des fonctionnalités très intéressantes comme le fonctionsinline, les fonctionsoperatoret toutes les joies de la programmation orientée objet En Java, il existe des classes représentant des types de base en terme d’objet. Types de base int, long float, double Char Boolean Classes équivalentes Interger Double Character Boolean CONCLUSION Les langages de programmation ont évolués dans le temps du langage machinepour approcherle langagehumain.Cela donne une certaine aisance dans la nouvelle manière de programmer. Notons aussi que les langages de programmation de dernière génération intègrent de nouvelles notions, celle de la programmation orienté objet qu’on retrouve dans les langages C++ et java. BIBLIOGRAPHIE Claude Delannoy. – Apprendre le C++. N°12135, 1re édition 2007, 780 pages. Claude Delannoy. – C++ pour les programmeurs C. N°12231, environ 580 pages. Claude Delannoy. – Programmer en Java (Java 5 et 6). N°12232, 5e édition, environ 780 pages + CD-Rom, à paraître. Jean-Bernard Boichat, apprendre java et C++ en parallèle, EYROLLES 4è Edition Cours de programmation: Fortran 90 Alexandre Mayer