0% ont trouvé ce document utile (0 vote)
36 vues76 pages

COURS Programmation O. Objets JAVA

cours java poo

Transféré par

benachir.xl
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
36 vues76 pages

COURS Programmation O. Objets JAVA

cours java poo

Transféré par

benachir.xl
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours Java

LP BD

Hassan Silkan

Université Chouaib Doukkali, Faculté des Sciences, Laboratoire LIMA, El


Jadida. [email protected]

Cours 2017-2018
I-Introduction
Généralités
Java est un langage de programmation orienté objet développé par Sun
Microsystems (aujourd'hui racheté par Oracle).
On peut faire de nombreuses sortes de programmes avec Java
: ▪ des applications, sous forme de fenêtre ou de console ;
▪ des applets, qui sont des programmes Java incorporés à des pages web ; ▪
des applications pour appareils mobiles, avec JME ;
▪ et bien d'autres ! JEE, JME, J3D pour la 3D...
il y a des environnements permettant de créer des programmes pour
différentes plates-formes :
▪ Java SE (Java Standard Edition) : permet de développer des applications
dites «client lourd», par exemple Word, Excel, la suite OpenOffice.org…
Toutes ces applications sont des «clients lourds».
▪ Java EE (Java Enterprise Edition) : permet de développer des applications
web en Java. On parle aussi de clients légers.
▪ Java ME (Java Micro Edition) : permet de développer des applications pour
appareils portables, comme des téléphones portables, des PDA…

Installer les outils de développement


Installer les outils nécessaires : JRE ou JDK (Java Development Kit)
Télécharger l'environnement Java sur le site d'Oracle, choisissez la dernière
version stable.
L’Environnement de développement (Integrated Development
Environment) IDE contenant déjà tout le nécessaire pour le développement
et la compilation, nous n'avons besoin que du JRE(Java Runtime
Environment). Une fois que vous avez cliqué sur Download JRE, vous
arrivez sur la page représentée à la figure suivante.

Installer les outils de développement


Installer l’outil Eclipse IDE (Integrated Development Environment)
«Eclipse IDE» est un environnement de développement libre permettant de
créer des programmes dans de nombreux langages de programmation (Java,
C++, PHP…).
Eclipse IDE est lui-même principalement écrit en Java.
Télécharger Eclipse IDE for Java Developers, en choisissant la version
d'Eclipse correspondant à votre OS (Operating System),
Eclipse est le logiciel qui va permettre de traduire nos programmes Java en
langage byte code, compréhensible uniquement par votre JRE.
Un plugin pour Eclipse se présente souvent comme un dossier contenant
généralement deux sous-dossiers : un dossier « plugins » et un dossier «
features ». Ces dossiers existent aussi dans le répertoire d'Eclipse. Il vous
faut donc copier le contenu des dossiers de votre plugin vers le dossier
correspondant dans Eclipse (plugins dans plugins et features dans features).
5

Installer les outils de développement


Installer l’outil Eclipse IDE
Au démarrage, Eclipse vous demande dans quel dossier vous souhaitez
enregistrer vos projets. Une fois cette étape effectuée, vous arrivez sur la
page d'accueil d'Eclipse.
Barre d'outils d’Eclipse
Nous avons dans l'ordre :
1. nouveau général : cliquer sur ce bouton revient à faire Fichier > Nouveau ;
2. enregistrer : revient à faire CTRL + S ;
3. imprimer : ai-je besoin de préciser ?
4. exécuter la classe ou le projet spécifié : nous verrons ceci plus en détail ; 5.
créer un nouveau projet : revient à faire Fichier > Nouveau > Java Project ; 6.
créer une nouvelle classe : créer un nouveau fichier. Cela revient à faire
Fichier > Nouveau > Classe.

Installer les outils de développement


Création de projet Java sous Eclipse (étape 1)
Pour créer un nouveau projet Java, sélectionner Java Project comme indiqué aux
figures suivantes :

Installer les outils de développement


Création de projet Java sous Eclipse (étape 2)
8

Installer les outils de

développementCréation d’une classe


Dans l'encadré
1, nous
pouvons voir
où seront
enregistrés nos
fichiers
Java. Dans
l'encadré 2,
nommez votre
classe Java
«Test». Dans
l'encadré 3,
Eclipse vous demande si
cette classe a quelque
chose de particulier. Eh
bien oui ! Cochez public
static void main(String[]
args), puis cliquez sur
Finish.
9

Installer les outils de

développementInterface

Fenêtre principale

d'EclipseVous trouverez
le dossier de
votre projet ainsi
que son contenu

C'est ici que nous allons La liste des méthodes et


écrire nos codes source des variables
C'est là que vous verrez apparaître le contenu de
vos programmes… ainsi que les erreurs
éventuelles

10

Compilation et Interprétation
Langage compilé
Etapes qui ont lieu avant l'exécution pour un langage compilé comme C++
d'entête code objet
Librairies

Fichier
de code

Code objet Edition de liens Autres

Compilation Programme exécutable

Fichier
Compilation et Interprétation
Langage interprété
Cas de Java
Avant exécution Exécution

Autres byte code


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

Compilation et Interprétation
Byte code
Un byte code est un code intermédiaire entre le code Java et le code
machine. Il se trouve dans les fichiers précompilés de vos programmes en
Java, un fichier source a pour extension .java et un fichier précompilé a
l'extension .class : c'est dans ce dernier que vous trouverez du byte code.
le byte code reste le même quel que soit l'environnement avec lequel a été
développé et précompilé votre programme Java. Donc, quel que soit le
Système d’exploitation sous lequel a été codé un programme Java, n'importe
quelle machine pourra l'exécuter si elle dispose d'une machine virtuelle Java

13

