1
1
Une introduction à Java
IFT 287
(Semaine 1)
UNIVERSITÉ DE
SHERBROOKE
2
Java - Historique
Développé par Sun Microsystems en
1994
Inventeur James Gosling (canadien!)
•Objectif
langage sûr (fortement typé)
gestion automatique de la mémoire
usage sur le web
3
Aperçu de Java
Comparable au C++
Syntaxe très proche
du C++
Prog. Orienté-objet
… et prog. structurée
Fortement typé
–Types de bases
Gestion des tableaux
–Exceptions
… mais différent
– Interprété
Gestion implicite de la
mémoire
Existence d’une classe
Objet
–Bibliothèque de base
très développée
Pas de gestion explicite
des pointeurs
–Pas de surcharge
d’opérateurs 4
Code java
Code java
import java.lang.*
class PremierProg {
public static void main (String[] args){
System.out.println(“Bonjour!”);
}
}
Code C++
Code C++
#include <iostream.h>
int main (int argc, char *argv[]) {
cout << “Bonjour!” << endl;
}
Premier exemple
5
Compilation/interprétation
Pour obtenir un programme :
à partir du code C++, on compile
directement le source :
gcc programme.cc
à partir du java, on transforme le
source dans un langage qui sera
interprété dans la machine virtuel :
javac PremierProg.java
java PremierProg
6
Processus d’obtention
d’un exécutable
Fichier .java
(source)
Fichier .class
(bytecode) libjava.so
Interprétation:
Java
Compilation :
javac
import java.lang.*
class PremierProg {
public static void main (String[] args){
System.out.println(“Bonjour!”);
}
}
class PremierProg {
method public static void main (java.lang.String[])
max_stack 2{
getstatic java.io .PrintStream java.lang.System.out ldc "Bonjour!"
invokevirtual void java.io.PrintStream.println(java.lang.String) return
}
}
2
7
Conventions
•Fichier: porte le nom de la classe qu’il
décrit (PremierProg.java)
•Package: commencent par une minuscule
(java.lang.*)
Classe : commencent par une majuscule
(String)
•Variable: commence par une minuscule
(maVariable)
•Constante: en majuscule
(UNE_CONSTANTE)
8
Catégories de types
Types primitifs
entier, caractère, point flottant, booléen
Types références
classes et vecteurs
ce sont des pointeurs vers des objets
allocation avec new
pas de destructeur (garbage collection
par la machine virtuelle).
9
Types primitifs
boolean : true ou false
byte : -128 à 127
short : -32768 à 32767
int : -2147483648 à 2147483647
long : -9223372036854775808 à
9223372036854775807
char : \u0000 à\uffff
float : 1e-45 à 1e+38
double : 1e-324 à 1e+308
10
Les tableaux
Semblable au C++
Par exemple
int numero[] = new int[3];
L'indexation commence à 0
Création implicite d'une classe
Accès à la longueur par le champ
length
noms.length ;
Tableaux multidimensionnels
int[][][] a = new int[l][m][n];
11
Les structures de contrôle
Les mêmes qu’en C++ :
if
while / for / do…until
case
goto
•On retrouve :
break
continue
12
Le paradigme
« orienté-objet »
Caractéristique : encapsulation,
héritage et polymorphisme
Les entités sont des objets dont le
modèle est une classe
On fait agir les objets en activant des
méthodes
3
13
Les classes
On crée une nouvelle instance (un objet)
d’une classe avec le mot-clé new
Par exemple pour créer une nouvelle
chaîne de caractères dont la valeur est
“Bonjour” :
String maChaine = new String (“Bonjour”);
Raccourci
String maChaine = “Bonjour”;
14
Contenu d'une classe
•Champs
•Méthodes
• Constructeurs
Destructeurs (
Finalizer
)
• Visibilité
–public
–protected
–private
–package
Caract.
Capacités
Naissance
Mort
15
Privilèges d’accès
Soit un membre m déclaré dans une class A
classe A
visibilité B sous-
classe de A
B n'est pas
sous-classe
de A B sous-
classe de A
B n'est pas
sous-classe
de A
private ONNNN
protected O O O O N
public OOOOO
package O O O N N
B et A package différentB et A même package
accès au membre m à partir de
classe B
16
Les méthodes
On appelle la méthode meth d’un
objet obj avec les paramètres
params comme suit :
obj.meth(params)
Comme pour une procédure C on
transmet des paramètres et on reçoit
une valeur de retour :
char prem = maChaine.charAt(0)
17
Exemple
public class Test2 {
public static void main(String[] args) {
Personne p1 = new Personne("Denys Arcand");
Personne p2 = new Personne("Denise Robert");
Personne[] personnes = new Personne[3];
personnes[0] = p1;
personnes[1] = p2;
p1.setConjoint(p2);
p2.setConjoint(p1);
}
}
18
Égalité entre objets
•==
égalité sur les références
v1 == v2 ssi v1 et v2 réfère au même objet
• equals
pour vérifier si deux objets distincts sont égaux en
contenu
v1.equals(v2) ssi v1 est égal en contenu à v2
À redéfinir dans chaque classe, car l’implémentation de
equals dans la classe Object est faite avec ==
4
19
Passage d’argument
Le passage en java est toujours par valeur
Comme les variables de type référence
contiennent un pointeur vers un objet, seul
le pointeur est copié lors d’un appel; l’objet
référencé n’est pas copié, donc la méthode
appelée peut modifier l’objet référencé.
Attention aux effets de bord
Nécessité de dupliquer un objet valeur si
on ne veut pas qu’il soit modifié par la
méthode appelée
–o.clone() 20
La classe String
•Du package java.lang
Représente une chaîne de caractères
immutable
•Exemple
String prenom = new String ("Benoit");
Pour les accents, il est conseillé d'utiliser
l'unicode : \uxxxx xxxx est le code du
caractère
Création dynamique de String avec ""et +
x = "Je me nomme " + prenom + " !" ;
21
Méthodes de la classe String
boolean equals(Object o)
int compareTo(Object o)
String concat(String str)
boolean endsWith(String suffix)
boolean startsWith(String prefix)
char[] toCharArray()
String substring(int beginIndex)
•…
22
La classe StringBuffer
•Du package java.lang
•Contrairement àString est mutable
Permet de créer une créer une chaîne de
caractères par morceaux
•Création :
StringBuffer = new StringBuffer (32) ;
StringBuffer = new StringBuffer ("Allo") ;
23
Méthodes de StringBuffer
StringBuffer append(String s)
int capacity()
StringBuffer delete (int start, int end)
StringBuffer insert (int offset, String s)
StringBuffer reverse ()
String subString (int start, int end)
String toString ()
24
La classe Vector
Du package java.util
Représente un tableau qui peut grossir
dynamiquement
•Exemple
Vector<String> noms = new
Vectors<String>(2);
noms.add("Benoit");
noms.add("Marc");
noms.add("Bob");
noms.capacity();
noms.lastElement();
La capacité de noms
est augmenté de 1
5
25
Méthodes de la classe Vector
boolean add (Eo)
int capacity ()
boolean contains (Object o)
Eget (int index)
Eset(int index, Eo)
boolean isEmpty()
boolean remove(Object o)
ElastElement()
26
/** Permet de créer une personne et de l'associer à une autre
personne qui est son conjoint. Chaque personne a un numéro
unique, attribuée a sa création. */
public class Personne { // variable de classe
// no à allouer à la prochaine personne créée
private static int noPersonneCourant = 0;
// variables d'instances
private String nom;
private Personne conjoint;
private final int noPersonne;
/** Construit une personne et lui assigne un numéro unique. */
public Personne(String nom) {
this.nom = nom;
noPersonne = noPersonneCourant;
noPersonneCourant = noPersonneCourant + 1;
}
/** Retourne une chaîne de caractères représentant la personne. */
public String toString() { return nom + " " + noPersonne; }
/** Associe un conjoint à la personne. */
public void setConjoint(Personne p) { conjoint = p; }
}// fin classe
Champs
méthode
Exemple d'une classe
27
Mot-clé
final
Comment empêcher qu’une variable soit
modifiée par la suite ?
Comment créer une constante ?
final est l'équivalent de const en C: il
empêche la modification de la variable
28
Variable de classe : mot-clé
static
Est-on obligé de toujours instancier un objet pour
utiliser une méthode ?
Comment faire pour utiliser une variable partagée
par tous les objets d’une même classe ?
Utilisation du mot-clé static
Celui ci rend le champs ou la méthode commune à
tout objet de la classe; on dit qu’il définit une
“variable de classe”
A.v1 : accède à la variable v1 de la classe A
a.v2 : accède à la variable v2 de l’objet référencé par a
29
Exemple la classe
java.lang.Math
La classe Math contient des
méthodes pour effectuer des
calculs mathématiques
On appelle les méthodes en
indiquant la classe et non l'objet :
double x = Math.acos (10);
double y = Math.sqrt(50);
30
Les exceptions
Mécanisme pour gérer
facilement
les cas
limites
Capture la continuation du programme (pile
des exécutions) pour pouvoir y revenir le cas
échéant
Même système qu'en C++
Les exceptions sont des objets hérités de la
classe java.lang.Exception
Attention aux baisses de performances
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !