comparaisondeslangagesc,c++,java fortran

publicité
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
Téléchargement