Vous êtes sur la page 1sur 35

Introduction à Java

Types de données
Structures de contrôles
Entrees-Sorties standards

Programmations Orientées Objet - JAVA


Chap 2 : Notions pour premiers programmes

Pr. Laila AMIR

Licence SIR
(Systèmes informatiques Répartis)

Année universitaire 2022/2023

Laila AMIR Programmations Orientées Objet 1 / 35


Introduction à Java
Types de données
Structures de contrôles
Entrees-Sorties standards

Plan
1 Introduction à Java
Origine?
Pourquoi JAVA?
JAVA : JVM, JDK, API
Premier programme (application)
2 Types de données
Types primitifs
Types prédéfinis
Classes Enveloppes
Classes String, StringBuffer, ...
3 Structures de contrôles
4 Entrees-Sorties standards
Ecriture, lecture de caractère
La classe Scanner
Laila AMIR Programmations Orientées Objet 2 / 35
Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Plan
1 Introduction à Java
Origine?
Pourquoi JAVA?
JAVA : JVM, JDK, API
Premier programme (application)
2 Types de données
Types primitifs
Types prédéfinis
Classes Enveloppes
Classes String, StringBuffer, ...
3 Structures de contrôles
4 Entrees-Sorties standards
Ecriture, lecture de caractère
La classe Scanner
Laila AMIR Programmations Orientées Objet 3 / 35
Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Origine?

L’origine du language Java


Java est un langage moderne orienté objet a été mis au point en 1991
par la compagnie ”Sun Microsystems”;
Le projet de développement au départ est connu sous le nom ”Oak”,
dont le but est de constituer un language pouvant être intégré dans les
électroménagers afin de les contrôler, et permettre une communication
entre les appareils.

L’origine du nom ”Java”


En l’honneur de la boisson préférée des programmeurs: le café, dont une
partie de la production provient de l’ı̂le Java.

Laila AMIR Programmations Orientées Objet 4 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Pourquoi JAVA?

Java est un langage objet :


Comme la plupart des langages récents, Java est orienté objet.
Chaque fichier source contient la définition d’une ou plusieurs
classes qui sont utilisées les unes avec les autres pour former une
application.

La programmation objet permet entre autres :


L’encapsulation [modélisation de l’objet comme une boite noire qui
contient un état (variables) et un comportement (méthodes)]
La réutilisation du code [utiliser ce qui a déjà été créé (classes déjà
faites) plus tard dans un autre projet]
éviter le code redondant [ne pas écrire x fois les mêmes fonctions au
sein d’un même projet ..]

Laila AMIR Programmations Orientées Objet 5 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Pourquoi JAVA?
Java est simple :
Le choix de ses auteurs a été d’abandonner des éléments mal compris
ou mal exploités des autres langages, Certains concepts à l’origine de
nombreux ”bugs” ont été supprimés en JAVA. :
la notion de pointeurs (pour éviter les incidents en manipulant
directement la mémoire),
la surcharge des opérateurs,
l’héritage multiple (pour éviter les ambiguités),
ou traités implicitement :
la libération de mémoire devient automatique grâce au garbage
collector ...
les chaı̂nes de caractères et les tableaux sont désormais des objets
faisant partie intégrante du langage.
Laila AMIR Programmations Orientées Objet 6 / 35
Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Pourquoi JAVA?

Java est robuste et sûr :


Le compilateur Java est fortement typé ; toutes les variables sont
typées et il n’existe pas de conversion automatique qui
risquerait une perte de données. Si une telle conversion doit être
réalisée, le développeur doit obligatoirement utiliser un cast ou une
méthode statique fournie en standard pour la réaliser.
Le traitement des exceptions est obligatoire. Le compilateur
vérifie que les erreurs sont traitées par le développeur. Dans le cas
contraire le code ne compilera pas;
Un débordement de tableau déclenchera automatiquement une
exception;

Laila AMIR Programmations Orientées Objet 7 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Pourquoi JAVA?
Java est sécurisé :
La gestion de la mémoire n’est pas à la charge du développeur
Garbage Collector (ramasse-miettes) : un programme qui libère la
mémoire des objets qui ne sont plus référencé.
Pas de pointeurs : le fait de ne pas manipuler les pointeurs et donc
d’accéder à des zones mémoire sensibles diminue fortement
l’introduction des virus informatiques.
Le chargeur de classes (ClassLoader) est responsable du chargement
dynamique des classes. Il vérifie que la classe chargée n’en écrase
pas une autre en mémoire;
Le gestionnaire de sécurité (la classe SecurityManager) permet de
définir un certain nombre d’autorisations d’entrée/sortie locales
et sur le réseau (Applet uniquement)

