Vous êtes sur la page 1sur 37

Université Sidi Mohammed Ben Abdallah

Faculté des Sciences – Dhar El Mehrez – Fès

1
Pr. MAHRAZ Med Adnane
ANNÉE UNIVERSITAIRE: 2016 - 2017
 Java a été développé à partir de décembre 1990
par une équipe de Sun Microsystems dirigée par
James Gosling
 Au départ, il s’agissait de développer un langage
de programmation pour permettre le dialogue entre
de futurs ustensiles domestiques
 Or, les langages existants tels que C++ ne sont pas à la hauteur
: recompilation dès qu'une nouvelle puce arrive, complexité de
programmation pour l'écriture de logiciels fiables...

2
 Les développeurs Java ont réalisé un langage indépendant
de toute architecture de telle sorte que Java devienne idéal
pour programmer des applications utilisables dans des
réseaux hétérogènes, notamment Internet.
 Le développement de Java devint alors un enjeu stratégique
pour Sun et l'équipe écrivit un navigateur appelé HotJava
capable d’exécuter des programmes Java.
 La version 2.0 du navigateur de Netscape a été développée
pour supporter Java, suivi de près par Microsoft (Internet
Explorer 3)
 L'intérêt pour la technologie Java s’est accru rapidement:
IBM, Oracle et d'autres ont pris des licences Java.

3
 Nous verrons
 Caractéristiques de Java et son environnement de développement
 Structures fondamentales
 La programmation par objets en Java
 Héritage
 Polymorphisme
 Les exceptions, les entrées / sorties en Java
 Les collections en Java
 Les paquetages

 Nous essaierons d’aborder les thèmes suivants si nous en avons le


temps :
 La programmation des interfaces graphiques en Java (AWT et Swing)
 L’accès aux bases de données

4
 Nécessité d’analyser le problème pour
pouvoir le traduire en une solution
informatique
(cela semble évident, mais pourtant!)
 avant de construire un bâtiment, on fait un
plan. Ce n’est pas différent en informatique :
conception de l’algorithme, i.e. une réponse
(rationnelle) au problème posé
 puis mise en œuvre technique - le codage -
dans un langage de programmation, dans
notre cas Java.
5
Se poser les bonnes questions
 Quelles sont les objets qui
interviennent dans le problème?
Quelles sont les données, les objets,
que le programme va manipuler?
 Quelles vont être les relations entre
ces objets? Quelles sont les
opérations que je vais pouvoir
effectuer sur ces objets?
6
 Une suite d’instructions
 Exemple:
1. Faire A (un calcul)
2. Faire B
3. Tester une condition: si satisfaite aller à 2, sinon, aller à 4
4. Faire C
 Un programme est écrit dans un langage
 Langage machine (add 12, …): bas niveau
 Langage haut niveau
 Procédural
 C, Basic, Cobol, Pascal, Fortran, …
 Orienté Objet (OO):
 Java, VB, C++, …
 IA (intelligence artificielle):
 Prolog, Lisp

7
Édition du • Écrire un programme dans und
code
langage (e.g. Java)

Compiler le
• Traduire le programme dans un
programme langage de bas niveau (machine)
• Produire un programme (code)
exécutable

