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 èmeannée : 4 PROGRAMMATION ORIENTE OBJET COMPARAISONDESLANGAGESC, C++, JAVA ET FORTRAN Réalisé par : Professeur : ACCALOGOUN Descartes Dr ADEDJOUM AYENA Edgar AZONHOUMON Ignace GOUCLOUNON Juste SESSOU Maurice Année académique : 2012-2013
INTRODUCTION Les langages de programmation sont des outils indispensables aux programmeurs. Ces langages sont vraiment variés et possèdent des 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 aspects du C et C++ Ces trois langages feront l objet de notre étude comparative. HISTORIQUE SUR LES LANGAGES C, C++ et JAVA Le langage C 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 international a 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 programmation structurée vers la P.O.O. De sa conception jusqu à 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 langage applicable à 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 langage universel, disposant des fonctionnalités communes à 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 langage ont peu changé (ils ont quand même été complétés de façon substancielle par Java 5, notamment par 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 C C++ JAVA Entiers Int Long Short Types de Float Réels Base Double Caractères Char Complexes Booléens Bool boolean Opérateurs logiques Opérateurs Arithmétiques Addition + Soustraction - Multiplication Division / Modulo % ET && OU Egalite == Différence!= Inférieur < Supérieur > Inférieur ou égal <= Supérieur ou égal >= *
Fonction principale int main(int argc, char *argv[]) public class nom_c static void main(s instructions Syntaxe générale des fonctions Type_fonction nom_fonction(type paramètre1, type paramètre2, Fonctions Type_fonction nom_fonction(type paramètre1, type paramètre2, Passage d arguments par valeur Type_fonction nom_fonction(type* paramètre1, type* Passage paramètre2,, type* paramètren) d arguments par adresse Passage d arguments par référence Type_fonction nom_fonction(type ¶mètre1, type ¶mètre2,, type ¶mètren) Type_fonction nom_fonction(type paramètre1, type paramètre2,, ty paramètren) Pointeurs Déclaration Type *nom_pointeur ; Type *nom_pointeur ;
Types structurés Structures Classes typedef struct nom_structure nom_appelation ; struct nom_structure struct nom_structure Déclaration des variables Déclaration des variab ; les ; class nom_class : options d héritage Public : constructeur visibilité : méthodes public : destructeur [optionnel] visibilité : attributs ; visibilité class nom extends class_mer implements interfa interfacen public constructeu visibilité méthode1instruc visibilité méthodeninstruc private attributs Affichage et lecture à l écran Affichage Lecture System.out.print(v puts( texte ); System.out.println std::cout << [texte] <<[var1, printf( texte+format "texte") ; var2, varn] << [iomanip] ;, var1, var2,, varn) ; System.out. printf format, var1, var getchar() ; Scanner sc = new getch() ; Scanner(System.in getline(char*) ; gets(char*, int n) ; var = sc.nexttype 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) ;
Catch(Exception e //Caractère fputc (nom_fichier) ; //Chaine de caractère Try Ecriture s fichier.print(var + nom_fichier_sortie << var1 < fputs (chaine, taille_m fichier.println(var + < ax, fichier. printf( text 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) ; Fermeture fclose(nom_fichier) ; nom_fichier.close() ; Try fichier.close() ; Conditions Si Si sinon Si sinon si sinon If (conditions) If (conditions) else If (conditions) Else if (conditions)
Selon Else instructions Switch (var) case valeur1 : instructions break case valeur2 : instructions break.. case valeurn : instructions break default : instructions Boucles Pour for (initialisation; c de continuité; mod for(initialisation;condition de continuité;modification) while (conditions) Tant que Répéter tant do que Ou for (type var :table ar)
while (conditions) ; Allocation dynamique Allocation nom_tableau=malloc( nom_tableau=new type de mémoire taille*sizeof(type)) ; [taille] ; 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 fonctions inline, les fonctions operator et 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 machine pour approcher le langage humain. 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