Laila AMIR Programmations Orientées Objet 8 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Pourquoi JAVA?

Java est interprété, et portable :


La source est compilée en pseudo code ou byte-code puis exécuté
par un interpréteur Java : la Java Virtual Machine (JVM).
Ce concept est à la base du slogan de Sun pour Java : WORA
(Write Once, Run Anywhere : écrire une fois, exécuter
partout). Le bytecode peut être exécuté et obtenir quasiment les
mêmes résultats sur toutes les machines disposant d’une JVM.
La machine virtuelle JVM existe par défaut sur de nombreuses
plateformes (Linux, Unix, Windows, Mac, ...);

Java est multi-thread :


Une application peut être décomposée en unités d’exécution fonctionnant
simultanément (parallélisme).

Laila AMIR Programmations Orientées Objet 9 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

JAVA : JVM, JDK, API

JAVA est un environnement de programmation objet composé de :


le langage orienté objet JAVA
la machine virtuelle JVM
un ensemble d’outils de développement JDK (compilateur,
générateur de documentation, ...)
un ensemble de classes standards API (application programming
interface ou bibliothèque)

Laila AMIR Programmations Orientées Objet 10 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Outils de de développement JDK

L’outil de base : le JDK (Java Development Kit) de SUN :


gratuit
comprend de nombreux outils :
le compilateur : javac
l’interpréteur d’application : java
l’interpréteur d’applet : appletviewer
le débogueur : jdb
le générateur de documentation : javadoc

Laila AMIR Programmations Orientées Objet 11 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Liens pour JDK et API

Des environnements de développement non commerciaux :


http://www.eclipse.org/
http://www.netbeans.org/
Des environnements de développement commerciaux:
Visual J++ (Microsoft)
JBuilder (Borland/Inprise)
Des classes Java (API):
https://docs.oracle.com/en/java/javase/13/docs/api/index.html

Laila AMIR Programmations Orientées Objet 12 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Premier programme (application)

public class PremProg


{
public static void main (String args[])
{
System.out.println (”1er programme Java”);
}
}

Tout code java doit être défini à l’intérieur d’une classe


Le code de la classe doit être enregistré dans un fichier de même
nom que la classe : PremProg.java
L’entrée pour l’exécution est la méthode main() qui doit être
publique et statique et située dans une classe qui elle même doit
être publique.

Laila AMIR Programmations Orientées Objet 13 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Compilation & Exécution

javac est le compilateur qui convertit le code PremProg.java en


fichier PremProg.class (bytecode Java).

javac PremProg.java

S’il ne donne pas de messages d’erreur, javac produit alors le fichier


PremProg.class au même endroit que PremProg.java. Ce fichier
appelé ”byte code” contient le code binaire qui peut être exécuté
sur n’importe quelle machine virtuelle Java.

Laila AMIR Programmations Orientées Objet 14 / 35


Introduction à Java Origine?
Types de données Pourquoi JAVA?
Structures de contrôles JAVA : JVM, JDK, API
Entrees-Sorties standards Premier programme (application)

Compilation & Exécution

Notons que l’on peut compiler d’un seul coup plusieurs fichiers dans
un même répertoire, par la commande :

javac *.java

Les fichiers .class générés portent les mêmes noms que les fichiers
sources.
L’exécution du programme est appelée par la commande suivante :

java PremProg

La commande java lance la machine virtuelle JVM pour exécuter le


”byte code”. On ne précise pas l’extension .class dans ce cas.

Laila AMIR Programmations Orientées Objet 15 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Plan
1 Introduction à Java
Origine?
Pourquoi JAVA?
JAVA : JVM, JDK, API
Premier programme (application)
2 Types de données
Types primitifs
Types prédéfinis
Classes Enveloppes
Classes String, StringBuffer, ...
3 Structures de contrôles
4 Entrees-Sorties standards
Ecriture, lecture de caractère
La classe Scanner
Laila AMIR Programmations Orientées Objet 16 / 35
Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Types de données

2 grands groupes de types de données :


Types primitifs,
Types de données prédéfinis : objets (instances de classe)
Java manipule différemment les valeurs des types primitifs et les objets :

Les variables contiennent :


des valeurs de types primitifs
ou des références aux objets

Laila AMIR Programmations Orientées Objet 17 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Types primitifs

Une constante ”entière” est de


