Vous êtes sur la page 1sur 227

LST-GI (S6), A.

U: 2012/2013 à 2021/2022

Prof. E. M. EN-NAIMI

E-Mails : ennaimi@gmail.com ; en-naimi@uae.ac.ma

Programmation Orientée Objet en


Plan Général du Module: POO en JAVA

Partie I: Présentation Générale & Eléments de Base du Langage JAVA

Partie II: Programmation Orientée Objet en JAVA

Dépt. G. Informatique / FST de Tanger


@ Prof. E. M. EN-NAIMI 2
2012/2013 & 2021/2022
Sommaire

Partie I:
Chap.1 : Présentation Générale de la POO en JAVA (2 Séances)
Chap.2 & 3: Eléments de Base & Opérateurs et Expressions (2 Séances)
Chap.4: Les Structures de Contrôle (1 Séance)
Chap.5: Les Tableaux & Chaines de Caractères (1 ou 2 Séance(s) )
Partie II:
Chap.6: Classes et Objets & Classes String
Chap.7: Héritage et Polymorphisme
Chap. 8: Classes Abstraites & Les Interfaces
Chap. 9: Collection & Gestion des Exceptions
Chap. 10: Packages et Quelques API de JAVA
Chap. 11: Gestion des E/S
Chap. 12: Interfaces Graphiques
Chap. 13: Accès/Connexion aux BDD en JAVA (L'API JDBC),…, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 3


2012/2013 & 2021/2022
Remerciements & Reconnaissances
o Lors de la préparation de ces cours de POO en JAVA, j’ai utilisé des multiples documents (Références),
sur quoi ont été basés mes Cours du Module POO en JAVA les parmi, je cite (la liste est non-exhaustive! ):
Ø Claude Delannoy, "Programmer en JAVA" , 5ème édition [© Groupe Eyrolles, 2008]
Ø Claude Delannoy, "Exercices corrigés en JAVA" , 4ème édition (Troisième tirage 2017) [Edition Eyrolles];
Ø Cyrille Herby, "Apprenez à Programmer en JAVA",
( https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-java ) ;
Ø Jean-Michel DOUDOUX, "Développons en JAVA", Version 2.10 (19/03/2016);
Ø Nabil EL AKKAD, "Fondements du Langage JAVA", ENSA Al-Hoceima, UAE (A.U: 2017/2018);
Ø François Bonneville, "POO- Langage JAVA", LIFC - Université de Franche-Comté (www.bonneville.nom.fr );
Ø Hugues Bersini, "Introduction à Java" , INFO 114, Code/IRIDIA – Université Libre de Bruxelles;
Ø Hugues Fauconnier, "Cours POO en Java", ( http://www.liafa.jussieu.fr/~hf/verif/ens/an08-09/poo/L3.POO.html );
Ø Gauthier Picard and Laurent Vercouter, "Initiation à la programmation orientée-objet avec le langage Java",
( https://www.emse.fr/~picard/cours/1A/java/livretJava.pdf );
Ø "Cours de l’Introduction à JAVA", (Site Web: systemesdeproduction.blogspot.com);
Ø "Programmation JAVA", WikiLivre: https://fr.wikibooks.org/wiki/Catégorie:Programmation_Java_(livre);
Ø Voir aussi le Lien: http://fr.wikibooks.org/wiki/Programmation_Java;
Ø Autres Références que je les ai aussi utilsé,…, etc.
Je tiens à vous remercier infiniment TOUS, pour vos aides et vos soutiens, en utilisant vos
énormes et très importants documents, afin de bien préparer/produire cette modeste version de mes
cours du Module POO en JAVA, à l’usage des étudiants de la Filière Licence: LST-GI, Département
Génie Informatique, FST de Tanger, UAE…

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 4


2012/2013 & 2021/2022
Objectifs (1/3)

Présenter le langage Java

Introduire les notions de base de la


Programmation Orientée Objet en JAVA

Présenter l’intérêt de la Programmation


orientée Objet en JAVA

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 5


2012/2013 & 2021/2022
Objectifs (2/3)

q Comprendre les notions fondamentales et les éléments de Base de


Programmation Orientée Objet (POO) en JAVA;

q Etre capable de lire, de comprendre du code en Langage JAVA;


q Comprendre le paradigme OO et utiliser Java pour le mettre en
œuvre;
q Mettre en oeuvre les concepts de la POO et implémenter des
Applications en langage JAVA;
q Analyser un problème/une Application et le/la décomposer pour mieux
le/la traiter sur le(s) environnement(s) de Développement en JAVA
àrésoudre efficacement des problèmes complexes !.
q …, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 6


2012/2013 & 2021/2022
Objectifs (Résumé) (3/3)

q Notion de classe et d’objet;


q Décrire la syntaxe du langage Java;
q Décrire les éléments-clé de la plate-forme Java;
q Compiler et exécuter une application Java;
q Comprendre et utiliser les API de Java;
q Mettre en oeuvre les concepts de la POO et implémenter des
Applications en langage JAVA;
q …, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 7


2012/2013 & 2021/2022
Ouvrages d’initiation (1)

Programmer en Java (2ème édition)


Auteur : Claude Delannoy
Éditeur : Eyrolles
Edition : 2002 - 661 pages - ISBN : 2212111193

Java en action
Auteur : Ian F. Darwin
Éditeur : O’Reilly
Edition : 2002 - 836 pages - ISBN : 2841772039

Apprendre Java et C++ en parallèle


Auteur : Jean-Bernard Boichat
Éditeur : Eyrolles
Edition : 2003 - 742 pages - ISBN : 2212113277
Ouvrages de reference (2)

Ouvrages thématiques aux éditions O’Reilly sur une sélection des


Packages Java (certains traduits en Français)

Ouvrages de référence de SUN aux éditions Paperback


(en anglais uniquement)
Autres Références (1)
o Bibliographie
n Au cœur de Java 2 : Volume I - Notions fondamentales.
C. Hortsmann et G. Cornell. The Sun Microsystems Press.
Java Series. CampusPress.
n Au cœur de Java 2 : Volume II - Fonctions avancées.
C. Hortsmann et G. Cornell. The Sun Microsystems Press.
Java Series. CampusPress.
n Passeport pour l’algorithmique objet. Jean-Pierre Fournier.
Thomsom Publishing International.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 10


2012/2013 & 2021/2022
Autres Références (2)
o Webographie
n Pour récupérer le kit de développement de Sun
o http://java.sun.com/ (racine du site)
n Outils de développement
o Eclipse : http://www.eclipse.org
o JBuilder 5 : http://www.borland.fr/download/jb5pers/
n Des exemples de programmes commentés
o http://www.technobuff.com/javatips/ (en anglais)
o http://developer.java.sun.com/developer/JDCTechTips/ (en anglais)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 11


2012/2013 & 2021/2022
Partie I:

Chapitre 1. : Présentation Générale de la POO en JAVA

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 12


2012/2013 & 2021/2022
Rapide historique de la POO (1)

Début en Norvège à la fin des années 60


Ø Simula, programmation des simulations par événements discrets
Ø Programmation structurée pas adaptée

Dans les années 70


Ø Développement par Xérox du premier système Fenêtres, Icônes et Souris
Ø SmallTalk, « archétype » des langages objets
Ø Développement par Apple des premiers Mac
Ø Développement par Xérox du premier système Fenêtres, Icônes et Souris
Rapide historique de la POO (2)

Au cours des années 80

Ø Développement des ordinateurs personnels;


Ø Intérêt pour les interfaces graphiques;
Ø Apparition de nouveaux langages

• Eiffel, fortement typé, entièrement OO;


• C++, extension de C, pas totalement OO;
• Object Pascal (Delphi) développé par Borland..

Dans les années 90, vers une maturité des concepts objets

Ø Standardisation de C++ ;
Ø Apparition de langages comme Java ou Python…
Historique de Java (3)
o Java a été développé à partir de Décembre 1990 par une équipe de
Sun Microsystems dirigée par James Gosling;
o 1990 : Ecriture d'un nouveau langage plus adapté à la réalisation
de logiciels embarqués, appelé OAK:
n Petit, fiable et indépendant de l'architecture
n Destiné à la télévision interactive
n Non rentable sous sa forme initiale
o 1993 : le WEB « décolle », Sun redirige ce langage vers Internet :
les qualités de portabilité et de compacité du langage OAK en ont
fait un candidat parfait à une utilisation sur le réseau. Cette
réadaptation prit près de 2 ans;
o 1995 : Sun rebaptisa OAK en Java (nom de la machine à café autour de
laquelle se réunissait James Gosling et ses collaborateurs)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 15


2012/2013 & 2021/2022
Historique de Java (4)
o 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.
o 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.
o 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)
o L'intérêt pour la technologie Java s’est accru rapidement:
IBM, Oracle et d'autres ont pris des licences Java.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 16


2012/2013 & 2021/2022
Histoire récente (5)

o En Mai 2007, Sun publie l’ensemble des outils Java


dans un « package » OpenJDK sous licence libre;
o La société Oracle a acquis en 2009 l'entreprise Sun
Microsystems. On peut désormais voir apparaître le
logo Oracle dans les documentations de l’API Java;
o Le 12 Avril 2010, James Gosling, le créateur du
langage de programmation Java démissionne d’Oracle
pour des motifs qu’il ne souhaite pas divulguer. Il était
devenu le Directeur technologique de la division
logicielle client pour Oracle;
o Août 2012: faille de sécurité importante dans Java 7.
o …, etc.
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 17
2012/2013 & 2021/2022
Les différentes versions de Java
o De nombreuses versions de Java depuis 1995
n Java 1.0 en 1995
n Java 1.1 en 1996
n Java 1.2 en 1999 (Java 2, version 1.2)
n Java 1.3 en 2001 (Java 2, version 1.3)
n Java 1.4 en 2002 (Java 2, version 1.4)
n Java 5 en 2004
n Java 6 en 2006 celle que nous utiliserons dans ce cours
n Java 7 en 2011
n …
n Java 11 en 2018 (11.0.2)
n Java 16 en Avril 2019, …, etc.

o Évolution très rapide et succès du langage


o Une certaine maturité atteinte avec Java 2
o Mais des problèmes de compatibilité existaient
n entre les versions 1.1 et 1.2/1.3/1.4
n avec certains navigateurs

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 18


2012/2013 & 2021/2022
Notions fondamentales

- Classe / Objet / Instance;

- Attributs / Méthodes;

- Encapsulation;

- Héritage ;

- Polymorphisme;
- …, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 19


2012/2013 & 2021/2022
Programmation Orientée Objet

La Programmation Orientée Objet (P.O.O) est fondée sur le concept d’objet. Un objet est
une association des données et des traitements appelés méthodes agissant sur ces données :

Les données et les méthodes sont regroupées au sein


de l’objet.

• Un objet constitue une instance (ou variable) d’une classe. Le mécanisme qui permet de
créer des objets à partir des classes s’appelle l’instanciation.
Ce mécanisme permet non seulement de créer l’objet mais aussi de l’initialiser.
• Une classe constitue une description (ou un modèle) d’un ensemble d’objets ayant une
même structure de données et disposant des mêmes méthodes
Classe ⇔ ensemble (ou type de données)
Objet ⇔ élément de la classe (ou variable, on dit aussi instance de la classe)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 20


2012/2013 & 2021/2022
Aperçu : Orienté Objet

ü La programmation orientée objet se base sur une approche de


conception et de développement de logiciels;

ü Représenter les éléments du monde réel par des entités


informatiques appelés "objets" en adoptant un haut niveau
d'abstraction.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 21


2012/2013 & 2021/2022
Aperçu : Orienté Objet

Ø Approche procédurale :
"Que doit faire mon programme ? "

Ø Approche orientée-objet :
"De quoi doit être composé mon programme ?"
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 22
2012/2013 & 2021/2022
Aperçu : Orienté Objet
Des objets similaires peuvent être informatiquement décrits par
une même abstraction : une classe
Ø une même structure de données et méthodes de traitement
Ø des valeurs différentes pour chaque objet

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 23


2012/2013 & 2021/2022
Principes POO

Notion de classe
On regroupe les objets qui ont les mêmes états et les mêmes comportements :
c’est une classe
Les classes servent de « moules » pour la création des objets : un objet est
une « instance » d’une classe
Un programme OO est constitué de classes qui permettent de créer des
objets qui s’envoient des messages
Voiture
Nom de la classe
- puissance : entier

- estDémarrée : booléen
Attributs
- vitesse : réel

+ deQuellePuissance() : entier

+ demarre()
Méthodes
+ accélère (réel)
Visibilité
JAVA: Classe
- Les briques de constructions d’un programme JAVA sont les classes,

LES ATTRIBUTS :
Partie statique les données (Propriétés) Les attributs représentent la
description des données
propres à chaque classe
d'objets

LES METHODES :
le code les manipulant Les méthodes représentent
Partie dynamique
(Méthodes) l'ensemble des actions,
procédures, fonctions ou
opérations que l'on
peut associer à une classe
Classe
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger
2012/2013 & 2021/2022 25
Les concepts de la P.O.O

Les principaux concepts dans la P.O.O pure sont : l’encapsulation, la composition, le


polymorphisme, la généricité et l’héritage. En plus de ces cinq concepts, le langage
Java ajoute deux autres concepts : l’interface et le package.

1. L’Encapsulation
En P.O.O pure, les données doivent être encapsulées, ce qui signifie qu’il n’est pas possible
d’agir directement sur les données d’un objet, il faut obligatoirement passer par les méthodes de
l’objet.
Ø L’encapsulation de données permet de les protéger, elle constitue un moyen sûr pour
préserver l’intégrité des données.
Ø L’encapsulation permet la modularité et facilite la réutilisation de logiciel.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 27


2012/2013 & 2021/2022
Concepts de Base: Encapsulation
Public Private

Classe La classe peut être utilisée


dans n’importe quelle classe

Attribut L’attribut accessible Attribut accessible uniquement


directement depuis le code de dans le code de la classe qui le
n’importe quelle classe définit

Méthode Méthode pouvant être Méthode utilisable uniquement


invoqué depuis le code de dans le code de la classe qui la
n’importe quelle classe définit

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 28


2012/2013 & 2021/2022
Les concepts de la P.O.O

2. La Composition
La composition signifie que les objets peuvent être inclus les un dans les autres.
Les objets sont organisés selon la relation composé de.

Exemple :
Point
• Un point est un objet qui contient les
X: réel
coordonnées (x,y) d'un point dans un plan. Y: réel

• Un cercle est un objet qui contient le


rayon du cercle et un point indiquant le Composition
centre du cercle. Cercle
R: réel
C: Point
@ Prof. E. M. EN-NAIMI
Dépt. G. Informatique / FST de Tanger
2012/2013 & 2021/2022 29
Les concepts de la P.O.O
3. Le Polymorphisme
C'est la faculté d'une méthode à s'appliquer à des objets de types différents. Grâce
au polymorphisme, il est possible de définir plusieurs méthodes différentes qui
portent le même nom, la différence entre ces méthodes se fait par rapport au
nombre et aux types des paramètres.

4. La Généricité
La généricité (ou types paramétrés) permet d'introduire des paramètres (ou variables)
de types dans la définition d'une méthode ou d'une classe.
La généricité facilite la réutilisation de composants logiciels, elle permet aussi
l’écriture du code indépendamment des types spécifiques d'objets

@ Prof. E. M. EN-NAIMI
Dépt. G. Informatique / FST de Tanger
30
2012/2013 & 2021/2022
Les concepts de la P.O.O
5. L’Héritage
L’héritage est un mécanisme de transmission de fonctionnalités d'une classe vers
une autre classe.
Il est possible de définir une nouvelle classe à partir d’une classe existante, à
laquelle on ajoute de nouvelles données et de nouvelles méthodes (ou
comportements).

Ø La nouvelle classe hérite les fonctionnalités de l’ancienne classe.


Ø La classe héritée constitue une généralisation alors que la classe qui dérive par
héritage constitue une spécialisation.
Ø L’héritage organise les classes selon la relation est un.

@ Prof. E. M. EN-NAIMI
Dépt. G. Informatique / FST de Tanger
31
2012/2013 & 2021/2022
Les concepts de la P.O.O

Exemple d’héritage Voiture


+ démarre()

VehiculePrioritaire VoitureElectrique
- gyrophare : booléen - disjoncteur : booléen
+ allumeGyrophare() + démarre()

Ø Un véhicule prioritaire est une voiture avec un gyrophare


Un véhicule prioritaire répond aux mêmes messages que la Voiture
On peut allumer le gyrophare d’un véhicule prioritaire

Ø Une voiture électrique est une voiture dont l’opération de démarrage


est différente : on démarre une voiture électrique en activant un disjoncteur
Les concepts de la P.O.O (java)

6. L’interface
§ Une interface regroupe un ensemble de méthodes (ou comportements) dite
abstraites, c’est-à-dire, non implémentées.
§ Certains langages de P.O.O (comme par exemple, le C++) permettent
l'héritage multiple.
§ En Java, l'héritage multiple n'est pas permis, en effet, pour des raisons de
simplicité, Java ne permet d'utiliser que de l'héritage simple.
§ Pour résoudre ce problème, Java propose d'utiliser des interfaces, en effet,
grâce aux interfaces, une classe peut combiner les comportements issus de
plusieurs interfaces !
Les concepts de la P.O.O (java)

7. Le Package
Un package permet de regrouper des classes et des interfaces. De la même manière
que les classes qui permettent d'encapsuler les données, les package peuvent être
utilisés pour encapsuler des classes.

Remarques
• Un package doit obligatoirement avoir au moins une classe public accessible
depuis l'extérieur du package.
• Les packages servent à protéger les classes, les donnés et les méthodes.
• Ils constituent des modules indépendants qu'il est facile de les intégrer et de les
réutiliser dans un nouveau programme.
Caractéristiques du langage Java
Présentation

Java est un langage de programmation moderne développé par Sun Microsystems


(aujourd'hui racheté par Oracle)

Une des plus grandes forces est son excellente portabilité : un programme java
peut s’exécuter sous Windows, Mac, Linux, etc….

Avec le langage Java on peut avoir:


ü 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 J2ME
et bien d'autres J2EE, JMF, J3D pour la 3D...

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 36


2012/2013 & 2021/2022
Que penser de Java? (1)
o Les plus :
n Il a su bénéficier de l’essor d’Internet
n Il a su s’imposer dans de nombreux domaines
n Un environnement gratuit et de nombreux outils disponibles
n Une large communauté très active

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 37


2012/2013 & 2021/2022
Que penser de Java? (2)
o Les moins :
n Trop ‘médiatisé’?
n Problèmes de compatibilité
o Avec les premières versions !
o Avec certains navigateurs (les navigateurs ne sont pas
écrits par Sun) !
n Problèmes de vitesse, mais existence de solutions pour y
pallier (compilateur natif, compilation du bytecode à la
volée) !
o Un bon langage
o Un langage adapté aux besoins de développements actuels, …

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 38


2012/2013 & 2021/2022
C++ vs Java

o Pas de structures ni d’unions;


o Pas de typedef;
o Pas de variables ni de fonctions en dehors des classes;
o Pas de fonctions à nombre variable d’arguments;
o Pas d'héritage multiple de classes;
o Pas de surcharge d’opérateurs;
o Pas de passage par copie pour les objets;
o Pas de pointeurs, seulement des références;
o …, etc.
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 39
2012/2013 & 2021/2022
JAVA: Caractéristiques (1)
Orienté
Portable
Objet

Simple Interprété

JAVA
Fortement Multitâches
typé

Gère la Économe
mémoire Sûr

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 40


2012/2013 & 2021/2022
Caractéristiques du langage Java (2)
o Simple
n Apprentissage facile
o faible nombre de mots-clés
o simplifications des fonctionnalités essentielles
n Développeurs opérationnels rapidement

o Familier
n Syntaxe proche de celle de C/C++

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 41


2012/2013 & 2021/2022
Caractéristiques du langage Java (3)
o Orienté objet pur !
n Java ne permet d'utiliser que des objets (hors les types de base)
n Java est un langage objet de la famille des langages de classe
comme C++ ou SmallTalk
n Les grandes idées reprises sont : encapsulation, dualité classe
/instance, attribut, méthode / message, visibilité, dualité
interface/implémentation, héritage simple, redéfinition de
méthodes, polymorphisme, …, etc.
o Sûr
n Seul le bytecode est transmis, et «vérifié» par l’interpréteur;
n Impossibilité d’accéder à des fonctions globales ou à des ressources
arbitraires du système !

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 42


2012/2013 & 2021/2022
Caractéristiques du langage Java (4)
o Fiable
n Gestion des exceptions;
n Sources d'erreurs limitées:
o typage fort;
o pas d'héritage multiple;
o Pas de surcharge des opérateurs;
o pas de manipulations de pointeurs, etc.
n Vérifications faites par le compilateur facilitant une
plus grande rigueur du code;
n Gestion automatique de la mémoire
(ramasse-miette ou "garbage collector"),…, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 43


2012/2013 & 2021/2022
Caractéristiques du langage Java (5)
Java est indépendant de l'architecture
o 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 ou ce qu’on appelle en Anglais (JVM !).
« Ecrire une fois, exécuter partout ! »
Java est multi-tâches
o Exécution de plusieurs processus effectuant chacun une
tâche différente;
o Mécanismes de synchronisation;
o Fonctionnement sur des machines multiprocesseurs, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 44


2012/2013 & 2021/2022
Qu’est-ce que Java ?

o Java est un langage de programmation


n Un programme Java est compilé et interprété

o Java est une plateforme


n La plateforme Java, uniquement software, est exécutée
sur la plateforme du système d’exploitation
n La « Java Platform » est constituée de :
o La « Java Virtual Machine » (JVM);
o Des interfaces de programmation d’application (Java API).

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 45


2012/2013 & 2021/2022
Java comme langage de programmation
Java est un langage de programmation particulier qui possède des
caractéristiques avantageuses:
n Simplicité et productivité:
o Intégration complète de l’OO
o Gestion mémoire (« Garbage collector »)
n Robustesse, fiabilité et sécurité
n Indépendance par rapport aux plateformes
n Ouverture:
o Support intégré d’Internet
o Connexion intégrée aux bases de données (JDBC)
o Support des caractères internationaux
n Distribution et aspects dynamiques
n Performance

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 46


2012/2013 & 2021/2022
Java, un langage de programmation

o Applications Java : programmes autonomes, "stand-alone";


o Applets (mini-programmes) : Programmes exécutables
uniquement par l'intermédiaire d'une autre application;
n navigateur web : Netscape, Internet explorer, Hotjava
n application spécifique : AppletViewer
o Java est souvent considéré comme étant uniquement un
langage pour écrire des applets alors que c'est aussi un vrai
langage de programmation;
o Java est souvent confondu avec le langage de script
Javascript auquel il n'est en aucune manière apparenté !

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 47


2012/2013 & 2021/2022
Langage compilé (C/C++)
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

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 48


2012/2013 & 2021/2022
Langage compilé et interprété (JAVA)
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

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 49


2012/2013 & 2021/2022
Déploiement d’un programme (1/2)
Paradigme classique de la compilation (C/C++)

MyProgram.c

Exécuté une seule fois Génère du code natif directement


Mais différent pour chaque Compiler exécutable, mais spécifique à chaqu
environnement environnement

MyProgram.o

010110…

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 50


2012/2013 & 2021/2022
Déploiement d’un programme (2/2)
Paradigme classique de la compilation/interprétation/exécution (JAVA)
o Chaque programme en langage JAVA est compilé et interprété
o «Write once run everywhere: Ecrire une fois, exécuter partout ! »

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 51


2012/2013 & 2021/2022
Java comme langage de programmation
Neutre architecturalement

MyProgram.java
o Il existe une grande diversité de
systèmes d’exploitation;
o Le compilateur Java génère un
Bytecode, c’est à dire un format Java Compiler
intermédiaire, neutre
architecturalement, conçu pour faire
transiter efficacement le code vers des
hardware différents et/ou plateformes
différentes MyProgram.class
= Bytecode
o Le Bytecode ne peut-être interprété
que par le processeur de la JVM
JVM JVM JVM
Mac Windows Unix

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 52


2012/2013 & 2021/2022
Programme JAVA (1)
Un programme Java est compilé et interprété

-le code source est, directement,


Compilé interprété sans phase de
compilation, et c'est l'interprète qui
exécute ce code source, qu'il
interprète à la volée.(JVM)

-le code source est soumis à un


compilateur, pour en faire un
fichier binaire compréhensible par
un microprocesseur (une sorte de Interprété
pré- fichier .exe)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger


2012/2013 & 2021/2022 53
Principales étapes d’un développement
(Compilation/Interprétation/Exécution…)

Création du code source


Codes Sources
À partir des spécifications (par exemple en UML)
MonProgramme.java
Outils : éditeur de texte (NotePad), IDE (NetBeans, Eclipse, …, etc.)

Compilation en Byte-Code javac

A partir du code source


Outil : compilateur Java
Byte-Code
Diffusion sur l’architecture cible
MonProgramme.class
Transfert du Byte-Code seul
java
Outils : réseau, disque, etc

Exécution sur la machine cible


Exécution du Byte-Code
MonProgramme
Outil : Machine Virtuelle Java (JVM)
Programme JAVA (2)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 55


2012/2013 & 2021/2022
JAVA: la Plateforme
Plateforme = environnement hardware ou software sur lequel le programme est exécuté.
La Java « Platform » se compose de:
ü Java Virtual Machine (Java VM)
ü Java Application Programming Interface (Java API)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger


2012/2013 & 2021/2022 56
JVM

Une machine virtuelle est un ordinateur fictif s’exécutant sur un


ordinateur réel :

— Possède un langage natif propre et traduit un programme écrit


dans ce langage vers le langage natif de l’ordinateur;

— Définit les spécifications hardware de la plateforme;

— Lit le Bytecode compilé (indépendant de la plateforme).

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger


2012/2013 & 2021/2022 57
Outil de développement : le JDK
o Environnement de développement fourni par Sun
o JDK signifie Java Development Kit (Kit de
développement Java).
o Il contient :
n les classes de base de l'API java (plusieurs centaines),
n la documentation au format HTML
n le compilateur : javac
n la JVM (Machine Virtuelle Java) : java
n le visualiseur d'applets : appletviewer
n le générateur de documentation : javadoc
n …, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 58


2012/2013 & 2021/2022
Les outils Java
Simples éditeurs ou environnements de développement
Quel EDI Java utilisez vous en 2013 ?
Ø Eclipse
Ø Netbeans
Ø IntelliJ IDEA
Ø RAD/WSAD
Ø Jdeveloper
Ø Jcreator
Ø Jbuilder
Ø ….

Sondage: www.developpez.net
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 59
2012/2013 & 2021/2022
Les outils Java (Suite…)

Sondage (Source):

https://java.developpez.com/actu/89760/Quel-environnement-de-developpement-integre-Java-utilisez-vous-en-2015-et-pourquoi/

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 60


2012/2013 & 2021/2022
L’API de Java

o Java fournit de nombreuses librairies de classes


remplissant des fonctionnalités très diverses :
c'est l'API Java
n API (Application Programming Interface /Interface pour
la programmation d'applications) : Ensemble de
bibliothèques permettant une programmation plus aisée
car les fonctions deviennent indépendantes du matériel.
o Ces classes sont regroupées, par catégories, en
paquetages (ou "packages").

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 61


2012/2013 & 2021/2022
API: Java Application Programming Interface

API - Java:
L’API-Java est structuré en libraires (packages).
Les packages comprennent des ensembles fonctionnels de composants (classes)..
Le noyau (core) de l’API Java (inclus dans toute implémentation complète de la
plateforme Java) comprend notamment :

§ Essentials (data types, objects, string, array, vector, I/O, date,…)


§ Applet
§ Abstract Windowing Toolkit (AWT)
§ Basic Networking (URL, Socket –TCP or UDP-,IP)
§ Evolved Networking (Remote Method Invocation)
§ Internationalization
§ Security
…..
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger
2012/2013 & 2021/2022 62
L’API de Java (2)
o Les principaux paquetages (Packages)
n java.util : structures de données classiques
n java.io : entrées / sorties
n java.lang : chaînes de caractères, interaction avec l'OS,
threads
n java.applet : les applets sur le web
n java.awt : interfaces graphiques, images et dessins
n javax.swing : package récent proposant des composants
« légers » pour la création d’interfaces graphiques
n java.net : sockets, URL
n java.rmi : Remote Method Invocation (pas abordé dans ce
cours)
n java.sql : fournit le package JDBC (pas abordé dans ce cours)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 63


2012/2013 & 2021/2022
L’API de Java (3)

o La documentation de Java est standard, que ce


soit pour les classes de l'API ou pour les classes
utilisateur
n possibilité de génération automatique avec l’outil Javadoc.
o Elle est au format HTML.
n intérêt de l'hypertexte pour naviguer dans la
documentation

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 64


2012/2013 & 2021/2022
L’API de Java (4)
o Pour chaque classe, il y a une page HTML
contenant :
n la hiérarchie d'héritage de la classe,
n une description de la classe et son but général,
n la liste des attributs de la classe (locaux et hérités),
n la liste des constructeurs de la classe (locaux et
hérités),
n la liste des méthodes de la classe (locaux et hérités),
n puis, chacune de ces trois dernières listes, avec la
description détaillée de chaque élément.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 65


2012/2013 & 2021/2022
L’API de Java (5)
o Où trouver les informations sur les classes de l’API
n sous le répertoire jdk1.x/docs/api dans le JDK
o les documentations de l’API se téléchargent et
s’installent (en général) dans le répertoire dans lequel on
installe java.
Par exemple si vous avez installer Java dans le
répertoire D:/Apps/jdk1.4/, vous décompresser le fichier
zip contenant les documentations dans ce répertoire.
Les docs de l’API se trouveront alors sous :
D:/Apps/jdk1.4/docs/api/index.html
n Sur le site de Sun, on peut la retrouver à:
http://java.sun.com/docs/index.html
n Ou bien directement (pour les versions en cours!):
https://www.oracle.com/java/technologies/javase-jdk16-downloads.html

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 66


2012/2013 & 2021/2022
Java, un langage indépendant? (1)
o Java est un langage compilé et interprété
n La compilation d'un programme Java crée du pseudo-code
portable : le "byte-code"
n Sur n'importe quelle plate-forme, une machine virtuelle
Java peut interpréter le pseudo-code afin qu'il soit exécuté
o Les machines virtuelles Java peuvent être
n des interpréteurs de Byte-code indépendants (pour
exécuter les programmes Java)
n contenues au sein d'un navigateur
(pour exécuter des applets Java)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 67


2012/2013 & 2021/2022
Java, un langage indépendant? (2)
o Avantages :
n Portabilité
o Des machines virtuelles Java existent pour de nombreuses
plates-formes dont : Linux, Windows, MacOS
n Développement plus rapide
o courte étape de compilation pour obtenir le byte-code,
o pas d'édition de liens,
o déboguagge plus aisé,
n Le byte-code est plus compact que les exécutables
o pour voyager ou se déplacer sur les réseaux,
o …, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 68


2012/2013 & 2021/2022
Java, un langage indépendant? (3)
o Inconvénients :
n Nécessite l’installation d’un interpréteur pour pouvoir
exécuter un programme Java
n L'interprétation du code ralentit l'exécution
n Les applications ne bénéficient que du dénominateur
commun des différentes plate-formes
o limitation, par exemple, des interfaces graphiques
n Gestion gourmande de la mémoire !
n …, etc.

@ Prof. E. M. EN- Dépt. G. Informatique / FST de 69


NAIMI Tanger 2012/2013 & 2021/2022
Chapitres 2 & 3:

Syntaxe du langage Java,


Eléments de Base &
Opérateurs et Expressions
Les commentaires
o /* commentaire sur une ou plusieurs lignes */
n Identiques à ceux existant dans le langage C .
o // commentaire de fin de ligne
n Identiques à ceux existant en C++ .
o /** commentaire d'explication/documentation */
n Les commentaires d'explication se placent généralement juste avant une
déclaration (d'attribut ou de méthode);
n Ce commentaire servira à produire automatiquement (avec
l'outil javadoc) la documentation sous forme HTML à l'image de la
documentation officielle de SUN;
n Ces commentaires servent à documenter les classes que l'on
définit. Java exige donc qu'ils figurent avant la définition de la classe,
d'un membre de la classe ou d'un constructeur;
n Ils sont récupérés par l'utilitaire javadoc et inclus dans la documentation
ainsi générée.
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 71
2012/2013 & 2021/2022
Les commentaires (suite)
Trois façons d’inclure des commentaires :
n Tout texte entre « // » et la fin de la ligne
// Commentaires sur une seule ligne

n Tout texte entre « /* » et « */ »


/* Commentaires
sur un nombre important voire très important
de lignes */

n Les textes entre « /** » et « */ » sont utilisés pour créer des


commentaires que l’exécutable JAVADOC pourra traiter afin de
produire une documentation (cf. documentation de l’API Java)
/** Commentaires destinés
à la documentation */

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 72


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

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 73


2012/2013 & 2021/2022
Point d’entrée d’un programme Java

o Pour pouvoir faire un programme exécutable il faut


toujours une classe qui contienne une méthode
particulière, la méthode « main »
n 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[ ])


{
…/…
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 74


2012/2013 & 2021/2022
Exemple (1)
La classe est l’unité de
Fichier Bonjour.java base de nos programmes.
Le mot clé en Java pour
public class Bonjour définir une classe est :
class
{ //Accolade débutant la classe Bonjour
public static void main(String args[])
{ //Accolade débutant la méthode main
/* Pour l’instant juste une instruction */
System.out.println(“bonjour”);
} //Accolade fermant la méthode main
} //Accolade fermant la classe Bonjour

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 75


2012/2013 & 2021/2022
Exemple (2)
Fichier Bonjour.java Accolades délimitant le
début et la fin de la définition
de la class Bonjour
public class Bonjour
{
public static void main(String args[])
{
Accolades délimitant le début
System.out.println(“bonjour”); et la fin de la méthode main

}
} Les instructions se terminent
par des ;

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 76


2012/2013 & 2021/2022
Exemple (3)
Fichier Bonjour.java Une méthode peut recevoir
des paramètres. Ici la méthode
public class Bonjour main reçoit le paramètre args
qui est un tableau de chaîne
{ de caractères.

public static void main(String args[])


{
System.out.println(“bonjour”);
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 77


2012/2013 & 2021/2022
Fin de Deuxième Séance !...

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 78


2012/2013 & 2021/2022
Comment développer une application JAVA?

Deux façons d’écrire des programmes Java:


o En écrivant le code dans un simple éditeur de texte
n Compilation et exécution du code en ligne de commande DOS

o En utilisant un environnement de développement (IDE)


n Eclipse (https://www.eclipse.org )
n Netbeans (http://www.netbeans.com)
n Borland JBuilder (http://www.borland.com/jbuilder)
n IBM WebSphere Studio
(http://www.ibm.com/software/awdtools)
n Sun ONE Studio (http://wwws.sun.com/software/sundev)
n Microsoft .Net Studio (http://msdn.microsoft.com/vstudio)
n … Crimson Editor !!!!
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 79
2012/2013 & 2021/2022
Une première application
Application HelloWorld

o Créer un fichier texte : HelloWorld.java


o Règle de bonne pratique : 1 classe par fichier et 1 fichier par classe

public class HelloWorld La première ligne du programme doit être la


{ déclaration de la classe

public static void main (String[]args) Tout programme doit contenir une méthode
{ main qui porte la signature ci-contre
System.out.println("Hello the World");
Écrire à l’écran “Hello the World”
}
} Fermer les accolades

• Compiler le programme : javac HelloWorld.java


• Le compilateur génère le bytecode dans le fichier : HelloWorld.class
• Exécuter l’application : java HelloWorld
• « Hello the World » s’affiche à l’écran
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 80
2012/2013 & 2021/2022
Compilation et exécution (1)
Le nom du fichier est nécessairement
Fichier Bonjour.java celui de la classe avec l’extension
.java en plus. Java est sensible à la
casse des lettres.
Compilation en bytecode java dans
une console DOS:
javac Bonjour.java public class Bonjour
Génère un fichier Bonjour.class
Exécution du programme (toujours {
depuis la console DOS) sur la JVM :
java Bonjour public static void main(String[] args)
Affichage de « bonjour » dans la
console {
System.out.println(“bonjour”);
}
}
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 81
2012/2013 & 2021/2022
Compilation et exécution (1Bis)
o Compiler avec la commande :

javac Bonjour.java

è Remarquer qu’une classe « Bonjour.class » est générée

o Exécuter en lançant la machine virtuelle java (JVM) et en


lui spécifiant le point d'entrée

Java Bonjour

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 82


2012/2013 & 2021/2022
Compilation et exécution (2)
o Pour résumer, dans une console DOS, si j’ai un
fichier Bonjour.java pour la classe Bonjour :
n javac Bonjour.java
o Compilation en bytecode java
o Indication des erreurs de syntaxe éventuelles
o Génération d’un fichier Bonjour.class s’il n’y a pas d’erreurs !
n java Bonjour
o Java est la machine virtuelle
o Exécution du bytecode
o Nécessité de la méthode main, qui est le point d’entrée dans le
programme

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 83


2012/2013 & 2021/2022
Compilation et exécution (3)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger


2012/2013 & 2021/2022 84
Compilation et exécution (4)
o En utilisant un environnement de développement
(IDE) de JAVA, soit sur NetBeans ou Eclipse ou
autres,…, etc.

o Voir TP (soit sur NetBeans ou bien sur Eclipse…!)


(on va revoir cette partie avec plus de détails aux séances
des TPs…).

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 85


2012/2013 & 2021/2022
Compilation et exécution (5)
Outils de développement

o Pour développer un programme JAVA on utilise un IDE,

o Afin de pouvoir créer une application JAVA consistante, on a


besoin du JDK,

o Pour tester et lancer le code écrit, on doit, nécessairement,


disposer du JRE.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 86


2012/2013 & 2021/2022
Compilation et exécution (6)
Outils de développement (suite…)
JRE L’environnement qui permet d'exécuter les applications java,
(Java Runtime Il est constitué de la JVM en particulier (Java Virtual Machine).
Environment)

JDK Outils permettant de développer, compiler (javac), débuguer (jdb) et


exécuter un programme java (java).
(Java
Development Kit)
Il y a aussi des outils d'archivage (jar), de génération de documentation
(javadoc).

IDE Un programme regroupant un ensemble d'outils pour le développement


de logiciels ou des Applications.
(Integrated
Development
En général, un IDE regroupe un éditeur de texte, un compilateur, des
Environment)
outils automatiques de fabrication, et souvent un débogueur. (Exp:
Eclipse, NetBeans, …, etc.)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 87


2012/2013 & 2021/2022
Compilation et exécution (7)
Outils de développement (suite.)
o Installer le JDK sous Windows
n Télécharger et d'exécuter le programme "jdk-xux-windows-x64/32.exe"
depuis le site d’Oracle
( http://www.oracle.com/technetwork/java/javase/downloads/index.html)
n Ou bien directement (version en cours: sous Windows, Mac ou Linux):
https://www.oracle.com/java/technologies/downloads/#jdk17-windows
(version en cours !)
https://www.oracle.com/java/technologies/javase-jdk16-downloads.html
(ancienne version !)
• Paramétrer correctement la variable PATH (Variables
d’environnement )
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 88
2012/2013 & 2021/2022
Exécution en mode enivrement de développement (1)

Ø Le traitement et l’exécution des différents programmes Java seront effectués par le fameux
environnement de développement, qui est Eclipse.
Ø Donc, on va utiliser désormais la dernière version d’Eclipse (Eclipse IDE for Java
Developers), qu’on peut la télécharger de la page: http://www.eclipse.org/downloads
Ø Eclipse a besoin d'un JRE ou d'un JDK pour fonctionner. Donc, installer JDK au lieu d'un JRE
pour bénéficier de la Javadoc et du code source de l'API Java Standard. L’ancienne version de
la JDK 16 (Java SE 16, mis en œuvre en Avril 2019) est disponible, comme on a
mentionné précédemment, sur le site suivant:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Ou bien directement :
https://www.oracle.com/java/technologies/javase-jdk16-downloads.html

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 89


2012/2013 & 2021/2022
Exécution en mode enivrement de développement (2)
Ø Premier programme réalisée dans IDE Eclipse:
Lecture d’informations au clavier (1)

Ø Pour la saisie de données au clavier, on va utiliser la classe Scanner (java.util.Scanner) qui regroupe
plusieurs méthodes pratiques :
v nextInt(),
v nextDouble(),
v nextFloat(),
v nextLong(),
v nextLine(),
v …

Exemple:
public class AfficheEntier{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);//System.in: Entrée Standard
System.out.println("Entrer un entier:");
int a=sc.nextInt();
System.out.println(" le nombre entré est :" + a);
}}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 91


2012/2013 & 2021/2022
Lecture d’informations au clavier (2)

Noté bien: si vous avez invoqué nextInt(), nextDouble() et que vous invoquez
directement après nextLine(), celle-ci ne vous invite pas à saisir une chaîne de
caractères : elle vide la ligne commencée par les autres instructions. En effet, celles-ci
ne repositionnent pas la tête de lecture, l'instruction nextLine() le fait à leur place.
Exemple:
import java.util.Scanner;
public class Main1 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Saisissez un entier : ");
int i = sc.nextInt();
System.out.println("Saisissez une chaîne : ");
String str = sc.nextLine();
System.out.println("FIN ! ");
}}
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 92
2012/2013 & 2021/2022
Lecture d’informations au clavier (3)

Le programme précédent ne vous demande pas de saisir une chaîne et affiche


directement « Fin ». Pour pallier ce problème, on procède de la manière suivante:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Saisissez un entier : ");
int i = sc.nextInt();
System.out.println("Saisissez une chaîne : ");
//On vide la ligne avant de lire une autre
sc.nextLine();
String str = sc.nextLine();
System.out.println("FIN ! ");
} }
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 93
2012/2013 & 2021/2022
Lecture d’informations au clavier (4)

En résumé

o L’affichage des données se fait par System.out.println().

• La lecture des entrées clavier se fait via l'objet de la classe Scanner.

• Ce dernier se trouve dans le package java.util que vous devez importer.

• Pour pouvoir récupérer ce que vous allez taper dans la console, vous devrez
initialiser l'objet de la classe Scanner avec l'entrée standard, System.in.

ü Il y a une méthode de récupération de données pour chaque type (sauf les char) :
nextLine() pour les String,
nextInt() pour les int ...

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 94


2012/2013 & 2021/2022
Quelques remarques sur la classe
Scanner
o C’est une classe utilisée pour «balayage» des types primitifs et les
chaines de caractères.

o Il peut être utilisé pour obtenir l'apport d'un InputStream, pour analyser
à travers une chaîne de texte ou de lire un fichier.

o C’est une classe qui s'interface parfaitement avec des flux de lecture
pour y permettre une lecture puissante et pratique

o Elle a fait son apparition dans le package java.util dans la version 1.5.0
de java

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 95


2012/2013 & 2021/2022
Un petit Programme utilisant la classe
Scanner
import java.util.Scanner;
public class Addition
{
public static void main( String args[] )
{
Scanner input = new Scanner( System.in );
int n1, n2, somme;
System.out.print(" Donner le premier entier: " );
n1 = input.nextInt();
System.out.print(" Donner un deuxième entier: " );
n2 = input.nextInt();
somme = n1 + n2;
System.out.printf( "Somme est %d\n", somme ); } }

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 96


2012/2013 & 2021/2022
Les Identificateurs (1)
q Nommer les classes, les variables, les méthodes, ...
q Un identificateur Java
ü est de longueur quelconque
ü commence par une lettre Unicode
ü peut ensuite contenir des lettres ou des chiffres ou le caractère souligné «_ »
ü ne doit pas être un mot réservé du langage (mot clé) (if, for, true, … )

q les caractères suivants sont autorisés pour construire un


identificateur Java : "$" , "_" , "μ" et les lettres accentuées.

[a..z, A..Z, $, _, μ ]{a..z, A..Z, $, _, μ, 0..9, Unicode}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 97


2012/2013 & 2021/2022
Identificateurs (1Bis)

o On a besoin de nommer les classes, les variables, les


constantes, etc. ; on parle d’identificateur.
o Les identificateurs commencent par: une lettre, _ ou $
Attention : Java distingue les majuscules des minuscules

o Conventions sur les identificateurs :


n La première lettre est majuscule pour les classes et les interfaces
o exemples : MaClasse, UneJolieFenetre

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 98


2012/2013 & 2021/2022
Identificateurs (2)
o Conventions sur les identificateurs :
n La première lettre est minuscule pour les
méthodes, les attributs et les variables.
o exemples : setLongueur, i, uneFenetre
n Si plusieurs mots sont accolés, mettre une majuscule à
chacun des mots sauf le premier.
o exemple :
uneVariableEntiere
n Les constantes sont entièrement en majuscules
o exemple : LONGUEUR_MAX

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 99


2012/2013 & 2021/2022
Identificateurs (3)
Les règles de Nommage
Classe :
ü 1ère lettre en majuscule
ü Mélange de minuscule, majuscule avec la première lettre de chaque
mot en majuscule
ü Donner des noms simples et descriptifs

Packages
ü Tout en minuscule.
ü Utiliser seulement [a-z], [0-9] et le point '.': Ne pas utiliser de tiret '-',
d'underscore '_', d'espace, ou d'autres caractères ($, *, accents, ...).

Constante:
ü Les constantes sont en majuscules et les mots sont séparés par
le caractère souligné « _ »: UNE_CONSTANTE

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 100


2012/2013 & 2021/2022
Identificateurs (3Bis)

Convention de codage
Ø Un nom de classe ou interface doit commencer par une majuscule.

ü Ex: classe Point

Ø Un nom d’attribut doit commencer par une minuscule.

ü Ex: loopCounter
üa
Ø Une constante s’écrit en majuscules.

ü Ex: PI

Ø JAVA est sensible à la casse, fait la différence entre les Majuscules


et les Minuscules.
Ø Ne pas utilisé les noms réservés comme noms de variables ou
noms de classes.
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 101
2012/2013 & 2021/2022
Les mots réservés de Java
abstract default goto null synchronized

boolean do if package this

break double implements private throw

byte else import protected throws

case extends instanceof public transient

catch false int return true

char final interface short try

class finally long static void

continue float native super volatile

const for new switch while

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 102


2012/2013 & 2021/2022
Types de données en Java

Ø On distingue entre 2 grands groupes de types de données:

q Types primitifs (Les types de bases);


q Objets (instances de classe).

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 103


2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 104
2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 105
2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 106
2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 107
2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 108
2012/2013 & 2021/2022
Les types de bases (1)

o En Java, tout est objet sauf les types de base ou les types primitifs.
o Il y a huit types de base :
n un type booléen pour représenter les variables ne pouvant prendre que 2 valeurs (vrai et faux,
0 ou 1, etc.) : boolean avec les valeurs associées true et false
n un type pour représenter les caractères : char
n quatre types pour représenter les entiers de divers taille : byte, short, int et long
n deux types pour représenter les réelles : float et double
o La taille nécessaire au stockage de ces types est indépendante de la machine.
n Avantage : portabilité
n Inconvénient : "conversions" coûteuses

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 109


2012/2013 & 2021/2022
Les types de bases (1Bis)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 110


2012/2013 & 2021/2022
Les types de bases (2) : les entiers

o Les entiers (avec signe)


n byte : codé sur 8 bits, peuvent représenter des entiers
allant de -27 à 27 –1 (-128 à +127) (ou allant de -2(n-1) à…)
n short : codé sur 16 bits, peuvent représenter des entiers
allant de -215 à 215 –1
n int : codé sur 32 bits, peuvent représenter des entiers
allant de -231 à 231 –1
n long : codé sur 64 bits, peuvent représenter des entiers
allant de -263 à 263 –1

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 111


2012/2013 & 2021/2022
Les types de bases (3) : les entiers
o Notation
n 2 entier normal en base décimal
n 2L entier au format long en base décimal
n 010 entier en valeur octale (base 8)
n 0xF entier en valeur hexadécimale (base 16)
o Opérations sur les entiers
n opérateurs arithmétiques +, -, *
n / :division entière si les 2 arguments sont des
entiers
n % : reste de la division entière
o exemples :
n 15 / 4 donne 3
n 15 % 2 donne 1
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 112
2012/2013 & 2021/2022
Les types de bases (4) : les entiers
o Opérations sur les entiers (suite)
n les opérateurs d’incrémentation ++ et de décrémentation et --
o ajoute ou retranche 1 à une variable
int n = 12; n ++; //Maintenant n vaut 13
o n++; « équivalent à » n = n+1;
n--; « équivalent à » n = n-1;
o 8++; est une instruction illégale
o peut s’utiliser de manière suffixée : ++n.
La différence avec la version préfixée se voit quand on les utilisent
dans les expressions.
En version suffixée la (dé/inc)rémentation s’effectue en premier
int m=7; int n=7;
int a=2 * ++m; //a vaut 16, m vaut 8
int b=2 * n++; //b vaut 14, n vaut 8

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 113


2012/2013 & 2021/2022
Les types de bases (5) : les réels

o Les réels
n float : codé sur 32 bits, peuvent représenter des nombres
allant de -1035 à + 1035 (Norme IEEE 754-1985)
n double : codé sur 64 bits, peuvent représenter des
nombres allant de -10400 à +10400 (Norme IEEE 754-1985)
o Notation
n 4.55 ou 4.55D réel double précision
n 4.55f réel simple précision

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 114


2012/2013 & 2021/2022
Les types de bases (6) : les réels
o Les opérateurs
n opérateurs classiques: +, -, *, /
n attention pour la division :
n 15 / 4 donne 3 division entière
n 15 % 2 donne 1
n 11.0 / 4 donne 2.75
(si l’un des termes de la division est un réel, la division
retournera un réel).
n puissance : utilisation de la méthode pow de la classe Math.
n double y = Math.pow(x, a); équivalent à x^a, x et a étant
de type double

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 115


2012/2013 & 2021/2022
Les types de bases (7) : les booléens

o Les booléens
o boolean
contient soit vrai (true) soit faux (false)
o Les opérateurs logiques de comparaisons
o Egalité : opérateur ==
o Différence : opérateur !=
o supérieur et inférieur strictement à : opérateurs > et <
o supérieur et inférieur ou égal :
opérateurs >= et <=

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 116


2012/2013 & 2021/2022
Les types de bases (8) : les booléens
o Notation
boolean x;
x= true;
x= false;
x= (5==5); // l ’expression (5==5) est évaluée et la
valeur est affectée à x qui vaut alors vrai
x= (5!=4); // x vaut vrai, ici on obtient vrai si 5 est différent de 4
x= (5>5); // x vaut faux, 5 n'est pas supérieur strictement à 5
x= (5<=5); // x vaut vrai, 5 est bien inférieur ou égal à 5

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 117


2012/2013 & 2021/2022
Les types de bases (9) : les booléens
o Les autres opérateurs logiques
n et logique : &&
n ou logique : ||
n non logique : !
n Exemples : si a et b sont 2 variables booléennes
boolean a, b, c;
a= true;
b= false;
c= (a && b); // c vaut false
c= (a || b); // c vaut true
c= !(a && b); // c vaut true
c=!a; // c vaut false

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 118


2012/2013 & 2021/2022
Les types de bases (10) : les caractères
o Les caractères
n char : contient une seule lettre, à l’écrire entre apostrophe
n le type char désigne des caractères en représentation Unicode
o Codage sur 2 octets contrairement à ASCII/ANSI codé sur
1 octet. Le codage ASCII/ANSI est un sous-ensemble
d’Unicode
o Notation hexadécimale des caractères Unicode de
‘ \u0000 ’ à ‘ \uFFFF ’.
o Pour plus d’information sur Unicode, voir: www.unicode.org

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 119


2012/2013 & 2021/2022
Les types de bases (11): les caractères

oNotation
char a,b,c; // a,b et c sont des variables du type char
a='a'; // a contient la lettre 'a'
b= '\u0022' // b contient le caractère guillemet : "
c=97; // x contient le caractère de rang (ou de
valeur interne) 97 : 'a'

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 120


2012/2013 & 2021/2022
Les types de bases (12)
exemple et remarque
int x = 0, y = 0;
float z = 3.1415F;
double w = 3.1415;
long t = 99L;
boolean test = true;
char c = 'a';

o Remarque importante :
n Java exige que toutes les variables soient définies
et initialisées. Le compilateur sait déterminer si
une variable est susceptible d'être utilisée avant
initialisation et produit une erreur de compilation!.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 121


2012/2013 & 2021/2022
Portée d’une variable

ØLa portée d’une variable s’étend jusqu’à la fin du bloc dans lequel elle est définie.

{
{
int compteur;

// compteur est accessible dans ce bloc
}

// compteur n’est plus accessible


}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 122


2012/2013 & 2021/2022
Les types de bases (13)
Remarques

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 123


2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 124
2012/2013 & 2021/2022
Conversion de types (transtypage ou casting)

o La conversion de type ( « cast » ) est une


technique fondamentale de la programmation :
n Pour convertir un type en un autre on respecte la syntaxe
suivante :
( type de convervion ) type_a_convertir

implicites è pas de perte d’information

explicites è passage d’un type donné vers un autre moins précis

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 125


2012/2013 & 2021/2022
Conversion de types (Des Exemples)

n conversion implicite: une conversion implicite consiste


en une modification du type de donnée effectuée
automatiquement par le compilateur.
int x;
x = 8.324;
x contiendra après affectation la valeur 8

n conversion explicite: (opération de cast) consiste en


une modification du type de donnée forcée.
int x;
x = (int) 8.324;
x contiendra après affectation la valeur 8

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 126


2012/2013 & 2021/2022
Les types primitifs (Casting ou Transtypage)

o boolean(true/false), byte (1 octet), char (2 octets), short (2


octets), int (4 octets), long (8 octets), float (4 octets), double (8
octets).
o Les variables peuvent être déclarées n'importe où dans un bloc.
o Conversions de type:
n Les cas de conversion permis (implicites) :
o byte --> short --> int --> long --> float --> double
n Les affectations non implicites doivent être castées (sinon
erreur à la compilation).
o Opérateur de cast : (type) un par type
Exemples (conversion forcée par une affectation):

int i = 258;
long l = i; // ok, i est une variable entère
byte b = i; // error : Explicit cast needed to convert int to byte
byte b = 258; // error : Explicit cast needed to convert int to byte
byte b = (byte) i; // ok, utilisation de l'opérateur de cast (perte d'info)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 127


2012/2013 & 2021/2022
Les conversions de types (Suite…)
Lors de la déclaration, il est possible d'utiliser un cast :
Exemple :
int entier = 5; float flottant = (float) entier;
La conversion peut entrainer une perte d'informations.
Il n'existe pas en Java de fonction pour convertir : les conversions de type
se font par des méthodes. La bibliothèque de classes API fournit une série
de classes qui contiennent des méthodes de manipulation et de conversion
de types élémentaires.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 128


2012/2013 & 2021/2022
Les conversions de types (suite…)

Les classes portent le même nom que le type élémentaire sur lequel elles
reposent avec la première lettre en majuscule.

Ces classes contiennent généralement plusieurs constructeurs. Pour y


accéder, il faut les instancier puisque ce sont des objets.
Exemple :
String montexte;
montexte = new String("test");
L'objet montexte permet d'accéder aux méthodes de la classe
java.lang.String
q La conversion d'un entier int en chaîne de caractères String
Exemple :
int i = 10; String montexte = new String();
montexte =montexte.valueOf(i);
valueOf est également définie pour des arguments de type boolean,
long, float, double et char.
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 129
2012/2013 & 2021/2022
Les conversions de types (suite…)

q La conversion d'une chaîne de caractères String en entier int

Exemple :
String montexte = new String(" 10 ");
Integer monnombre=new Integer(montexte);
int i = monnombre.intValue(); //conversion d'Integer en int

q La conversion d'un entier int en entier long

Exemple :
int i=10;
Integer monnombre=new Integer(i);
long j=monnombre.longValue();

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 130


2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 131
2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 132
2012/2013 & 2021/2022
Opérateurs relationnelles (suite…)

- 133 -
Opérateurs logiques (Suite…)

Court-circuit

Court-circuit

- 134 -
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 135
2012/2013 & 2021/2022
Opérateur Conditionnel

(Condition) ? <expression1> : <expression2>

a = ( a < b ) ? a + b : a - b;

équivaut à
if ( a < b )
a = a + b;
else
a = a - b;

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 136


2012/2013 & 2021/2022
Tester l’équivalence des objets

♦ L'expression System.out.println(n1 == n2) imprimera le résultat de la comparaison de type


booléen. Il semble à priori évident que la sortie sera true puis false, puisque les deux objets
de type Integer sont identiques. Mais, bien que le contenu des objets soit le même, les
références sont différentes, et il se trouve que les opérateurs == et != comparent des
références d'objet. En réalité la sortie sera false puis true.

♦ Il faut utiliser la méthode spéciale equals( ) (System.out.println(n1.equals(n2)) qui existe pour


tous les objets (mais non pour les types primitifs, qui s'accommodent mieux avec == et !=)

- 137 -
Syntaxe du Langage JAVA
(Quelques Compléments)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 138


2012/2013 & 2021/2022
Les types de données en Java

En Java, il existe deux catégories de types de données :


les types primitifs et les types références
(en Java, les objets sont manipulés par référence).

Les types primitifs


Il existe huit types primitifs prédéfinis en Java :
− Six types numérique : quatre types d’entiers signés (byte, short, int et
long) et deux types réels à virgule flottante (float et double) ;
− Le type caractère char utilisé pour représenter des caractères Unicode ;
− Le type boolean : représente les valeurs booléennes false et true.

@ Prof. E. M. EN-NAIMI
Dépt. G. Informatique / FST de Tanger
139
2012/2013 & 2021/2022
Types primitifs de Java

Ne sont pas des objets !!!


Occupent une place fixe en mémoire réservée à la déclaration
Types primitifs :

Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long (8 octets)


float (4 octets) - double (8 octets)
Booléens : boolean (true ou false)
Caractères : char (codage Unicode sur 16 bits)
Les types références

les objets utilisés dans un programme ne sont pas manipulés directement,


en effet, on ne peut manipuler que des références à ces objets.

ØIl y a trois catégories de types références : les classes, les interfaces et


les tableaux.
ØUn objet est soit une instance de classe, soit un tableau (qui est en fait
une instance de la classe Array qui se trouve dans le package
java.lang.reflect).
ØLes interfaces ne peuvent pas être instanciées, ce qui signifie qu’il est
possible d’avoir une référence de type interface mais pas d’objets de type
interface.
Les déclarations de variables

Les déclarations de variables se présentent de la manière suivante :


Type var1[=val1] , var2[=val2] ;

Où Type est un type de données et var1, var2, … sont des identificateurs de variables
avec, facultativement, des valeurs d'initialisation.
Le type de données peut être :
q Un des types primitifs ;
q Le nom d’une classe ou d’une interface ;
q Un tableau.

Exemples : int x, y = 2, z;
float eps = 1.0e-5;

@ Prof. E. M. EN-NAIMI
Dépt. G. Informatique / FST de Tanger
142
2012/2013 & 2021/2022
Initialisation et constantes

Initialisation
Une variable peut recevoir une valeur initiale au moment de sa déclaration :
int n = 15;
boolean b = true; Penser à l’initialisation au risque
d’une erreur de compilation
Cette instruction joue le même rôle : int n;
System.out.println(" n = " + n);
int n;
n = 15;

Constantes
Ce sont des variables dont la valeur ne peut affectée qu'une fois
Elles ne peuvent plus être modifiées
Elles sont définies avec le mot clé final
final int n = 5;
final int t;
...
t = 8;
n = 10; // erreur : n est déclaré final
Les opérateurs d'affectation
ØL’opérateur « = » permet d’affecter la valeur de l’expression qui est à
droite à la variable qui est à gauche
ØLa syntaxe de l'opérateur d'affectation = est :
var1 = var2 = F = var3 = var4 = expr;
Cette instruction est équivalente à : class Test {
int calculer () {
var4 = expr;
int i = 0;
var3 = var4; int j = 6;
i = (j + 5) * 3;
…..
return i + j;
var1 = var2; }
}

ØLes opérateurs d'affectation s'écrivent sous la forme op=, où op correspond


à l'un des opérateurs suivants : +, -, *, /, %, &, ^, |, <<, >>, >>>.
ØSi var et expr désignent respectivement l'identificateur d'une variable et
une expression, alors :
var op= expr; ⇔ var = (var) op (expr);
Les opérateurs arithmétiques
ØLes opérateurs arithmétiques en Java sont +, - , * , / , % (modulo) , += , -= , *= , /=
ØS’appliquent sur les types entiers ou réels

int x, y, z;
y = 2;
z = 3;

x = y * z ; //x vaut 6
x += 2 ; //x vaut 8
y = x / 4 ; //y vaut 2
y =x % 2 ; //y vaut 0

ØLes opérateur = et += peuvent être utilisés sur des variables de type « String »

Ø Les opérateurs arithmétiques s'évaluent de la gauche vers la droite.

Ø*, /, % ont la même priorité, et ils sont plus prioritaires que + et -.

ØModulo : ou reste de la division entière, cet opérateur ne s'applique pas aux types
réels).
Les opérateurs de comparaison

S’appliquent sur des entiers, booléens, réels


==, !=, <=, >, >=
Ces opérateurs retournent une valeur du type boolean

{
boolean droitDeVote;
int age;

droitDeVote = (age >= 18) ;


}

Ø− >, >=, <, <= ont la même priorité et sont plus prioritaires que == et !=.
ØLes opérateurs de comparaison sont moins prioritaires que les opérateurs
arithmétiques. Ils sont plus prioritaires que les opérateurs logiques.
Les opérateurs logiques
ØLes opérateurs logiques en Java sont : && ou & (et), || ou | (ou), ˆ (ou
exclusif) et ! (non).

ØRetournent un type boolean

Ø& renvoie « true » si les deux expressions renvoient « true »

Ø&& a le même comportement mais n’évalue pas le seconde expression si la première


est « false »
ØLes opérateurs &&, || et ! doivent avoir des opérandes de type boolean.
ØPar contre, les opérateurs &, | et ^ peuvent s’appliquer à des opérandes de
type boolean ou à des opérandes de type entier.
ØLes opérateurs logiques s'évaluent de la gauche vers la droite, leur ordre de
priorité décroissant est le suivant : !, &, ^, |, && et ||.
ØUne expression logique vaut true si la relation est vraie, et false si elle est
fausse.
Les opérateurs logiques

Ce type d'opérateur permet de vérifier si plusieurs conditions sont vraies :

Opérateur Dénomination Effet Syntaxe

Retourne true si au moins


condition1 ||
|| OU logique une des deux conditions
condition2
vaut true (ou false sinon)

Retourne true si les deux


condition1 &&
&& ET logique conditions valent true (ou
condition2
false sinon)

Retourne true si la variable


! NON logique vaut false, et false si elle ! condition
vaut true)
OU logique false si a et b sont égaux a^b
^
(exclusif) true sinon

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 148


2012/2013 & 2021/2022
Les opérateurs d'incrémentation et de
décrémentation
ØLes opérateurs d’incrémentation et de décrémentation peuvent être appliqués à
tous les types primitifs numériques et caractère, sauf les booléens.
ØL'opérateur ++ incrémente (ajoute 1 à) son opérande.
ØL'opérateur -- décrémente (soustrait 1 de) son opérande.
ØLes opérateurs ++ et – ne peuvent être appliqués qu'à des variables, et non pas à
des expressions.
ØCes opérateurs peuvent être utilisés sous forme :
1. préfixée : avant la variable : ++n (pré-incrémentation), --n (pré-décrémentation).
2. ou postfixée : après la variable : n++ (post-incrémentation), n— (post-
décrémentation) Exemple :
int a, b, n = 1;
++n; // Incrémente n : n = 2.
n++; // Incrémente n : n = 3.
a = ++n; // a = 4 et n = 4. équivalent à ++n; a = n;
b = n++; // b = 4 et n = 5. équivalent à b = n ; ++n;
Syntaxe du Langage JAVA
(Quelques Compléments)
FIN de Compléments.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger


2012/2013 & 2021/2022 150
Chapitre 4:

Les Structures de Contrôles

@ Prof. E. M. EN-NAIMI
Dépt. G. Informatique / FST de Tanger
151
2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 152
2012/2013 & 2021/2022
Les structures de contrôles (1)

o Les structures de contrôle classiques


existent en Java :
n if, else
n while
n do… while
n for
n switch, case, default, break, continue

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 153


2012/2013 & 2021/2022
Les structures de contrôles (2) :
if / else

o Instructions conditionnelles
n 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}
condition doit être un booléen ou renvoyer une valeur booléenne
n 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}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 154


2012/2013 & 2021/2022
Les structures de contrôles (3) :
if / else
Max.java

import java.io.*;

public class Max


{
public static void main(String args[])
{
Console console = System.console();
int nb1 = Integer.parseInt(console.readLine("Entrer un entier:"));
int nb2 = Integer.parseInt(console.readLine("Entrer un autre entier:"));
if (nb1 > nb2)
System.out.println("l'entier le plus grand est "+ nb1);
else
System.out.println("l'entier le plus grand est "+ nb2);
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 155


2012/2013 & 2021/2022
Exercice d’application (TP1_Ex1)

Il s’agit d’un programme de facturation avec remise. Il lit en donnée un simple


prix hors taxes, en DH, et calcule le prix TTC, en DH, correspondant (avec un taux
de TVA constant de 18,6%). Il établit ensuite une remise dont le taux dépend de
la valeur ainsi obtenue, à savoir :
• 0 % pour un montant inférieur à 1 000 DH,
• 1 % pour un montant supérieur ou égal à 1 000 DH et inférieur à 2 000 DH,
• 3 % pour un montant supérieur ou égal à 2 000 DH et inférieur à 5 000 DH,
• 5 % pour un montant supérieur ou égal à 5 000 DH.
Ce programme est accompagné de deux exemples d’exécution.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 156


2012/2013 & 2021/2022
Les structures de contrôles (4) :
while
o Boucles indéterminées
n On veut répéter une ou plusieurs instructions un nombre
indéterminés de fois : on répète l’exécution d’instruction
ou le bloc d’instruction tant qu’une certaine condition reste
vraie.
n nous avons en Java une première boucle while (tant que)
o while (condition) {bloc d’instructions}
o les instructions dans le bloc sont répétées tant que la
condition reste vraie.
o On ne rentre jamais dans la boucle (c’est-à-dire: on
n’exécutera plus les instructions de bloc!) si la
condition est fausse dès le départ!

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 157


2012/2013 & 2021/2022
Les structures de contrôles (5) :
do…while

o Boucles indéterminées
n un autre type de boucle avec le do…while:
o do {bloc d’instructions} while (condition) ;
o L’exécution des instructions dans le bloc sont répétées
tant que la condition reste vraie.
o On rentre toujours au moins une fois dans la boucle : la
condition est testée en fin de boucle.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 158


2012/2013 & 2021/2022
Les structures de contrôles (6) :
while
Facto1.java

import java.io.*;

public class Facto1


{
public static void main(String args[])
{
int n, result,i;
n = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:"));
result = 1; i = n;
while (i > 1)
{
result = result * i;
i--;
}
System.out.println("la factorielle de "+n+" vaut "+result);
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 159


2012/2013 & 2021/2022
Les structures de contrôles (7) :
for

o Boucles déterminées
n On veut répéter une ou plusieurs instructions un nombre
déterminés de fois : on répète l’instruction ou le bloc
d’instructions pour un certain nombre de pas.
n La boucle for
for (int i = 1; i <= 10; i++)
System.out.println(i); //affichage des nombres de 1 à 10
n une boucle for est en fait équivalente à une boucle while
for (instruction1; expression1; expression2) {bloc}
… est équivalent à …
instruction 1; while (expression1) {bloc; expression2}}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 160


2012/2013 & 2021/2022
Les structures de contrôles (8) :
for
Facto2.java

import java.io.*;

public class Facto2


{
public static void main(String args[])
{
int n, result, i;
n = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:"));
result = 1;
for(i =n; i > 1; i--)
{
result = result * i;
}
System.out.println("la factorielle de "+n+" vaut "+result);
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 161


2012/2013 & 2021/2022
Exercice d’application (TP1_Ex2:suite…)

Ecrire un programme, qui permet de calculer


la somme des entier de 1 à 10, en utilisant:
i) La boucle for;
ii) La boucle do…while;
iii) La boucle while ?

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 162


2012/2013 & 2021/2022
Les structures de contrôles (9) :
switch

o Sélection multiples
n l’utilisation de if / else peut s’avérer lourde quand on doit
traiter plusieurs sélections et de multiples alternatives;
n pour cela existe en Java le switch / case assez identique
à celui de C/C++ ;
n La valeur sur laquelle on fait le test doit être un char ou
un entier (à l’exclusion d’un long);
n 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.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 163


2012/2013 & 2021/2022
Les structures de contrôles (10) :
switch
Alternative.java

import java.io.*; Variable contenant la valeur


que l’on veut tester.
public class Alternative
{
Première alternative :
public static void main(String args[])
{ on affiche Un et on sort
duvaleur
int nb = Integer.parseInt(System.console().readLine("Entrer une bloc pour
du switch
n:")); au break;
switch(nb)
{
case 1:
System.out.println("Un"); break; Deuxième alternative :
case 2: on affiche Deux et on sort
System.out.println("Deux"); break; du bloc du switch au break;
default:
System.out.println("Autre nombre"); break; Alternative par défaut:
}
on réalise une action
}
} par défaut.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 164


2012/2013 & 2021/2022
Les structures de contrôles (11) :
break/continue
o BREAK / CONTINUE

o BREAK: achève immédiatement la boucle


o CONTINUE: ignore le reste des instructions de l’itération en cours et
recommence au début de la boucle:

for (int i=0; i<10 ;i++){


if (i==5) continue; // Si i=5, on recommence au début
if (i==7) break; /* Si i=7, on sort de la boucle et
les instructions suivantes, après
cette boucle, seront exécutées */
System.out.println("The value of i is : " + i);
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 165


2012/2013 & 2021/2022
Les structures de contrôles (12) :
break/continue (Label)
o BREAK [LABEL]
o CONTINUE [LABEL]
repet : while (...)
{ .....
for (...)
{ .....
continue repet ; // ce continue nous fait poursuivre la boucle while
.....
}
.....
} // <-- ici
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 166
2012/2013 & 2021/2022
Utilisation d’étiquette (label) avec continue (12Bis)

Label

Si la condition if est true,


le flux de contrôle passera directement à la
condition while à la fin du block étiqueté

- 167 -
Utilisation d’étiquette (label) avec break (13)

♦ Une étiquette est un identificateur suivi du caractère deux points, comme ceci :
label1:
En Java, une étiquette ne peut se trouver qu'en un unique endroit : juste avant une
instruction d'itération

Label

Si la condition if est true,


l’instruction break est exécutée
et le flux d’exécution quitte le
block sous le label outer

- 168 -
Les structures de contrôles (14) :
break/continue (Label)
o BREAK [LABEL]
o CONTINUE [LABEL]
test:
for (int i=0 ; i<10 ; i++) {
for(int j=20;j>4;j--){
if (i==5) continue; /* if i=5, vous sautez la suite et recommencer
au début de la boucle courante*/
if (i==7) break test; // if i=7, vous sautez hors de la boucle et continuez
System.out.println("The value of i,j is :"+i+ ", "+j);
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 169


2012/2013 & 2021/2022
Les Blocs Labelisés (Suite.)
un: while ( ...) {
... !"#$"%&'()$'*+'#$",-.$"'
/0)1*"'23-*"
deux: for(...) {
...
trois: while (...) {
4)-55"'*+'/0)1*"'60$'
!"#$"%&'()$' ...
&")7-.,"'/0)1*"' if (...) continue un;
23-*" 8trois9'
if (...) break deux;
continue;
}
}
}
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 170
2012/2013 & 2021/2022
Exercice : Création des comptes bancaires (TP1_Ex3: suite…)

■ Ecrire un programme qui permet de créer


des comptes bancaires pour des clients
■ Le programme permet de faire un versement
pour le compte d’un client
■ Le programme permet de faire un débit pour
le compte de chaque client
■ Le programme permet d’afficher l’état de
compte de client

- 171 -
Chapitre 5:

Tableaux & Chaînes de


Caractères

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 172


2012/2013 & 2021/2022
Les tableaux (1)
o Les tableaux permettent de stocker plusieurs valeurs de même
type dans une variable.
n Les valeurs contenues dans la variable sont repérées par un indice
n En langage java, les tableaux sont des objets
o Déclaration
n int tab [ ]; // ou bien: int [ ] tab;
String chaines [ ]; // ou bien: String [ ] chaines;
o Création d'un tableau
o tab = new int [20]; // ou bien: tab = new [20] int; tableau de 20 int
o chaines = new String [100]; // chaines = new [ 100] String; tableau de 100 chaines

q Remarque:
Un tableau est considéré comme un objet. Il est manipulé via une référence.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 173


2012/2013 & 2021/2022
Les tableaux (2)
o Le nombre d'éléments du tableau est mémorisé (Mot clé length).
Java peut ainsi détecter à l'exécution le dépassement d'indice et générer une
exception.
n Il est récupérable par nomTableau.length
int taille = tab.length; //taille vaut 20

o 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.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 174


2012/2013 & 2021/2022
Les tableaux (3)
o Initialisation
tab[0]=1;
tab[1]=2; //etc.
noms[0] = new String( "Boule");
noms[1] = new String( "Bill");//etc
o Création et initialisation simultanées
String noms [ ] = {"Boule","Bill"};
Point pts[ ] = { new Point (0, 0), new Point (10, -1)};

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 175


2012/2013 & 2021/2022
Les tableaux (4)
(Exemples)
Tab1.java

public class Tab1


{
public static void main (String args[])
{ Pour déclarer une variable tableau
int tab[ ] ; on indique le type des éléments du
tab = new int [4]; tableau et le nom de la variable
tab[0]=5; tableau suivi de [ ]
tab[1]=3;
tab[2]=7;
tab[3]=tab[0]+tab[1]; on utilise new <type> [taille]; pour
} Créer/(initialiser!) le tableau
}
On peut ensuite affecter des
valeurs au différentes cases du
Les indices vont toujours de 0 tableau :
à (taille-1) <nom_tableau>[indice]

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 176


2012/2013 & 2021/2022
Les tableaux (5)
(Exemples)
Tab1.java Mémoire
public class Tab1
{
public static void main (String args[])
{
int tab[ ] ; 0x258
0x0000
tab = new int[4];
tab[0]=5; 0
tab[1]=3; 0
tab[2]=7; 0
tab[3]=tab[0]+tab[1]; 0
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 177


2012/2013 & 2021/2022
Les tableaux (6)
(Exemples)
Tab1.java
Mémoire
public class Tab1
{
public static void main (String args[])
{ 0x258
int tab[ ] ;
tab = new int[4];
tab[0]=5; 5
0
tab[1]=3; 0
3
tab[2]=7; 0
7
tab[3]=tab[0]+tab[1]; 0
8
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 178


2012/2013 & 2021/2022
Les tableaux (7)
(Exemples)
Tab2.java Mémoire
public class Tab2
{
0x0258
public static void main (String args[])
{
String tab[ ] ; 0x0106
tab = new String[4]; 0x0116
tab[0]=new String( "Mohamed"); 0x0126
tab[1]=new String("Ahmed"); 0x0136
tab[2]=new String( "Hafsa");
tab[3]=new String("Tasnime");
}
"Pierre"
}
"Paul"
"Jacques"
"Philippe"

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 179


2012/2013 & 2021/2022
Utilisation d’un tableau
(Exercice d’application: TP_Ex4)
Accès individuelle à chaque élément du tableau

o Exercice d’application (TP1_Ex4: Suite…) :

Ecrire un petit programme en Java qui utilise un tableau de réels


pour déterminer le nombre d’étudiants d’une classe ayant une note
supérieure à la moyenne de la classe.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 180


2012/2013 & 2021/2022
Exercice d’application: TP1_Ex5

Exercice:
Donner un programme Java qui lit un tableau à partir du clavier
puis affiche son maximum.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 181


2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 182
2012/2013 & 2021/2022
Tableaux à plusieurs dimensions

Java ne supporte pas directement les tableaux à plusieurs dimensions :


il faut déclarer un tableau des tableaux !...

Exemple :
float tableau[][] = new float[10][10];
La taille des tableaux de la seconde dimension peut ne pas être identique pour
chaque occurrence.
Exemple :
int dim1[][] = new int[3][];
dim1[0] = new int[4];
dim1[1] = new int[9];
dim1[2] = new int[2];
Chaque élément du tableau est initialisé selon son type par l'instruction new : 0 pour
les numériques, '\0' pour les caractères, false pour les booléens et null pour les
chaines de caractères et les autres objets.

q Remarque:
Tous les accès aux tableaux sont contrôlés. Une erreur (Exception) de type :
ArrayIndexOutOfBoundsException est générée en cas de débordement.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 183


2012/2013 & 2021/2022
Tableaux à plusieurs dimensions (suite…)
En Java, les tableaux à plusieurs dimensions sont en fait des tableaux de tableaux.
Exemple, pour allouer une matrice de 5 lignes et de 6 colonnes :
int[][] matrice=new int[5][];
for (int i=0 ; i<matrice.length; i++) matrice[i]=new int[6];

Java permet de résumer l'opération précédente en :


int[][] matrice=new int[5][6];
La première version montre qu'il est possible de créer un tableau de tableaux n'ayant pas forcément tous la
même taille !.
On peut également remplir le tableau à la déclaration et laisser le compilateur déterminer les tailles des
tableaux, en imbriquant les accolades :
int[][] matrice =
{ { 0, 1, 4, 3 } , // tableau [0] de int
{ 5, 7, 9, 11, 13, 15, 17 } // tableau [1] de int
};
Pour déterminer la longueur des tableaux, on utilise également l'attribut length :
matrice.length // 2
matrice[0].length // 4
matrice[1].length // 7
De la même manière que précédemment, on peut facilement parcourir tous les éléments d'un tableau :
int i, j; for(i=0; i<matrice.length; i++) {
for(j=0; j<matrice[i].length; j++) {
//Action sur matrice[i][j]
}
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 184


2012/2013 & 2021/2022
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 185
2012/2013 & 2021/2022
Remarque: Essayer de compléter cet exercice chez vous, comme il est visualisé sur la figure ci-dessus
(TP1_EX6: Suite .)?
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 186
2012/2013 & 2021/2022
Exercices d’Application (Résumé)
(Série: TD/TP_1&2)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 187


2012/2013 & 2021/2022
Exercice d’application (TD/TP1&2_EX1)

Il s’agit d’un programme de facturation avec remise. Il lit en donnée un simple


prix hors taxes, en DH, et calcule le prix TTC, en DH, correspondant (avec un taux
de TVA constant de 18,6%). Il établit ensuite une remise dont le taux dépend de
la valeur ainsi obtenue, à savoir :
• 0 % pour un montant inférieur à 1 000 DH,
• 1 % pour un montant supérieur ou égal à 1 000 DH et inférieur à 2 000 DH,
• 3 % pour un montant supérieur ou égal à 2 000 DH et inférieur à 5 000 DH,
• 5 % pour un montant supérieur ou égal à 5 000 DH.
Ce programme est accompagné de deux exemples d’exécution.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 188


2012/2013 & 2021/2022
Exercice d’application (TD/TP1&2_EX2:suite…)

Ecrire un programme, qui permet de calculer la


somme des entier de 1 à 10, en utilisant:
i) La boucle for;
ii) La boucle do…while;
iii) La boucle while ?

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 189


2012/2013 & 2021/2022
o Cet exercice, (TD/TP_1&2-EX3), on va le corriger
ultérieurement?
Après qu’on va voir les cours sur:
Les Classes & Objets et leurs Méthodes et Attributs !!...

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 190


2012/2013 & 2021/2022
Exercice : Création des comptes bancaires (TD/TP_1&2-EX3: suite…)

■ Ecrire un programme qui permet de créer


des comptes bancaires pour des clients
■ Le programme permet de faire un versement
pour le compte d’un client
■ Le programme permet de faire un débit pour
le compte de chaque client
■ Le programme permet d’afficher l’état de
compte de client

- 191 -
Utilisation d’un tableau
(Exercice d’application: TD/TP_1&2-Ex4)
Accès individuelle à chaque élément du tableau

o Exercice d’application (TD/TP_1&2-Ex4: Suite…) :

Ecrire un petit programme en Java qui utilise un tableau de réels


pour déterminer le nombre d’étudiants d’une classe ayant une note
supérieure à la moyenne de la classe.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 192


2012/2013 & 2021/2022
Exercice d’application: TD/TP_1&2-Ex5

Exercice:
Ecrire un programme Java qui lit un tableau à partir du clavier puis
affiche son maximum (maximum des éléments entrés au clavier)?.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 193


2012/2013 & 2021/2022
Exercice d’application: TD/TP_1&2-Ex6

Exercice:
Dans un programme écrit en Langage JAVA, essayer de:
Ø Créer et initialiser une matrice contenant deux tableaux de 2
et 3 points respectivement ?
Ø Créer 5 objets de type "Point" ?
Ø Affecter ces 5 objets aux 5 éléments de la matrice ?

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 194


2012/2013 & 2021/2022
La manipulation des Tableaux
(Quelques Compléments)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 195


2013/2014 & 2020/2021
Les tableaux

Les tableaux Java sont des structures pouvant contenir un nombre fixe d'éléments de même nature.
Il peut s'agir d'objets ou de primitives.

Tableaux unidimensionnels

Déclaration : type nomTableau [] ; ou type [] nomTableau ;

Exemple : int t[] ; peut aussi s’écrire : int [] t ;

La différence entre les deux formes :

int [] t1, t2 ; équivalent à int t1[], t2[] ;


int t1[], n, t2[] ; // mélange entre tableaux d’entiers et primitive entier

Les éléments d’un tableau peuvent être d’un type primitif ou d’un type objet:
Point tp [] ; // tp est une référence à un tableau d’objets de type Point
Point a, tp[], b ; // a et b sont des références à des objets de type Point. tp est une référence à un
tableau d’objets de type Point
Les tableaux (2)
Tableaux unidimensionnels (2)
Création
La création d’un tableau dans java est réalisée par l’opérateur new :
nomTableau = new type [dimension];

Exemple : int t[]= new int[50]; ou int [] t = new int[50] ;

Initialisation
1 - Automatique: Chaque élément du tableau est initialisé selon son type par
l'instruction new :
v 0 pour les numériques,
v \0 pour les caractères,
v false pour les booléens
v null pour les chaînes de caractères et les autres objets.

2 - On peut initialiser un tableau au moment de sa déclaration par la syntaxe suivante :

int [] x={1, 2, 3, 4, 5} ;// tableau de cinq éléments de type int initialisé par {1, 2, 3, 4, 5}
Les tableaux (3)
Tableaux unidimensionnels (3)

Taille d’un tableau


Un tableau est un objet possédant l'attribut length : c'est la taille du
tableau.

Exemple :
int t[] = new int[5] ;
System.out.println ("taille de t : " + t.length) ; // affiche 5
t = new int[3] ;
System.out.println ("taille de t : " + t.length) ; // affiche 3
Utilisation d’un tableau

Accès individuelle à chaque élément du tableau


(voir l’exercice d’application donné précédemment !...)
Les tableaux (4)
Tableaux unidimensionnels (4)

Accès globale de tableau: affectation


Exemple:

int [] t1 = new int[3] ;


for (int i=0 ; i<3 ; i++)
t1[i] = i ;
int [] t2 = new int[2] ;
for (int i=0 ; i<2 ; i++)
t2[i] = 10 + i ;
On exécute maintenant l’affectation
t1 = t2 ; // la référence contenue dans t2 est recopiée dans t1

Dorénavant, t1 et t2 désignent le même tableau.

Donc, si on écrit: t1[0] = 5 ;


Alors l’instruction : System.out.println (t2[0]) affichera la valeur 5, et non 10.
Les tableaux (5)
Tableaux multidimensionnels (1)

Déclaration et création
type nomTableau [] []= new type[n1][n2];
ou

type [] [] nomTableau = new type[n1][n2];

Exemple : int t2[][]= new int [5][10] ;

Un tableau à plusieurs dimensions peut être initialisé comme suit:

int t21[][] = {{1, 2, 3}, {4, 5, 6}};


Les tableaux (6)
Tableaux multidimensionnels (2)

Déclaration et création
Toutes les lignes d’un tableau à 2 dimensions n’ont pas forcément le même
nombre d’éléments :

int t22[][] ;
t22 = new int[5][];
for( int i = 0; i< t22.length; i++){
t22[i]= new int [i+1];
}
for( int i = 0; i< t22.length; i++){
for( int j = 0; j<t22[i].length; j++){
//accès à t22[i][j]
}
}
Chapitre 5 (Suite):
La manipulation des Chaînes de Caractères
La définition d'un caractère se fait grâce au type char :
Exemple :
char touche = '%';
La définition d'une chaîne se fait grâce au type String (String est une classe !):
Exemple :
String texte = " bonjour ";
Les variables de type String sont des objets. Partout où des constantes chaînes de caractères figurent entre
guillemets, le compilateur Java génère un objet de type String avec le contenu spécifié.
Il est donc possible d'écrire :
String texte = " Java Java Java ".replace('a','o');
Les chaînes de caractères ne sont pas des tableaux : il faut utiliser les méthodes de la classe String d'un objet
instancié pour effectuer des manipulations !.
Remarque: Il est impossible de modifier le contenu d'un objet de type String. Cependant, il est
possible d'utiliser les méthodes de la classe String pour effectuer une modification qui va créer
une nouvelle chaîne de caractères. Il suffit alors d'affecter le résultat de ces méthodes à la
variable pour qu'elle pointe sur la nouvelle chaîne de caractères contenant les modifications.
Exemple :
String texte = " Java Java Java ";
texte = texte.replace('a','o');

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 202


2012/2013 & 2021/2022
La classe String (1)
o Attention ce n’est pas un type de base. Il s'agit d'une classe
définie dans l’API Java (Dans le package java.lang)
String s="aaa"; // s contient la chaîne "aaa". Alors que,
String s=new String("aaa"); // est identique à la ligne précédente
o La concaténation
n l’opérateur + entre 2 String les concatène :
String str1 = "Bonjour ! ";
String str2 = null;
str2 = "Comment vas-tu ?";
String str3 = str1 + str2; / * Concaténation de chaînes : str3 contient " Bonjour ! Comment vas-tu ?"

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 203


2012/2013 & 2021/2022
Différences entre objets et types de base
Mémoire
3
int x=3,y=3;
x == y est vrai 3

0x768
0x852

String s1="Abc",s2="Abc"; Abc


s1 == s2 est faux... ....

Quand on compare 2 variables d’un type de base


on compare leur valeur. Quand on compare 2 objet
Abc
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 vrai

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 204


2012/2013 & 2021/2022
La classe String (2)
o Longueur d’un objet String :
n méthode int length() : renvoie la longueur de la chaîne
String str1 = "bonjour";
int n = str1.length(); // n vaut 7
o Sous-chaînes
n méthode String substring(int debut, int fin)
n extraction de la sous-chaine depuis la position debut jusqu’à la position
fin non-comprise.
String str2 = str1.substring(0,3); // str2 contient la valeur "bon"
n le premier caractère d’une chaîne occupe la position 0
n le deuxième paramètre de substring indique la position du premier
caractère que l’on ne souhaite pas copier (ou extraire !)!

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 205


2012/2013 & 2021/2022
La classe String (3)
o Récupération d’un caractère dans une chaîne
n 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 unJ = str1.charAt(3); // unJ contient le caractère 'j'
o Modification des objets String
n Les String sont inaltérables (non modifiables !) en Java : on ne peut
modifier individuellement les caractères d’une chaîne.
n 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" */

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 206


2012/2013 & 2021/2022
La classe String (4)
o Les chaînes de caractères sont des objets :
n pour tester si 2 chaînes sont égales il faut utiliser la méthode
boolean: equals(String str) et non ==
n pour tester si 2 chaînes sont égales à la casse près, (sans tenir
compte des majuscule ou minuscule !), 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

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 207


2012/2013 & 2021/2022
La classe String (5)
o Quelques autres méthodes utiles
n boolean startsWith(String str) : pour tester si une chaine
de caractère commence par la chaine de caractère str
n boolean endsWith(String str) : pour tester si une chaîne
de caractère se termine par la chaine de caractère str
String str1 = "bonjour ";
boolean a = str1.startsWith("bon");//a vaut true
boolean b = str1.endsWith("jour");//b vaut true
boolean c = str1.endsWith("on");//c vaut false

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 208


2012/2013 & 2021/2022
La manipulation des Tableaux
(Quelques Autres Compléments)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 209


2012/2013 & 2021/2022
Tableaux (Compléments)

Ce sont des objets : ils sont donc dérivés de la classe Object. Il est
possible d'utiliser les méthodes héritées telles que equals() ou getClass().
Le premier élément d'un tableau possède l'indice 0.

La déclaration des tableaux:

Java permet de placer les crochets après ou avant le nom du


tableau dans la déclaration.
Exemple :
int tableau[] = new int[50]; // déclaration et allocation
OU
int[] tableau = new int[50];
OU
int tab[]; // déclaration
tab = new int[50]; //allocation
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 210
2012/2013 & 2021/2022
Tableaux (Compléments: suite…)

Un tableau est un ensemble indexé de données d'un même type. L'utilisation d'un
tableau se décompose en trois parties :
Création du tableau
Remplissage du tableau
Lecture du tableau

Création d'un tableau:


Un tableau se déclare et s'instancie comme une classe :
int monTableau[ ] = new int[10];
Ou bien,
int [ ] monTableau = new int[10];
L'opérateur [ ] permet d'indiquer qu'on est en train de déclarer un tableau.
Dans l'instruction précédente, nous déclarons un tableau d'entiers (int, integer) de
taille 10, c'est-à-dire que nous pourrons stocker 10 entiers dans ce tableau.
Si [ ] suit le type, toutes les variables déclarées seront des tableaux, alors
que si [ ] suit le nom de la variable, seule celle-ci est un tableau :
int [] premierTableau, deuxiemeTableau;
float troisiemeTableau[], variable;
Dans ces quatre déclarations, seule variable n'est pas un tableau.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 211


2012/2013 & 2021/2022
Tableaux (Compléments: suite…)

Remplissage d'un tableau:


Une fois le tableau déclaré et instancié, nous pouvons le remplir :
int [] monTableau = new int[10];
monTableau[5] = 23;
L'indexation démarre à partir de 0, ce qui veut dire que, pour un tableau
de N éléments, la numérotation va de 0 à N-1.
Dans l'exemple ci-dessus, la 6ème case contient donc la valeur 23.
Nous pouvons également créer un tableau en énumérant son contenu :
int [] monTableau = {5,8,6,0,7};
Ce tableau contient 5 éléments.
Lorsque la variable est déjà déclarée, nous pouvons lui assigner d'autres
valeurs en utilisant l'opérateur new :

monTableau = new int[]{11,13,17,19,23,29};

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 212


2012/2013 & 2021/2022
Tableaux (Compléments: suite…)

Lecture d'un tableau:


Pour lire ou écrire les valeurs d'un tableau, il faut ajouter l'indice entre crochets
([ et ]) à la suite du nom du tableau :
int [] monTableau = {2,3,5,7,11,23,17};
int nb;
monTableau[5] = 23; // -> 2 3 5 7 11 23 17
nb = monTableau[4]; // 11
L'indice 0 désigne le premier élément du tableau.
L'attribut length d'un tableau donne sa longueur (le nombre d'éléments).
Donc pour un tableau nommé monTableau l'indice du dernier élément est
monTableau.length-1.
Ceci est particulièrement utile lorsque nous voulons parcourir les éléments d'un
tableau.
for (int i = 0; i < monTableau.length; i++)
{ int element = monTableau[i]; // traitement
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 213


2012/2013 & 2021/2022
L'initialisation explicite d'un tableau

Exemple :
int tableau[5] = {10,20,30,40,50};
int tableau[3][2] = {{5,1},{6,2},{7,3}};
La taille du tableau n'est pas obligatoire si le tableau est initialisé à
sa création.
Exemple :
int tableau[] = {10,20,30,40,50};
Le nombre d'éléments de chaque ligne peut ne pas être identique.
Exemple :
int[][] tabEntiers ={{1,2,3,4,5,6},{1,2,3,4},{1,2,3,4,5,6,7,8,9}};

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 214


2012/2013 & 2021/2022
Le parcours d'un tableau

Exemple :
for (int i = 0; i < tableau.length ; i ++) { ... }
La variable length retourne le nombre d'éléments du tableau.
Pour passer un tableau à une méthode, il suffit de déclarer les
paramètres dans l'en-tête de la méthode.
Exemple :
public void printArray(String texte[]){ ... }
Les tableaux sont toujours transmis par référence puisque ce sont
des objets.
Un accès a un élément d'un tableau qui dépasse sa capacité, lève
une exception du type:
java.lang.arrayIndexOutOfBoundsException.
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 215
2012/2013 & 2021/2022
Tableaux (Compléments: suite…)
Des Remarques:
Les tableaux en JAVA (à partir du Java 5)

Java 5 fournit un moyen plus court de parcourir un tableau.


L'exemple suivant réalise le traitement sur monTableau :
for (int element : monTableau)
{ // traitement
}
Attention néanmoins, la variable element contient une copie de monTableau[i].
Avec des tableaux contenant des variables primitives, toute modification de
element n'aura aucun effet sur le contenu du tableau.
// Une tentative de remplir tous les éléments du tableau avec la valeur 10
for(int element : monTableau)
{ element=10; }
// La bonne méthode :
for(int i=0; i < monTableau.length; i++)
{ monTableau[i]=10; }

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 216


2012/2013 & 2021/2022
La classe Arrays

La classe Arrays du package java.util possède plusieurs méthodes de


gestion des tableaux de types de base et d'objets :
Ø la méthode asList convertit un tableau en liste;
Ø la méthode binarySearch effectue la recherche binaire d'une valeur
dans un tableau;
Ø la méthode equals compare deux tableaux (longueur et contenu);
Ø la méthode fill remplit un tableau avec la valeur donnée
Ø la méthode sort trie un tableau dans l'ordre croissant de ses éléments.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 217


2012/2013 & 2021/2022
Exemple de source :
import java.util.*;

public class ArrayExample


{
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int numNoms = getInt("Nombre d'entrées du tableau ?");
String[] noms = new String[numNoms];
for (int i = 0; i < noms.length; i++) {
noms[i] = getString("Entrée n°" + (i+1));}
for (int i = 0; i < noms.length; ++i)
{ System.out.println(noms[i]); }
}
public static int getInt(String prompt) {
System.out.print(prompt + " ");
int entier = input.nextInt();
input.nextLine(); // Get read of this line
// so that getString won't read it
return entier; }
public static String getString(String prompt) {
System.out.print(prompt + " ");
return input.nextLine(); }
}

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 218


2012/2013 & 2021/2022
Copie d'un tableau:

La copie d'un tableau implique la copie de ses éléments dans un autre tableau.
Dans le cas d'un tableau d'objets, seules les références à ces objets sont
copiées, aucun nouvel objet n'est créé.

La méthode arraycopy de la classe System permet de copier tout ou partie


d'un tableau vers un autre tableau déjà alloué.
Comme toutes les classes, les tableaux dérivent de la classe java.lang.Object.
Les méthodes de la classe Object sont donc utilisables :
int[] premiers = { 2, 3, 5, 7, 11 };
System.out.println( premiers.toString() );
// Par défaut <type>@<hashcode>, exemple : [I@a108298c
La copie intégrale d'un tableau dans un nouveau tableau peut donc se faire en
utilisant la méthode clone(). La valeur retournée par cette méthode étant de
type Object, il faut la convertir dans le type concerné.
Exemple:
int [] nombres = { 2, 3, 5, 7, 11 };
int [] copie = (int[]) nombres.clone();
nombres[1]=4; // nombres contient 2 4 5 7 11
// tandis que copie contient toujours 2 3 5 7 11

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 219


2012/2013 & 2021/2022
La manipulation des Chaînes de caractères
(Quelques Compléments)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 220


2012/2013 & 2021/2022
La manipulation des Chaînes de caractères
(Compléments)

Java ne fonctionne pas avec le jeu de caractères ASCII ou ANSI,


mais avec Unicode (Universal Code). Ceci concerne les types char
et les chaînes de caractères. Le jeu de caractères Unicode code un
caractère sur plusieurs octets. Les caractères 0 à 255
correspondent exactement au jeu de caractères ASCII étendu.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 221


2012/2013 & 2021/2022
Les caractères spéciaux dans les chaines
Dans une chaîne de caractères, plusieurs caractères particuliers doivent
être utilisés avec le caractère d'échappement \.

Le tableau ci-dessous recense les principaux caractères.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 222


2012/2013 & 2021/2022
La comparaison de deux chaines:
Il faut utiliser la méthode equals()

Exemple :
String texte1 = " texte 1 "; String texte2 = " texte 2 ";
if ( texte1.equals(texte2) )...
La détermination de la longueur d'une chaine:
La méthode length() permet de déterminer la longueur d'une chaine.

Exemple :
String texte = " texte "; int longueur = texte.length();
La modification de la casse d'une chaine:
Les méthodes Java toUpperCase() et toLowerCase() permettent respectivement
d'obtenir une chaîne tout en majuscules ou tout en minuscules.
Exemple :
String texte = " texte ";
String textemaj = texte.toUpperCase();

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 223


2012/2013 & 2021/2022
L'addition de chaînes de caractères:
Java admet l'opérateur + comme opérateur de concaténation de chaînes de
caractères.
L'opérateur + permet de concaténer plusieurs chaînes de caractères.
Il est possible d'utiliser l'opérateur +=
Exemple :
String texte = " "; texte += " Hello "; texte += " World3 ";
Cet opérateur sert aussi à concaténer des chaînes avec tous les types de
bases. La variable ou constante est alors convertie en chaîne et ajoutée à la
précédente.
La condition préalable est d'avoir au moins une chaîne dans l'expression
sinon le signe '+' est évalué comme opérateur mathématique.
Exemple :
System.out.println(" La valeur de Pi est : " + Math.PI);
int duree = 121;
System.out.println(" durée = " + duree);
@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 224
2012/2013 & 2021/2022
Remarque sur la classe Math
o Les fonctions mathématiques les plus connues sont regroupées
dans la classe Math qui appartient au package java.lang:
n les fonctions trigonométriques
n les fonctions d’arrondi, de valeur absolue, ...
n la racine carrée, la puissance, l’exponentiel, le logarithme,
n …, etc.
o 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

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 225


2012/2013 & 2021/2022
Classe Math (Fonctions mathématiques: Suite…)

La classe Math
o Math.pow ( ) : xa (x puissance a)
o Math.sqrt( ) : détermine la racine carrée d'un nombre
o Math.abs ( ) : |x| (valeur absolue de x)
o Math.min ( ) : détermine le minimum de deux nombres
o Math.max( ) : détermine le maximum de deux nombres
o Math.random( ) : donne un nombre au hasard entre 0 et 1 (>=0 et <1)

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 226


2012/2013 & 2021/2022
Classe Math (Fonctions mathématiques: Suite…)

o Math. sin ( ) : calcule le sinus d'un angle;


o Math.cos ( ) : calcule le cosinus d'un angle;
o Math.tan ( ) : calcule la tangente d'un angle;
o Math.exp ( ) : calculer l'exponentielle d'un nombre;
o Math.log ( ) : calcule le logarithme d'une valeur;
o Math.floor( ) : arrondit à l'entier inférieur;
o …, etc.

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger 227


2012/2013 & 2021/2022
Partie II

@ Prof. E. M. EN-NAIMI Dépt. G. Informatique / FST de Tanger


2012/2013 & 2021/2022 228

Vous aimerez peut-être aussi