• Charger le programme en 8
mémoire (typiquement en
 Programme source, code source
 Programme écrit dans un langage
 Code machine, code exécutable
 Programme dans un langage de machine, directement
exécutable par la machine
 Compilation (compilateur)
 Traduire un code source en code exécutable
 Interpréteur
 Certains langages n’ont pas besoin d’être traduit en code
machine
 La machine effectue la traduction sur la volée (on the fly),
instruction par instruction, et l’exécute
 E.g. Prolog, JavaScript

9
Etapes qui ont lieu avant l'exécution pour un langage compilé
comme C++

Fichier
de Librairies
code

Programme
Compilation Code objet Edition de liens
exécutable

Autres code objet


Fichier
d'entête

10
Cas de Java
Avant exécution Exécution

Autres byte code

Fichier
Byte code Machine virtuelle
de code Compilation
Java (JVM)
Java
javac MaClasse.class java
MaClasse.java

11
 Syntaxe d’un langage
 Comment formuler une instruction correcte
(grammaire)
 Sémantique
 Ce que l’instruction réalise

 Erreur
 de compilation: typiquement reliée à la syntaxe
 d’exécution: sémantique (souvent plus difficile à
détecter et corriger)

12
 Langage orienté objet
 Notions de classes, héritage, …

 Beaucoup d’outils disponibles (packages)


 JDK (Java Development Kit)

 Historique
 Sun Microsystems
 1991: conception d'un langage indépendant du
hardware
 1994: browser de HotJava, applets
 1996: Microsoft et Netscape commencent à soutenir
 1998: l‘édition Java 2: plus stable, énorme librairie

13
 Compiler un programme en Byte Code
 Byte code: indépendant de la machine
 Interprété par la machine

 javac programme.java
 Génère programme.class
 java programme
 Lance le programme

14
Nom de la classe

public class Salut


{ Une méthode
public static void main(String[] args)
{ commentaire
// afficher une salutation Une instruction
System.out.println(“Bonjour tout le monde!");
}
}

 Stocker ce programme dans le fichier Salut.java

15
 Compilation
 javac Salut.java
 Ceci génère salut.class

 Lancer l’exécution
 java Salut

 Résultat de l’exécution
Bonjour tout le monde!

16
 mots réservés: public class static void
 identificateurs: args Salut main String System out
println
 main String System out println: ont une fonction prédéfinie

 littéral: "Bonjour tout le monde!"


 ponctuation: { accolade } [ crochet ] ( parenthèse )
 Commentaires
 // note importante pour comprendre cette partie du code
 /* … commentaires sur plusieurs lignes
*/

17
 Un programme en Java est défini comme une classe

L'en-tête de Nom de la
la classe classe
Attributs

Le corps
Méthodes

18
 L'en-tête de la classe
public class NomDeClasse
 public = tout le monde peut utiliser cette classe
 class = unité de base des programmes OO

 Une classe par fichier


 La classe NomDeClasse doit être dans le fichier
NomDeClasse.java
 Si plus d’une classe dans un fichier .java, javac
génère des fichiers .class séparés pour chaque
classe

19
 Le corps
{

}
 Contient les attributs et les méthodes
 Attributs: pour stocker les informations de la classe
 Méthodes: pour définir ses comportement, ses traitements, …

 Conventions et habitudes
 nom de classe: NomDeClasse
 indentation de { }
 indentation de ...

20
 L'en-tête:
public static void main(String[] args)
 main: nom de méthode
 void: aucune sortie (ne retourne rien)
 String[] args: le paramètre (entrée)
 String[]: le type du paramètre
 args: le nom du paramètre

 Conventions
 nomDeParametre
 nomDeMethode
 nomDAttributs
 nomDObjet

21
 Le corps:
{
// afficher une salutation
System.out.println("Bonjour tout le monde!");
}
 contient une séquence d'instructions, délimitée par {
}
 // afficher une salutation : commentaire
 System.out.println("Bonjour tout le monde!"): appel de
méthode
 les instructions sont terminées par le caractère ;

22
 En général:
 nomDObjet.nomDeMethode(<liste des paramètres>)
 System.out: l'objet qui représente le terminal (l’écran)
 println: la méthode qui imprime son paramètre (+ une fin de
ligne) sur un stream (écran)
System.out.println("Bonjour tout le monde!");
 "Bonjour tout le monde!": le paramètre de println

 La méthode main
 “java Salut” exécute la méthode main dans la classe Salut
 main est la méthode exécutée automatiquement à
l’invocation du programme (avec le nom de la classe) qui la
contient

23
 Variable: contient une valeur
 Nom de variable
 Valeur contenue dans la variable
 Type de valeur contenue
 int: entier, long: entier avec plus de capacité
 Integer: classe entier, avec des méthodes
 float: nombre réel avec point flottant, double: double précision
 String: chaîne de caractères ("Hello, World!")
 char: un caractère en Unicode (‘a’, ‘$’, ‘é’, …)
 boolean: true/false
 Définition générale
Type nomDeVariable; 0
Type: int
Exemple: int age; Nom: age

24
 Affecter une valeur à une variable
 E.g. age = 25;
Type: int 25

Nom: age

 Erreur si: age = "vingt cinq";


 Type de valeur incompatible avec la variable

25
 Une condition correspond à vrai ou faux
 E.g. (age < 50)
 Tester une condition:
if condition A; else B;
 si condition est satisfaite, alors on fait A;
 sinon, on fait B
 E.g. if (age < 65)
System.out.println("jeune");
else
System.out.println("vieux");
26
 Pour les valeurs primitives (int, double,
…)
 x == y : x et y ont la même valeur?
 x > y, x >= y, x != y, …
 Attention: (== != =)

27
args[0]: premier argument
après le nom
public class Salutation
{
public static void main(String[] args) Integer.parseInt(args[0]):
{ reconnaître et transmettre
int age; la valeur entière qu’il
age = Integer.parseInt(args[0]); représente
// afficher une salutation selon l’age
System.out.print(“Salut, le ");
if (age < 65) print: sans retour à la ligne
System.out.println(“jeune!");
println: avec retour à la ligne
else
System.out.println(“vieux!");
}
}
 Utilisation:
 java Salutation 20 // ici, args[0] = "20"
Salut le jeune!
 java Salutation 70
28
Salut le vieux!
 Pour traiter beaucoup de données en série Schéma d’exécution
 Schémas
somme=0;
 Boucle for
int somme = 0;
i=0;
for (int i = 0; i<10; i++) somme = somme + i;
 Boucle while
i<10?
int somme = 0;
oui
int i = 0;
somme=somme+i;
while (i<10) { somme = somme + i; non
i++;
i++;
}
 Que font ces deux boucles?
i: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
29
somme: 0 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, sortie
Schéma d’exécution
somme=0;

i=15;

i<10?
oui

 do A while (condition) non somme=somme+i;


i++;
 Faire A au moins une fois

 Tester la condition pour savoir s’il faut refaire A


int somme = 0; Schéma d’exécution
int i = 15; somme=0;
while (i<10) { somme = 0
somme = somme + i;
i++;} i=15;

int somme = 0;
int i = 15; somme=somme+i;
do { i++;
somme = somme + i; somme = 15
i++; oui
} while (i<10); i<10?
non 30
Calcul des intérêts
 Étant donné le solde initial, le solde souhaité
et le taux d'intérêt, combien d'années seront
nécessaires pour atteindre le solde souhaité
 au lieu d'utiliser une formule, on simule le calcul
 Algorithme (pseudocode):
1. ans = 0;
2. Tant que le solde n'atteint pas le solde souhaité
3. Incrémenter ans
4. Ajouter l'intérêt au solde

31
public class NombreAnnees{
public static void main(String[] arg){
double solde=Double.parseDouble(arg[0]);
double solde_final=Double.parseDouble(arg[1]);
double taux=Double.parseDouble(arg[2]);
int ans= 0;
double interet=0;
while (solde < solde_final) {
ans++; ans = ans + 1;
interet= solde * taux;
solde += interet; solde = solde + interet;
}
System.out.println(ans + " ans sont nécessaire pour atteindre le solde
"+ solde_final);
}
}
Éxecution de la classe : java NombreAnnees 2000 20000 0.07
Résultat: 35 ans sont nécessaire pour atteindre le solde 20000.0 32
Calcul de la factorielle
 Ecrivez une fonction (une méthode) qui calcul
la factoriel d’un entier donné.
 Appelez cette fonction dans la fonction
principale « main ».
 Algorithme (pseudocode):
1. fact= 1;
2. Tant que le nombre > 1
3. Fact=fact*nombre;
4. Décrémenter le nombre
5. Fin tant que

33
public class Factorielle {
public static double factorielle(int x) { Si une méthode (ou un
if (x < 0) return 0.0; attribut, une variable) de la
double fact = 1.0; classe est utilisée par la
while (x > 1) { méthode main (static), il
fact = fact * x; faut qu’il soit aussi
x = x - 1; « static ».
}
return fact;
}
public static void main(String[] args) {
int entree = Integer.parseInt(args[0]);
double resultat = factorielle(entree);
System.out.println(Integer.parseInt(resultat));
}
}
34
Attention:
Array a.length
String a.length()

 Pour stocker une série de données de même nature


 Déclaration
int [] nombre; // une série de valeurs int dans le tableau nommé nombre
String [][] etiquette; // un tableau à deux dimensions de valeurs String
 Création
nombre = new int[10]; // crée les cases nombre[0] à nombre[9]
etiquette = new String[3][5]; // crée etiquette[0][0] à etiquette[2][4]
int[] primes = {1, 2, 3, 5, 7, 7+4}; // déclare, crée de la bonne taille et
initialise
 Utilisation
nombre[0] = 4;
for (int i=1; i<nombre.length; i++) nombre[i]=nombre[i-1]+1;
etiquette[2][3] = "un texte";
String texte = etiquette[2][3];

35
Nombre de voyelles
 Ecrivez un programme JAVA permettant de
calculer le nombre de voyelles dans un texte.

 Étapes à suivre:
 Initialiser un tableau de voyelles
 Réaliser une fonction « test » qui vérifier si un caractère est
un voyelle ou non. La fonction retourne un booléen.
 Calculer dans la fonction « main », le nombre de voyelle
existant dans un texte passé en argument

36
public class Chaine{
private static char[] voyelle={'a','e','i','o','u'};
public static boolean test(char c){
for(int i=0;i<voyelle.length;i++){
if (voyelle[i]==c) return true;}
return false;
}
public static void main(String[] args){
String texte=args[0]; int cpt=0;
for(int i=0;i<texte.length();i++){
char c=(char)texte.charAt(i);
if (test(c)==true) cpt++;
}
System.out.println("le nombre de voyelle dans la phrase "+texte+" est: "+
cpt); 37
}}

Vous aimerez peut-être aussi