type long si elle est suffixée
boolean –> true ou false par ”L” et de type int sinon
char (16-bit, Unicode) Une constante ”flottante” est de
byte entier (signé ) 8-bit type float si elle est suffixée
short entier (signé ) 16-bit par ”F” et de type double sinon
int entier (signé ) 32-bit
long entier (signé ) 64-bit Exemples :
float flottant (IEEE 754) 32-bit
int a = 35
double flottant (IEEE 754) 64-bit
long b = 2589L
double c = 4.567e2
float d = 0.123587E-25F

Laila AMIR Programmations Orientées Objet 18 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Classes Enveloppes

Les classes enveloppes (Wrappers) sont des classes qui encapsulent les
données de type primitif, afin de pouvoir les utiliser comme des objets.
Type primitif Classe enveloppe
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

Les classes Byte, Short, Integer, Long, Float, Double se sont des
sous-classes de la classe Number.

Laila AMIR Programmations Orientées Objet 19 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Classes Enveloppes

Depuis Java 5, les opérations de conversion d’un type primitif vers


un objet d’une classe enveloppe, et la conversion inverse sont
devenues automatique.
Toutes les sous-classes de Number possèdent les méthodes byte
byteValue(), short shortValue(), int intValue(), long
longValue() et double doubleValue() qui réalisent les conversions
des types primitifs.
Toutes les classes enveloppes ont une méthode x X.parseX(String
s) qui essaie de convertir une chaı̂ne de caractères en une
donnée de type primitif, si c’est possible (lèvent une exception
NumberFormatException sinon).

Laila AMIR Programmations Orientées Objet 20 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Exemple

Integer obj = new Integer(95545);


long l = obj.longValue(); // renvoie la valeur (long) de cet objet Integer

Double obj = new Double(”10.35”);


double d = obj.doubleValue();

int x =Integer.parseInt(”9”);

double c = Double.parseDouble(”5”);

Laila AMIR Programmations Orientées Objet 21 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Types de données prédéfinis : chaı̂nes de caractères

En Java, les chaı̂nes de caractères sont des objets des classes String ou
StringBuffer.
La classe String : java.lang.String (1)
La classe String gère des chaı̂nes de caractères non modifiables.
Les valeurs littérales (”abc”) peuvent être transformées en String.
L’opérateur + permet la concaténation de 2 String.

Laila AMIR Programmations Orientées Objet 22 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Exemples d’utilisation de la classe String

String s = ”bonjour”; // s = ”bonjour”


int lg = s.length(); // lg = 7
String s = ”Java” + ”Soft”; // s = ”JavaSoft”
char[] data = {’J’, ’a’, ’v’, ’a’};
String name = new String(data);
String s = String.valueOf(2 * 3.14159); // s = ”6.28318”
int i = Integer.valueOf(”123”); // i = 123
String s = ”java”;
if (s == ”java”) {...} // Erreur
if (s.equals(”java”)) {...} // Ok

Laila AMIR Programmations Orientées Objet 23 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

La classe StringBuffer

Il est très souvent utile de modifier des objets String.


La classe StringBuffer : java.lang.StringBuffer
La classe StringBuffer gère des chaı̂nes de caractères modifiable
(setCharAt(), append(), insert())
La méthode toString() convertie une StringBuffer en String

Laila AMIR Programmations Orientées Objet 24 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Exemples d’utilisation de la classe StringBuffer

StringBuffer sb = ”abc”; // Error: can’t convert String to StringBuffer


StringBuffer sb = new StringBuffer(”abc”);
sb.setCharAt(1, ’B’); // sb= ”aBc”
sb.insert(1, ”1234”); // sb = ”a1234Bc”
sb.append(”defg”); // sb = ”a1234Bcdefg”
String s = sb.toString(); // s = ”a1234Bcdefg”
sb.append(”hij”); // sb = ”a1234Bcdefghij” s = ”a1234Bcdefg”

Laila AMIR Programmations Orientées Objet 25 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Les tableaux (1)

manipulés par des références


vérification des bornes à l’utilisation
pas de tableau statique.
allocation dynamique par new
taille fixée une fois pour toute
taille accessible par le ”champ” length
Déclaration :
Les tableaux peuvent être déclarés suivant les syntaxes suivantes :
type [] nom ;
type nom [] ;

Laila AMIR Programmations Orientées Objet 26 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Les tableaux (2)

Création (allocation) :
par new après (ou dans) la déclaration :
int tab[]; // déclaration
tab = new int[5]; // création
ou implicite par initialisation

Initialisation :
int tab[] = {1, 2, 3}; // à la déclaration
// Sinon, valeurs par défaut : 0 ou false ou null (selon type de base)