Compilation et Interprétation
Machine virtuelle
La machine virtuelle assure à tous les développeurs Java qu'un programme
sera utilisable avec tous les systèmes d'exploitation sur lesquels est installée
une machine virtuelle Java (JVM).
Les composants de la machine virtuelle sont:
Le Chargeur de classe
Le chargeur de classe charge les classes nécessaires à l'exécution, alloue
l'espace mémoire nécessaire et établit les liens entre elles (linkage). Le chargeur
de classe connait la structure d'un fichier .class.
Le Gestionnaire de mémoire
Le gestionnaire mémoire assure les services liés à la mémoire, en particulier :
▪ un ramasse-miette (garbage collector) ;
Compilation et Interprétation
Machine virtuelle
Les Avantages de l'utilisation de la machine virtuelle
▪ La portabilité. les machines virtuelles sont capables d'exécuter exactement le
même code intermédiaire (les mêmes fichiers Java en bytecode) sur de
très nombreux environnements : Windows, MacOS, Linux, android et
autres, avec une totale compatibilité.
▪ La machine virtuelle Java n'est pas uniquement développée sur des
ordinateurs classiques, une multitude d'appareils disposent d'une machine
virtuelle Java : téléphones portables, agenda électronique PDA « Personal
Digital Assistant » …
▪ La machine virtuelle Java possède un ensemble de bibliothèques
extrêmement complètes : des bibliothèques graphiques, des bibliothèques
systèmes, etc...

15

Compilation et Interprétation
Machine virtuelle
Le point faible du concept de machine virtuelle est que le code intermédiaire
(bytecode) est interprété par la machine virtuelle. Ceci entraîne une baisse
importante des performances des programmes.
Toutefois avec les machines virtuelles actuelles, cet argument n'a plus autant
de poids. La technique appelée « compilation juste à temps » (JIT : Just-In
Time) est employée par la machine virtuelle quand une méthode est appelée.
Cette technique consiste à compiler à la volée la méthode appelée (la première
fois) en code natif directement exécutable par le processeur.
16

Caractéristiques du langage

JavaOrienté objet
▪ Java ne permet d'utiliser que des objets (hors les types de base) ▪ Java est un
langage objet, les grandes idées reprises sont : encapsulation, classe/instance,
attribut, méthode, visibilité, interface/implémentation, héritage, redéfinition de
méthodes, polymorphisme
Portabilité
▪ Des machines virtuelles Java existent pour de nombreuses plates-formes.
Développement plus rapide
▪ courte étape de compilation pour obtenir le byte-code,
▪ pas d'édition de liens,
▪ déboguage plus facile
Multi-tâches
▪ Exécution de plusieurs processus effectuant chacun une tâche différente

17

Caractéristiques du langage

JavaFiable

▪ Gestion automatique de la mémoire (ramasse-miette)


▪ Gestion des exceptions
▪ Sources d'erreurs limitées
▪ typage fort,
▪ pas d'héritage multiple,
Simple
▪ faible nombre de mots-clés
▪ simplifications des fonctionnalités essentielles
▪ Familier Syntaxe proche de celle de C/C++
Java est indépendant de l'architecture
▪ Le bytecode généré par le compilateur est indépendant de toute
architecture. Toute application peut donc tourner sur une plate-forme
implémentant une machine virtuelle Java. « Ecrire une fois, exécuter
partout »

18

Caractéristiques du langage Java


API (Application and Programming Interface /Interface pour la
programmation d'applications) est un ensemble de bibliothèques permettant
une programmation plus aisée car les fonctions deviennent indépendantes du
matériel.
Ces classes sont regroupées, par catégories, en paquetages (ou
"packages"). Les principaux paquetages
▪ java.util : structures de données classiques
▪ java.io : entrées / sorties
▪ java.lang : chaînes de caractères, interaction avec l'OS, threads ▪
java.applet : les applets sur le web
▪ java.awt : interfaces graphiques, images et dessins
▪ javax.swing : package récent proposant des composants « légers » pour la
création d’interfaces graphiques
▪ java.net : sockets, URL
▪ java.sql : fournit le package JDBC

19

Caractéristiques du langage Java


Processeur Java
Un processeur Java est l'implémentation matérielle d'une machine virtuelle
Java. C'est à dire que les bytecodes constituent son jeu d'instruction.
Actuellement, il y a quelques processeurs Java disponibles : en:picoJava,
première tentative de construction d'un processeur par Sun Microsystems,
aJ100 [archive] de aJile. Disponibles sur cartes Systronix [archive],
Cjip [archive] (Imsys Technologies),
Komodo [archive] : micro-controlleur Java multi-thread pour la recherche sur
la planification temps-réel,
FemtoJava [archive] : projet de recherche,
ARM926EJ-S : processeur ARM pouvant exécuter du bytecode java,

20

II-Syntaxe du langage Java


Introduction
▪ Les instructions Java se terminent par un ;
▪ Un bloc permet de définir un regroupement d’instructions.
Les blocs sont délimités par { } :
{ pour le début de bloc
} pour la fin du bloc
▪ La définition d’une classe ou d’une méthode se fait dans un bloc. ▪ Les
espaces, tabulations, sauts de ligne sont autorisés. Cela permet de
présenter un code plus lisible.

22

La méthode principale

Pour pouvoir faire un programme exécutable il faut toujours une classe qui
contienne une méthode particulière, la méthode « main » .
c’est le point d’entrée dans le programme : le microprocesseur sait qu’il va
commencer à exécuter les instructions à partir de cet endroit public static
void main(String arg[ ])
{
…/…
}
Le mot-clé static précise que la méthode main n’est pas liée à une instance
(objet) particulière de la classe. C’est ce qui fait de cette méthode l’équivalent
d’une procédure ou d’une fonction usuelle des autres langages.

23

Mon premier programme Java


Exemple
Fichier HelloWorld.java
La classe est l’unité de base de nos programmes. Le mot clé en Java pour
définir une classe est class
public class HelloWorld
{ //Accolade débutant la classe Bonjour
public static void main(String args[])
{ //Accolade débutant la méthode main
System.out.println(“Hello World !”);
} //Accolade fermant la méthode main
} //Accolade fermant la classe HelloWorld
Une méthode peut recevoir des paramètres. Ici la méthode main reçoit le
paramètre args qui est un tableau de chaîne de caractères.
Le nom du fichier est nécessairement celui de la classe avec l’extension .java
en plus. Java est sensible à la casse des lettres.
24

Mon premier programme Java


Une fois que vous avez saisi le code de votre méthode main, il vous faut lancer le
programme par un simple clique sur la flèche blanche dans un rond vert, comme à
la figure suivante.

Si vous regardez dans votre console, dans la fenêtre du bas sous Eclipse, vous
devriez voir quelque chose ressemblant à la figure suivante.

25

Les caractères d'échappement


Vous pouvez voir que :
▪ lorsque vous utilisez le caractère d'échappement \n, quelle que soit la
méthode appelée, celle-ci ajoute immédiatement un retour à la ligne à
son emplacement ;
▪ lorsque vous utilisez la méthode println(), celle-ci ajoute
automatiquement un retour à la ligne à la fin de la chaîne passée en
paramètre ;
Il existe deux autres caractères d'échappement :
▪ \r va insérer un retour chariot, parfois utilisé aussi pour les retours à la
ligne ;
▪ \t va faire une tabulation.
26

Les commentaires

les commentaires ne sont pas pris en compte par le compilateur. deux


syntaxes sont disponibles pour commenter son texte :
▪ Les commentaires unilignes : introduits par les symboles « // », ils mettent
tout ce qui les suit en commentaire, du moment que le texte se trouve sur
la même ligne ;
▪ Les commentaires multilignes : ils sont introduits par les symboles « /* » et
se terminent par les symboles « */ ».
27

Les identificateurs

On a besoin de nommer les classes, les variables, les constantes, etc…; on


parle d’identificateur.
Les identificateurs commencent par une lettre, _ ou $
Conventions sur les identificateurs
▪ Tous les noms de classes et les interfaces doivent commencer par une
majuscule
▪ Tous les noms de variables doivent commencer par une minuscule ▪ Si le
nom d'une variable est composé de plusieurs mots, le premier commence
par une minuscule, le ou les autres par une majuscule, et ce, sans séparation
▪ Tout ceci sans accentuation !
▪ Java distingue les majuscules des minuscules
Les identificateurs

Une variable est un élément qui stocke des informations de toute sorte en
mémoire : des chiffres, des résultats de calcul, des tableaux, des
renseignements fournis par l'utilisateur…
▪ Une variable possède un nom, un type et une valeur.
▪ La déclaration d'une variable permet de réserver la mémoire pour en
stocker la valeur.
Exemple
int nombre; // déclaration
nombre = 100; //initialisation
Les différents types de variables
En Java, nous avons deux types de variables :
▪ des variables de type simple ou « primitif » ;
▪ des variables de type complexe ou des « objets ».

29

Les identificateurs
La liste des mots réservé JAVA
Un identificateur ne doit pas appartenir à la liste des mots réservé JAVA

30

Les identificateurs
Les variables de type primitive
En Java, tout est objet sauf les types de base.
Il y a huit types de base :
▪ un type booléen pour représenter les variables logiques avec les valeurs
associées true et false
▪ un type pour représenter les caractères : char
▪ quatre types pour représenter les entiers de divers taille : byte, short, int et
long
▪ deux types pour représenter les réelles : float et double
La taille nécessaire au stockage de ces types est indépendante de la
machine. ▪ Avantage : portabilité
▪ Inconvénient : "conversions" coûteuses

31

Les identificateurs

Les entiers (avec signe)


▪ byte : codé sur 8 bits, peuvent représenter des entiers allant de -27 à 27 –1
(-128 à +127)
▪ short (2 octets) codé sur 16 bits, peuvent représenter des entiers allant de
-32768 à +32767.
▪ int ( 4 octets) peuvent représenter des entiers allant de -231 à 231 –1 ▪ long :
codé sur 64 bits, peuvent représenter des entiers allant de -263 à 263 –1 . Afin
d'informer la JVM que le type utilisé est long, vous devez ajouter un "L" à la
fin de votre nombre, sinon le compilateur essaiera d'allouer ce dernier dans
une taille d'espace mémoire de type entier et votre code ne compilera pas si
votre nombre est trop grand...
Exemple: long x=94607000L
32

Les identificateurs
Les réels
▪ Le type float (4 octets) est utilisé pour les nombres avec une virgule
flottante.
Exemple : float nombre=5.0f
nous ne mettons pas une virgule, mais un point, et si le nombre en question
est rond, on écrit « .0 » derrière celui-ci, le tout suivi de « f ».
▪ Le type double (8 octets) est identique à float, si ce n'est qu'il contient plus
de chiffres derrière la virgule et qu'il n'a pas de suffixe.
Exemple: double x=9,999999999999999999998d
Booléens
Le type boolean, ne peut contenir que deux valeurs : true (vrai) ou false
(faux), sans guillemets (ces valeurs sont natives dans le langage, il les
comprend directement et sait les interpréter).
Exemple: boolean test= true ;

33

Les
identificateurs
Les caractères

▪ Le type char contient un caractère stocké entre apostrophes (« ' ' ») Exemple :
char c=‘A’
▪ Le type String permet de gérer les chaînes de caractères, c'est-à-dire le stockage
de texte. Il s'agit d'une variable de type plus complexe que l'on appelle objet. Elle a
plusieurs méthode de délation :
Exemple:
Première methode de declation
String phrase =“Langage Java”
Deuxieme methode de declation
String phrase =new String();
phrase=“Langage Java”
Troisieme methode de declation
String phrase =new String(“Langage Java”); 34

Initialisation

Cas des variables non initialisées


Java exige que toutes les variables soient définies et initialisées.
Voici un exemple:
int n ;
System.out.println ("n = " + n ) ;
//erreur de compilation : la valeur de n n’est pas définie ici
int n ;
int p = n+3 ;
// erreur de compilation : la valeur de n n’est pas encore
définie Informations complémentaires

les champs des objets, contrairement aux variables locales, seront soumis à
une initialisation implicite par défaut; le risque de champ non défini n’existera
pas. D’autre part, nous verrons qu’il existe des variables ou des champs d’un
type autre que primitif, à savoir objet ou tableau.
Initialisation
Constantes et expressions constantes
Le mot-clé final
Java permet de déclarer une variable constante comme une valeur d’une
variable qui ne doit pas être modifiée pendant l’exécution du programme.
Par exemple, avec final int n = 20 ; toute tentative ultérieure de modification
de la valeur de n sera rejetée par le compilateur :
n = n + 5 ; // erreur : n a été déclarée final
D’une manière générale, le mot-clé final peut être utilisé quelle que soit
l’expression d’initialisation de la variable :
int p ;
p = Clavier.lireInt() ;
final int n = 2 * p ;// OK, bien que la valeur de n ne soit connue // qu’à
l’exécution
n++ ; // erreur de oompilation : n est déclarée final
Initialisation

L’initialisation d’une variable final peut être différée


vous n’êtes pas obligé d’initialiser une variable déclarée final lors de sa
déclaration.
Java demande simplement qu’une variable déclarée final ne reçoive qu’une
seule fois une valeur. Voyez ces exemples :
final int n ; // OK, même si n n’a pas (encore) reçu de valeur n =
Clavier.lireInt() ; // première affectation de n : OK
n++ ; // nouvelle affectation de n : erreur de compilation

final int n ;
if (...) n = 10 ; // OK
else n = 20
Les opérateurs
Les opérateurs arithmétiques
▪ + est l’addition de deux variables numériques (mais aussi de concaténer
des chaînes de caractères ;
▪ - est la soustraction deux variables numériques.
▪ * est la multiplication de deux variables numériques.
▪ / est la division de deux variables numériques.
▪ % sert a renvoyer le reste de la division entière de deux variables de type
numérique ; cet opérateur s'appelle le modulo.
il existe une syntaxe qui raccourcit l'écriture de ces opérations. Par exemple
pour l’operation +, on peut écrire:
nbr=nbr+1;
nbr+=1;
nbr++
++nbr
Pour la soustraction, la syntaxe est identique,

38

Les opérateurs
Les opérateurs arithmétiques
Les raccourcis pour la multiplication fonctionnent de la même
manière. nbr=nbr*2;
Nbr*=2;
On ne peut faire du traitement arithmétique que sur des variables de même
type sous peine de perdre de la précision lors du calcul. On ne s'amuse pas à
diviser un int par un float, ou pire, par un char.
Ceci est valable pour tous les opérateurs arithmétiques et pour tous les types
de variables numériques.

39

Les opérateurs
Les Conversions ou « Cast »
Si nous affectons le résultat d'une opération sur deux variables de type double
dans une variable de type int, le résultat sera de type int.
Convertir des variables d'un type int en type float :
Int i=123;
float j=(float)i
D'un type int en type double :
int i=123
double j=(double)i
Convertir des variables d'un type double en type int :
double i=1.23
double j=2.999;
int k=(int)i;
k=(int)j;
il est aussi possible de caster le résultat d'une opération mathématique en la
mettant entre « ( ) » et en la précédant du type de cast souhaité. Donc : double
nbr1=10, nbr2=3;
int resultat=(int)(nbr1/nbr2)40
Les opérateurs
Les Conversions ou « Cast »
Transformer l'argument d'un type donné, int par exemple, en
String. int i=12;
String j =new String();
j=j.valueOf(i);
j est donc une variable de type String contenant la chaîne de caractères
12. Maintenant, la variable k de type int contient le nombre 12.
int i=12;
String j=new String();
j=j.valueOf(i)
int k=Integer.ValueOf(j).intValue();

41

E/S Java
Lire les entrées clavier
Les variables de type String sont des objets de type String. Pour que Java
puisse lire ce que vous tapez au clavier, vous allez devoir utiliser un objet de
type Scanner. Cet objet peut prendre différents paramètres, mais ici nous
n'en utiliserons qu'un : celui qui correspond à l'entrée standard en Java.
nous devrons instancier un objet sc de la classe Scanner.
Scanner sc=new Scanner(System.in);
nous devons importer la classe Scanner grâce à l'instruction import. La classe
que nous voulons se trouve dans le package java.util.
La façon dont nous avons importé la classe java.util.Scanner dans Eclipse est
très commode. Vous pouvez aussi le faire manuellement :
import java.util.Scanner
import.java.util.*
42

E/S Java
Lire les entrées clavier
Exemple
Scanner sc=new Scanner(System.in)
System.out.println(« Veillez saisir un mot :»);
String str= sc.nextLine();
System.out.println(«vous avez saisi: »+str)

pour récupérer un type de variable, il suffit d'appeler next<Type de variable


commençant par une majuscule> (convention de nommage Java). Voici
comment on pourrait récupérer un entier :
Scanner sc=new Scanner(System.in)
System.out.println(« Veillez saisir un mot :»); Rq
String str= sc.nextInt();
System.out.println(«vous avez saisi: »+str)

43

E/S Java
Lire les entrées clavier
Il y a un type de variables primitives qui n'est pas pris en compte par la classe
Scanner : il s'agit du type char. Voici comment on pourrait récupérer un
caractère :
System.out.println(« Saisissez une letttre: »)
Scanner sc= new Scanner(System.in);
String str =sc.nextLine();
Char carac = str.charAt(0);
System.out.println(« Vous avez saisi le caractere :»+carac)

charAt(0) est utilisé afin de récupérer le premier caractère saisi. Même si vous
tapez une longue chaîne de caractères, l'instruction charAt(0) ne renverra que
le premier caractère.

44

Les structures de contrôles


if / else
Effectuer une ou plusieurs instructions seulement si une certaine condition est
vraie. if (condition) instruction;
et plus généralement :
if (condition)
{ bloc d’instructions
}
La condition doit être un booléen ou renvoyer une valeur booléenne. Effectuer
une ou plusieurs instructions si une certaine condition est vérifiée sinon
effectuer d’autres instructions
if (condition)
instruction1;
else
instruction2;
et plus généralement if (condition) { 1er bloc d’instructions} else {2ème bloc
d’instruction}
45

Les structures de contrôles


switch
▪ l’utilisation de if /else peut s’avérer lourde quand on doit traiter plusieurs
sélections et de multiples alternatives
▪ pour cela existe en Java le switch / case assez identique à celui de C/C++ ▪
La valeur sur laquelle on teste doit être un char ou un entier (à l’exclusion
d’un long).
▪ L’exécution des instructions correspondant à une alternative commence au
niveau du case correspondant et se termine à la rencontre d’une
instruction break ou arrivée à la fin du switch
Exemple
Scanner sc=new Scanner(System.in)
System.out.println(« Veillez saisir un mot :»);
int nb = sc.nextInt();
switch(nb)
{
case 1: System.out.println("Un"); break;
case 2: System.out.println("Deux"); break;
default: System.out.println("Autre nombre"); break;
}
46

Les structures de contrôles


La condition ternaire
Les conditions ternaires sont employées pour affecter des données à une
variable. Voici à quoi ressemble la structure de ce type de condition :
int x=10,y=20;
int max=(x<y)?y:x;
la valeur que vous allez affecter à votre variable doit être du même type que
votre variable.
Vous pouvez également faire des calculs avant d'affecter les valeurs :
int x=10,y=20;
int max=(x<y)?y*2:x*4;
Sachez aussi que rien ne vous empêche d'insérer une condition ternaire dans
une autre condition ternaire :
int x=10, y=20;
int max =(x<y)?(y<10)?y%10:y*2:x ; //max vaut 40
47
Les structures de contrôles
while
On veut répéter une ou plusieurs instructions un nombre indéterminés de
fois : on répète le bloc d’instruction tant que une certaine condition reste
vraie. nous avons en Java une première boucle while (tant que)
while (condition) {bloc d’instructions}
les instructions dans le bloc sont répétées tant que la condition reste vraie.
On ne rentre jamais dans la boucle si la condition est fausse dès le départ
Do while
un autre type de boucle avec le while:
do {bloc d’instructions} while (condition)
Les instructions dans le bloc sont répétées tant que la condition reste vraie.
On rentre toujours au moins une fois dans la boucle : la condition est testée
en fin de boucle.
48

Les structures de contrôles


while

On veut répéter une ou plusieurs instructions un nombre déterminés de fois:


on répète le bloc d’instructions pour un certain nombre de pas.
La boucle for
for (int i = 1; i <= 10; i++) System.out.println(i);
une boucle for est en fait équivalente à une boucle while
for (instruction1; expression1; expression2) {bloc}
… est équivalent à …
instruction 1; while (expression1) {bloc; expression2}
49

Tableaux
Les tableaux permettent de stocker plusieurs valeurs de même type. ▪
Les valeurs contenues dans le tableau sont repérées par un indice ▪
En langage java, les tableaux sont des objets
Déclaration
▪ int tab [ ];
▪ String chaines[ ];
Création d'un tableau
▪ tab = new int [20]; // tableau de 20 int
▪ chaines = new String [100]; // tableau de 100 chaine
Le nombre d'éléments du tableau est mémorisé. Java peut ainsi détecter à
l'exécution le dépassement d'indice et générer une exception. La taille de
tableau est récupérable par nomTableau.length
Comme en C/C++, les indices d’un tableau commencent à ‘ 0 ’. Donc un
tableau de taille 100 aura ses indices qui iront de 0 à 99.

50
Tableaux
Initialisation
tab[0]=1;
tab[1]=2; //etc.
noms[0] = new String( « Hassan");
noms[1] = new String( « Mohamed");
Création et initialisation simultanées
String noms [ ] = {« Hassan",« Mohamed"};
Point pts[ ] = { new Point (0, 0), new Point (10, -1)};
Exemple
public class Tab1
{ public static void main (String args[])
{ int tab[ ] ;
tab = new int[3];
tab[0]=5;
tab[1]=3;
tab[2]=tab[0]+tab[1];
}
} 51
String
String n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java
(Dans le package java.lang)
String s="aaa"; // s contient la chaîne "aaa"
String s=new String("aaa"); // identique à la ligne précédente
La concaténation
String str1 = "Bonjour ! ";
String str2 = null;
str2 = "Comment vas-tu ?";
String str3 = str1 + str2; / * Concaténation de chaînes :
Comparaison
int x=3,y=3;
x == y est vrai
String s1="Abc",s2="Abc";
s1 == s2 est faux...
Quand on compare 2 variables d’un type de base on compare leur valeur. Et
Quand on compare 2 objet avec les opérateurs on compare leur référence (leur
adresse en mémoire). Introduction de la méthode equals() pour les objets :
s1.equals(s2) est vrai52
String
Longueur d’un objet String
▪ La méthode int length() : renvoie la longueur de la chaîne
String str1 = "bonjour";
int n = str1.length(); // n vaut 7

Récupération d’un caractère dans une chaîne


▪ méthode char charAt(int pos) : renvoie le caractère situé à la position pos
dans la chaîne de caractère à laquelle on envoie se message String str1 =
"bonjour";
char x= str1.charAt(3); // x contient le caractère 'j'
Modification des objets String
▪ Les String sont inaltérables en Java : on ne peut modifier individuellement
les caractères d’une chaîne.
▪ Par contre il est possible de modifier le contenu de la variable contenant la
chaîne (la variable ne référence plus la même chaîne).
str1 = str1.substring(0,3) + " soir";
/* str1 contient maintenant la chaîne "bonsoir" */

53
String
Sous-chaînes
▪ La méthode String substring(int debut, int fin) sert a extraire la sous-chaine
depuis la position debut jusqu’à la position fin non-comprise.
String str2 = str1.substring(0,3); // str2 contient la valeur "bon" le
premier caractère d’une chaîne occupe la position 0 et le deuxième paramètre
de substring indique la position du premier caractère que l ’on ne souhaite pas
copier
Les chaînes de caractères sont des objets
▪ pour tester si 2 chaînes sont égales il faut utiliser la méthode boolean
equals(String str) et non ==
▪ pour tester si 2 chaînes sont égales à la casse près il faut utiliser la méthode
boolean equalsIgnoreCase(String str)
String str1 = "BonJour";
String str2 = "bonjour"; String str3 = "bonjour";
boolean a, b, c, d;
a = str1.equals("BonJour"); //a contient la valeur true
b = (str2 = = str3); //b contient la valeur false
c = str1.equalsIgnoreCase(str2);//c contient la valeur true
d = "bonjour".equals(str2); //d contient la valeur true
54
Math
Les fonctions mathématiques les plus connues sont regroupées dans la classe
Math qui appartient au package java.lang
les fonctions trigonométriques
les fonctions d’arrondi, de valeur absolue, ...
la racine carrée, la puissance, l’exponentiel, le logarithme, etc.
Ce sont des méthodes de classe (static)
double calcul = Math.sqrt (Math.pow(5,2) + Math.pow(7,2));
double sqrt(double x) : racine carrée de x
double pow(double x, double y) : x puissance y

55

Programmation procédurale et POO


Les limites de la programmation procédurale

▪ La programmation procédurale montre ses limites dans les projets complexes


(plus de 10 000 lignes de codes)
▪ Le code procédurale est difficile à débugguer, difficile à tester et donc moins
fiable.
▪ La qualité du programme se dégrade dans le temps. Il devient très difficile voir
impossible de faire des mises à jour intégrant de nouvelles fonctionnalités.
▪ La reprise du code par d'autres développeurs est problématique. 57

La naissance de la POO

▪ Les concepts de la Programmation Orientée Objet naissent dans les


laboratoires de recherche des années 70.
▪ Simula (1967), SmallTalk(1973) sont les premiers langages objet. ▪ Les
années 80 voient naître le C++ (extension du C) et ObjectiveC. ▪ Java
apparait dans les années 90 ...
58

Pourquoi la programmation objet?

▪ Code modulaire
Permet de développer facilement d’autres modules pour interagir
avec les interfaces déjà utilisées.
▪ Réutilisation
La conception par classe conduit à des composant
réutilisable Cache les détails d'implantation
▪ Maintenance et évolutivité
Modifier un de ces constituants n’affectera pas les autres et
n’entraînera donc pas d’erreurs ou autres comportements
erratique

59

Programmation Orientée objet


Classe && Objet

Les objets qui collaborent dans une application sont souvent très nombreux,
Mais on peut le plus souvent dégager des types d'objets.
La notion de classe correspond à cette notion de types d'objets; un objet
correspond à une instanciation de classes
Type
Concept de la vie réelle
Classe
description abstraite d'un ensemble d'objets ayant une structure et un
comportement communs. C’est un type abstrait définit une structure de
données par un ensemble d’opérations applicables aux objets de ce type et
une description sémantique de ces opérations
Objet
Un objet est une instance de classe. Entité atomique constituée d'un état
(caractéristiques et relations), d'un comportement et d'une identité

61

Classe && Objet

La classe est caractérisée par :


▪ ses données / caractéristiques / attributs
▪ ses traitements
▪ ses états, des comportements
▪ d'autres objets.
Exemple
Considérons la classe Point destinée à manipuler les points d’un
plan. public class Point
{ // instructions de définition des champs et des méthodes de la
classe }
définir le contenu de notre classe, en distinguant les champs des
méthodes. 1. Définition des champs
L’objet de type Point sera représenté par deux coordonnées
entières. private int x ; // abscisse
private int y ; // ordonnee

62

Classe && Objet

Le mot-clé private qui précise que ces champs x et y ne seront pas


accessibles à l’extérieur de la classe.
Cela correspond à l’encapsulation des données, dont on voit qu’elle n’est pas
obligatoire en Java (elle est toutefois fortement recommandée).
Ces déclarations peuvent être placées où vous voulez.
En général, on place les champs et méthodes privées à la fin.
2. Définition des méthodes
On définit trois méthodes :
▪ initialise pour attribuer des valeurs aux coordonnées d’un point, ▪
deplace pour modifier les coordonnées d’un point,
▪ affiche pour afficher un point; par souci de simplicité, nous nous
contenterons ici d’afficher les coordonnées du point.

63
Classe && Objet

Une méthode se compose d’un en-tête et d’un bloc.


la définition de la méthode initialise de la classe Point est :
public void initialise (int abs, int ord)
{ x = abs ;
y = ord ;
}
L’en-tête précise :
▪ le nom de la méthode, ici initialise
▪ le mode d’accès public pour que cette méthode soit effectivement utilisable
depuis un programme quelconque
▪ les arguments qui seront fournis à la méthode lors de son appel; il s’agit
d’arguments muets
▪ le type de la valeur de retour ; ne fournit aucun résultat void. 64

Classe && Objet


Voici la définition complète de notre classe Point :
public class Point
{ public void initialise (int abs, int ord)
{ x = abs ;
y = ord ;
}
public void deplace (int dx, int dy)
{ x += dx ;
y += dy ;
}
public void affiche ()
{
System.out.println ("Je suis un point de coordonnees "
+ x + " "+ y) ;
}
private int x ; // abscisse
private int y ; // ordonnee
65
}
Classe && Objet
Utilisation de la classe Point
la classe Point va permettre d’instancier des objets de type Point et de leur
appliquer aux méthodes publiques initialise, deplace et affiche.
En Java, toute instruction appartient toujours à une méthode.
La démarche
▪ La déclaration d’un objet de type Point dans une méthode: Point a ▪ un
objet de type Point ne réserve pas d’emplacement, mais seulement un
emplacement pour une référence à un objet de type Point.
▪ Par contre la déclaration d’une variable d’un type primitif (comme int n)
réserve l’emplacement

66
Classe && Objet
Utilisation de la classe Point
L’emplacement pour l’objet sera alloué sur une demande explicite du
programme, en faisant appel à un opérateur unaire nommé new.
L’instruction a=new Point(), crée un emplacement pour un objet a de type
Point et fournit sa référence contenue dans a .
Une fois qu’une référence à un objet a été convenablement initialisée, on
peut appliquer n’importe quelle méthode à l’objet correspondant.
Pa exemple l’instruction a.initialise (10,20) ; appelle la méthode initialise du
type Point en l’appliquant à l’objet de référence a, et en lui transmettant les
arguments 10 et 20

67
Classe && Objet

Remarque
▪ a est une variable de type classe. Nous ferons souvent l’abus de langage
consistant à appeler objet a l’objet dont la référence est contenue dans a. ▪
En C++, la déclaration d’un objet entraîne toujours la réservation d’un
emplacement approprié (comme pour un type de base). contrairement à
Java qui réserve un emplacement pour un type primitif, mais seulement une
référence pour un objet.
▪ En C++, on peut instancier un objet de deux manières différentes :
par sa déclaration (objet automatique)
par l’opérateur new (objet dynamique). on obtient en résultat une
adresse qu’on manipule par le biais d’un pointeur,
Le pointeur en C++ jouant un peu le rôle de la référence de Java.
▪ Le fait que Java ne dispose que d’un seul mode d’instanciation
(correspondant aux objets dynamiques de C++) contribue largement à la
clarté des programmes

68
Classe && Objet

Nous pouvons employer notre classe Point depuis toute méthode d’une
autre classe, ou depuis une méthode main (mode statique ).
Nous pourrions faire: main une méthode de notre classe Point. Mais la
démarche serait alors trop particulière .
Nous préférons donc qu’elle appartienne à une autre classe. La classe
nommée TestPoint contenant une fonction main utilisant notre classe Point
public class TestPoint
{ public static void main (String args[])
{ Point a = new Point() ;
a.initialise(10, 20) ; a.affiche() ;
a.deplace(2, 4) ; a.affiche() ;
Point b = new Point() ;
b.initialise (-5, -10) ; b.affiche() ;
}
}
69
Classe && Objet
Résultat après l’execution:
Je suis un point de coordonnées 10 20
Je suis un point de coordonnees 12 24
Je suis un point de coordonnees 7 14
Remarque
▪ Le dernier exemple fournit un exemple d’exécution, bien que pour l’instant nous
ne vous ayons pas encore précisé comment exécuter un programme formé de
plusieurs classes (ici TestPoint et Point);
▪ Dans notre classe Point, les champs x et y ont été déclarés privés. Une tentative
d’utilisation directe, en dehors des méthodes de Point, conduirait à une erreur de
compilation.
Ce serait notamment le cas, dans notre méthode main:
a.x = 5 ; // erreur : x est privé
System.out.println ("ordonnee de a " + a.y);// erreur : y est privé 70

Classe && Objet


Programme comportant plusieurs classes
Avec plusieurs classes, nous utiliserons un fichier source par classe.
classe Point
sauvegardé le source de la classe Point dans un fichier nommé Point.java. La
compilation donnera naissance au fichier de byte codes Point.class.
il n’est pas question d’exécuter directement ce fichier puisque la machine
virtuelle recherche une fonction main.
classe TestPoint
▪ sauvegardé son source dans un fichier TestPoint.java.
▪ Pour le compiler, il faut que Point.class existe (ce qui est le cas si Point.java
a été compilé sans erreurs), et que le compilateur ait accès à ce fichier;
selon l’environnement utilisé, des problèmes de localisation du fichier
peuvent se manifester ;
▪ exécuter le fichier TestPoint.class71
Classe && Objet

Nous avons déclaré chaque classe avec l’attribut public (ne confondez pas ce
droit d’accès à une classe avec le droit d’accès à ses champs ou méthodes,
même si certains mots-clés sont communs) ;
Java n’est pas tout à fait aussi strict. pour placer plusieurs classes dans un
même fichier, Il vous impose seulement de respecter les contraintes
suivantes :
▪ un fichier source peut contenir plusieurs classes mais une seule doit être
publique;
▪ la classe contenant la méthode main doit obligatoirement être publique,
afin que la machine virtuelle y ait accès ;
▪ une classe n’ayant aucun attribut d’accès reste accessible à toutes les
classes du même paquetage donc, a fortiori, du même fichier source.

72
Classe && Objet
Remarque
▪ La méthode main peut être une méthode de la classe Point. Cela permet
d’écrire un programme réduit à une seule classe et contenant à la fois sa
définition et son utilisation. Mais dans ce cas, la méthode main aurait
accès aux champs privés de la classe, ce qui ne correspond pas aux
conditions usuelles d’utilisation :
class Point
{ public static void main (String args[])
{ Point a = new Point() ;
a.x = ...// autorisé ici puisque main est une méthode de Point }
private int x, y ;
}
Déconseiller d’utiliser cette possibilité pour faire de la méthode main
une sorte de test de la classe, même si cette démarche est parfois
utilisée dans la littérature sur Java.
▪ Lorsque plusieurs classes figurent dans un même fichier source, la compilation
73
crée un « fichier .class » par classe.
Les constructeurs

Un constructeur est une méthode d'instance qui va se charger de créer un


objet et, le cas échéant, d'initialiser ses variables de classe.
Dans l’exemple de classe Point, il est nécessaire de recourir à la méthode
initialise pour attribuer des valeurs aux champs d’un objet de type Point.
Une telle démarche suppose que l’utilisateur de l’objet fera effectivement
l’appel voulu au moment opportun.
▪ la notion de constructeur vous permet d’automatiser le mécanisme
d’initialisation d’un objet.
▪ cette initialisation ne sera pas limitée à la mise en place de valeurs initiales;
il pourra s’agir de n’importe quelles actions utiles au bon
fonctionnement de l’objet.
▪ Un constructeur n’est rien d’autre qu’une méthode, sans valeur de retour,
portant le même nom que la classe. Il peut disposer d’un nombre
quelconque d’arguments (éventuellement aucun).

74
Les constructeurs

transformons la méthode initialise en un constructeur en la nommant Point.


La définition de notre nouvelle classe se présente alors ainsi : public class
Point
{ public Point (int abs, int ord) // constructeur
{ x = abs ;
y = ord ;
}
public void deplace (int dx, int dy)
{ x += dx ;
y += dy ;
}
public void affiche ()
{ System.out.println (« Point de coordonnees " + x + " " + y) ;
}
private int x ; // abscisse
private int y ; // ordonnee
}
75
Les constructeurs

L’instruction Point a = new Point() serait refusée par le compilateur. En


effet, à partir du moment où une classe dispose d’un constructeur, il n’est
plus possible de créer un objet sans l’appeler. Ici, notre constructeur a
besoin de deux arguments. Ceux-ci doivent obligatoirement être fourni lors
de la création, par exemple : Point a = new Point(10, 20)
Quelques règles concernant les constructeurs
1. un constructeur ne fournit aucune valeur. Dans son en-tête, aucun type
ne doit figurer devant son nom.
2. Une classe peut ne disposer d’aucun constructeur. On peut alors
instancier des objets comme s’il existait un constructeur par défaut sans
arguments: Point a=new Point() ;// OK si Point n’a pas de constructeur

76
Les constructeurs

Mais dès qu’une classe possède au moins un constructeur , ce pseudo


constructeur par défaut ne peut plus être utilisé, exemple :
class A
{ public A(int) { ..... } // constructeur à un argument int .....
}
.....
A a1 = new A(5) ; // OK
A a2 = new A() ; // erreur
On notera que l’emploi d’un constructeur sans arguments ne se distingue
pas de celui du constructeur par défaut. Si, pour une classe T donnée,
l’instruction suivante est acceptée : T t = new T() ;
cela signifie simplement que :
▪ soit T ne dispose d’aucun constructeur,
▪ soit T dispose d’un constructeur sans arguments.

77
Les constructeurs

3. Un constructeur ne peut pas être appelé directement depuis une autre


méthode. Par exemple, l’appel a.Point(8, 3) est interdit
4. Un constructeur peut appeler un autre constructeur de la même classe.
Cette possibilité utilise la surdéfinition des méthodes et nécessite
l’utilisation du mot-clé super ; nous en parlerons plus loin.
5. Un constructeur peut être déclaré privé (private). Dans ce cas, il ne
pourra plus être appelé de l’extérieur, c’est-à-dire qu’il ne pourra pas être
utilisé pour instancier des objets :
class A
{ private A() { ..... } // constructeur privé sans arguments
}
A a() ; // erreur : le constructeur correspondant A() est privé1 Cette
possibilité n’aura d’intérêt que si la classe possède au moins un autre
constructeur public faisant appel à ce constructeur privé, qui apparaîtra
alors comme une méthode de service.

78
Construction et initialisation d’un objet
Les champs d’un objet sont toujours initialisés par défaut. la création d’un
objet entraîne toujours, par ordre chronologique, les opérations suivantes : ▪
une initialisation par défaut de tous les champs de l’objet, ▪ une initialisation
explicite lors de la déclaration du champ, ▪ l’exécution des instructions du
corps du constructeur.
1. Initialisation par défaut des champs d’un objet
Dès qu’un objet est créé, et avant l’appel du constructeur, ses champs sont
initialisés à une valeur par défaut "nulle" ainsi définie :
Type du champ Valeur par défaut
Boolean False
Char Caractère de code nul
Entier(byte,short,int,long) 0
Flottant(float,double) 0.f ou 0
Objet null
79
Construction et initialisation d’un objet
2. Initialisation explicite des champs d’un objet
Une variable locale peut être initialisée lors de sa déclaration. Il en va de
même pour un champ. Considérons :
class A
{ public A (...) { ..... } // constructeur de A
.....
private int n = 10 ;
private int p ;
}
L’instruction suivante : A a = new A (...) ; entraîne successivement :
▪ l’initialisation (implicite) des champs n et p de a à 0
▪ l’initialisation (explicite) du champ n à la valeur 10
▪ l’exécution des instructions du constructeur.

80

Vous aimerez peut-être aussi