Laila AMIR Programmations Orientées Objet 27 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Les tableaux (3)

De même pour les tableau 2D :


int [][] Matrice = new int [10][20] ;
La taille des tableaux de la seconde dimension peut ne pas être
identique pour chaque occurrence. Exemple :
int Mat[][] = new int[2][];
Mat[0] = new int[4];
Mat[1] = new int[9];
La taille peut être consultée par length :
System.out.println (tab.length) ;
System.out.println (Matrice.length) ; // 1ère dimension
System.out.println (Matrice[0].length) ; // 2ème dimension
System.out.println (Mat[1].length) ;

Laila AMIR Programmations Orientées Objet 28 / 35


Introduction à Java
Types de données Types primitifs
Structures de contrôles Types prédéfinis
Entrees-Sorties standards

Tableaux d’objets

Des tableaux contenant des (références à des) objets d’une classe donnée
peuvent être déclarés et créés pour toute classe (prédéfinie ou bien écrite
par le programmeur).

Exemple :
Un tableau de chaı̂nes de caractères (classe String) :
String[] tabChaines;
tabChaines = new String[2];
tabChaines[0] = ”OUI”;
tabChaines[1] = ”NON”;

Laila AMIR Programmations Orientées Objet 29 / 35


Introduction à Java
Types de données
Structures de contrôles
Entrees-Sorties standards

Plan
1 Introduction à Java
Origine?
Pourquoi JAVA?
JAVA : JVM, JDK, API
Premier programme (application)
2 Types de données
Types primitifs
Types prédéfinis
Classes Enveloppes
Classes String, StringBuffer, ...
3 Structures de contrôles
4 Entrees-Sorties standards
Ecriture, lecture de caractère
La classe Scanner
Laila AMIR Programmations Orientées Objet 30 / 35
Introduction à Java
Types de données
Structures de contrôles
Entrees-Sorties standards

Structures de contrôles

Les instructions de contrôle sont identiques à celles du C/C++ :


if ( condition ) { ... } ;

switch ( variable ) {
case const1 : { ... }
break ;
case const2 : { ... }
break ;
default : { ... }
};

for ( init ; condition ; modif ) { ... } ;

while ( condition ) { ... } ;

Laila AMIR Programmations Orientées Objet 31 / 35


Introduction à Java
Types de données Ecriture, lecture de caractère
Structures de contrôles La classe Scanner
Entrees-Sorties standards

Plan
1 Introduction à Java
Origine?
Pourquoi JAVA?
JAVA : JVM, JDK, API
Premier programme (application)
2 Types de données
Types primitifs
Types prédéfinis
Classes Enveloppes
Classes String, StringBuffer, ...
3 Structures de contrôles
4 Entrees-Sorties standards
Ecriture, lecture de caractère
La classe Scanner
Laila AMIR Programmations Orientées Objet 32 / 35
Introduction à Java
Types de données Ecriture, lecture de caractère
Structures de contrôles La classe Scanner
Entrees-Sorties standards

Ecriture, lecture de caractère

Ecriture :
float z=1.732f;
System.out.print(”z=”);
System.out.print(z);
System.out.println(”,2z=”+(2*z));

Lecture :
// Lecture d’un caractère
int car = System.in.read();
// Lecture de 10 caractères
byte buf[] = new byte[10];
int nbLus = System.in.read(buf);

Laila AMIR Programmations Orientées Objet 33 / 35


Introduction à Java
Types de données Ecriture, lecture de caractère
Structures de contrôles La classe Scanner
Entrees-Sorties standards

La classe Scanner

On utilise la classe Scanner pour lire autre type que des caractères.

import java.util.Scanner;
....
Scanner sc = new Scanner(System.in);
String ch = sc.next();
int k = sc.nextInt();
double val; Il existe une méthode nextXyz() et
if (sc.hasNextDouble()) une méthode hasNextXyz() pour
val = sc.nextDouble(); chaque type primitif xyz
String ligne = sc.nextLine();

Laila AMIR Programmations Orientées Objet 34 / 35


Introduction à Java
Types de données Ecriture, lecture de caractère
Structures de contrôles La classe Scanner
Entrees-Sorties standards

Exemple

import java.util.Scanner;
public class MonProgramme {
public static void main(String[] args){
System.out.print(”Entrez un int : ”);
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i=0; i<n; i++) {
System.out.println(i);
}
}
}

Laila AMIR Programmations Orientées Objet 35 / 35

Vous aimerez peut-être aussi