01 introduction Éléments de base

29
7/26/2019 01 Introduction Éléments de Base http://slidepdf.com/reader/full/01-introduction-elements-de-base 1/29 Informatique / Programmation Programmation orientée objet avec Java 01 : Introduction / Éléments de base

Upload: el-ghazouany-med

Post on 02-Mar-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 1/29

Informatique / Programmation

Programmation orientée objet avec Java01 : Introduction / Éléments de base

Page 2: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 2/29

2

Bref historique du langage Java

Le langage Java a été conçu au sein de l'entreprise Sun

Microsystems (par une équipe dirigée par James Gosling).

Initialement baptisé Oak (chêne), il a été officiellement lancé en1995 sous le nom Java 

• Java est synonyme de "café" en argot américain

Le langage a été popularisé par :• Sa portabilité (indépendance des plates-formes)

• Le slogan "Write Once Run Anywhere"

• Une syntaxe de base très proche de C/C++

• Une orientation Web native

• Des éléments de sécurité intégrés• La gratuité de son kit de développement (JDK)

• Son adoption dans la formation (écoles, universités)

• Son nom ?

Java / Introduction

   C  o  m   p

   l    é  m   e

  n   t

Page 3: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 3/29

3

Caractéristiques principales

Orientation Objet

(C++) --

Sécurité intégrée

Portabilité

Robustesse (typage fort, gestion de la mémoire, ...) Richesse des librairies de classes (plate-forme Java)

Multitâche intégré au langage (Multithreading )

Bonne intégration des communications réseau ( Sockets, RMI, … )

Évolutivité ( SDK 1.0, 1.1, 1.2, 1.3, 1.4, 5.0, 6.0, 7.0, 8.0, … )

Java JavaScript

C# est fortement inspiré de Java

Java / Introduction

   C  o  m   p

   l    é  m   e

  n   t

Page 4: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 4/29

4

Mode de déploiement [1]

 Application• Se comporte comme une application native

• Lancement par une ligne de commande (lanceur natif)

• Nécessite la disponibilité d'une machine virtuelle Java (JVM, JRE)

• Peut accéder (par défaut) aux ressources locales(fichiers, réseau, périphériques, ...)

 Applet• Lancement intégré dans des pages HTML

• S'exécute à l'intérieur du navigateur (IE, Firefox, ...)

• Utilise la machine virtuelle Java du navigateur 

(attention aux versions de la machine virtuelle)• Ne peut pas accéder (par défaut) aux ressources locales

(notion de Sandbox ) Sécurité

• Pratiquement plus utilisé (remplacé par Flash, HTML5 , …)

Java / Introduction

   C  o  m   p

   l    é  m   e

  n   t

Page 5: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 5/29

5

Modes de déploiement [2]

 Applet

Java Web Start•  Application déployée et mise à jour par le Web• Mise en mémoire cache locale (lancement plus rapide)• L'application peut être lancée depuis une page HTML

ou comme une application locale• Technologie destinée à remplacer les Applets (mais assez peu utilisée)

Machine cible

Navigateur 

Page HTML

Applet JVM

Java / Introduction

   C  o  m   p

   l    é  m   e

  n   t

Page 6: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 6/29

6

Différences par rapport à C/C++

Syntaxe simplifiée (élimination des redondances C/C++)

Tailles définies pour les types primitifs

Garbage Collector (ramasse-miettes)

Éléments supprimés :

• Pré processeur / #define / #include / typedef

• Fichiers header (.h)• Structures / Unions

• Fonctions et variables globales

• Héritage multiple

• Pointeurs

• Surcharge des opérateurs• Instruction goto

• Certains transtypages (casting) automatiques

Java / Introduction

   C  o  m   p

   l    é  m   e

  n   t

Page 7: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 7/29

7

Premier programme Java

Un premier programme (très poli) enregistré dansle fichier "Bonjour.java" :

Java / Introduction

Nom de la classe : il doit correspondre aunom du fichier source (sans l'extension)

//-------------------------------------------// Un premier programme Java//-------------------------------------------

public class Bonjour {

public static void main(String[] args) {

System.out.println("Bonjour à tous !");

}

}  Point d'entrée du programme

Page 8: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 8/29

8

Compilation et Interprétation

Source   Compilateur    Bytecode

Java / Introduction

Linux 

P1.java   javac P1.java   P1.class

Compi lat ion    Interprétat ion 

On utilise un éditeur 

pour créer et modifierles fichiers sources

Interpréteur 

java P1

Java VM

Dans un environnement de développement

intégré (IDE) les commandes sont disponiblessous forme de menus et barres d'outils

Windows

Java VM

. . .

Java VM

Machines virtuelles

(JVM/JRE)

Page 9: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 9/29

9

Commentaires

Trois formes de commentaires :

//   …Texte…

Commence dès // et se termine à la fin de la ligne

Sur une seule ligne A utiliser de préférence pour les commentaires généraux

/*   …Texte… */ Le texte entre /* et */ est ignoré par le compilateur 

Peuvent s'étendre sur plusieurs lignes Ne peuvent pas être imbriqués Peuvent être utiles pour inactiver (temporairement) une zone de code

/**  …

Texte… */ Commentaire de documentation (comme /* … */ mais avec fonction spéciale)

Interprétés par l'utilitaire javadoc pour créer une documentation au format HTML Peuvent contenir des balises de documentation (@author, @param, …)

Peuvent contenir des balises HTML (Tags)

Java / Eléments de base

Page 10: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 10/29

10

Exemples de commentaires

Java / Eléments de base

/**

* Somme : Calcule une somme** @author Marc Duchemin* @version 2.3 08.07.2014*/public class Somme {/*--------------------------------------------------+

| Programme principal |+--------------------------------------------------*/public static void main(String[] params) {

//--- Initialisation des variablesint a = 1;int b = 2;

int total; // Totalisateurtotal = a + b;

//--- Affichage du résultat de l'additionSystem.out.println("Résultat = " + total);

}}

Page 11: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 11/29

11

Identificateurs

Les identificateurs sont des noms symboliques permettant deréférencer les éléments des programmes Java (variables, fonctions, ...).

Règles pour les identificateurs :

• Doivent commencer par une lettre ou un souligné(ou, à éviter, un caractère monétaire)

• Suivi (éventuellement) d'un nombre quelconque de lettres, chiffresou soulignés (ou, à éviter, de caractères monétaires)

• Distinction entre les majuscules et les minuscules(éviter de créer des identificateurs qui ne se distinguent que par la casse)

• Utilisent le jeu de caractères Unicode (16 bits)

• Selon les plates-formes, les caractères alphabétiques spéciaux

(par exemple les caractères accentués, les lettres grecques, …) peuventencore poser des problèmes => A éviter 

• Les mots réservés du langage sont exclus(voir liste à la page suivante)

Java / Eléments de base

Page 12: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 12/29

12

Mots réservés (Keywords) 

Mots réservés du langage Java (mots-clé) :

abstract default goto 1) package synchronized

assert 3) do if private this

boolean double implements protected throw

break else import public throws

byte enum 4) instanceof return transient

case extends int short true 2)

catch false 2) interface static try

char final long strictfp void

class finally native super volatile

const 1) float new switch while

continue for null 2)

Java / Eléments de base

1) Mots réservés du langage mais non utilisés actuellement 2) Littéraux prédéfinis3) Depuis la version 1.4 du JDK  4) Depuis la version 1.5 du JDK 

Page 13: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 13/29

13

Notion de variable [1]

En informatique, la notion de variable est une notion

fondamentale (un concept essentiel). Une variable définit une case mémoire nommée et typée.

• Le nom est représenté par un identificateur 

• Le type définit le genre d'informations qui sera enregistré ainsi queles opérations qui pourront être effectuées sur ces informations

• Il existe un certain nombre de types prédéfinis mais il est égalementpossible de créer ses propres types

 Avant de pouvoir être utilisée, une variable doit préalablement êtredéclarée (définition de l'identificateur et du type).

Syntaxe :Type  Identif icateur ;

float note;

Polygone triangle;

Java / Eléments de base

4.75note

Page 14: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 14/29

14

Notion de variable [2]

La valeur de la variable peut être définie (initialisée), consultée,modifiée en utilisant le nom de la variable.

Les variables ont une visibilité et une durée de vie qui dépendentdu contexte dans lequel elles sont déclarées.

Le type d'une variable peut être soit un type pr imi t i f , soit un

type référence (c'est-à-dire le nom d'une classe ou d'un tableau) Exemples :

int unNombreEntier; // Type primitif int

String motDePasse; // Classe String (prédéfinie)

Point position; // Classe Point

char[] voyelles; // Tableau de caractères

Point[] nuage; // Tableau de Point(s)

Java / Eléments de base

J / Elé d b

Page 15: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 15/29

15

Représentation en mémoire

Variable Adresse Contenu 

1215

note 1216

1217

. . .

float note;

. . .

Notation abstraite 

(à uti li ser ) 

note

Variable Adresse Contenu 

1215

note 1216   5.2

1217

. . .

note = 5.2;

. . .

5.2note

De manière interne, la zone mémoire allouée à une variable est

identifiée par une adresse. Cette adresse est complètement cachée au programmeur : l'accès

à la zone mémoire s'effectue en utilisant le nom de la variable.

Code Java Représentation interne  

Java / Eléments de base

J / Elé t d b

Page 16: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 16/29

16

Types primitifs [1]

Java / Eléments de base

Type Contient Taille Valeurs

boolean Booléen [1 bit 1) ] true, false

char Caractère (entier non-signé) 16 bits \u0000..\uFFFF

byte Entier signé 8 bits -128..127

short Entier signé 16 bits -215.. 215-1

int Entier signé 32 bits -231.. 231-1

long Entier signé 64 bits -263.. 263-1

float Nombre en virgule flottante 32 bits   3.4*1038

double Nombre en virgule flottante 64 bits   1.7*10308

1) Dépend de l'implémentation de la machine virtuelle

J / Elé t d b

Page 17: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 17/29

17

Types primitifs [2]

Booléen (boolean)• Ne peuvent prendre que deux valeurs : Vrai ou Faux 

• Ne peuvent pas être interprétés comme des valeurs numériques [0, 1]

• Valeurs littérales (valeurs qui figurent directement dans le code) true Vrai 

 false Faux 

Caractère (char)• Caractères Unicode (codage normalisé sur 16 bits)

• Site de référence de la norme : www.unicode.org

• Peuvent être traités comme des entiers (non-signés !)• Valeurs littéralesEntre apostrophes : 'A' (attention : "A" n'est pas de type char)

Séquence d'échappement pour certains caractères spéciaux(voir tabelle page suivante)

Java / Eléments de base

J / Elé t d b

Page 18: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 18/29

18

Types primitifs [3]

Séquences d'échappement (char)

Java / Eléments de base

Code Signification

\b Retour en arrière (Backspace)

\t Tabulateur horizontal

\n Saut de ligne (Line-feed)

\f Saut de page (Form-feed)

\r Retour de chariot (Carriage-Return)

\" Guillemet

\'  Apostrophe

\\ Barre oblique arrière (Backslash)\ xxx  Caractère Latin-1 (xxx : valeur octale 000..377)

\u xxxx  Caractère Unicode

(xxxx : valeur hexadécimale 0000..FFFF)

J / Elé t d b

Page 19: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 19/29

19

Types primitifs [4]

Entiers signés (byte, short, int, long)

• Valeurs littérales (int par défaut) : notation habituelle

• Suffixe l ou L pour type long (L est préférable)

• Préfixe 0 (zéro) pour valeur octale (base 8)

• Préfixe 0b ou 0B pour valeur binaire (base 2)

• Préfixe 0x ou 0X pour valeur hexadécimale (base 16)• Exemples :

0 // valeur de type int

123 // valeur de type int

-56 // valeur de type int

0377 // 377 [octal] = 255 [décimal]433L // valeur de type long

0b1011 // valeur binaire de type int

0xff // valeur hexadécimale de type int

0xA0B3L // valeur hexadécimale de type long

Java / Eléments de base

Java 7 

Ja a / Eléments de base

Page 20: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 20/29

20

Types primitifs [5]

Nombres en virgule flottante (float, double)

• Norme IEEE 754-1985• Précision

float : env. 6 chiffres significatifsdouble : env. 15 chiffres significatifs

• Valeurs littérales (double par défaut) : notation habituelle (n.m )

• Suffixe f ou F pour type float• Suffixe d ou D pour type double (rarement nécessaire)

• Notation exponentielle avec e ou E suivi de l'exposant

• Valeurs spéciales : infini, -infini, zéro négatif, NaN ( Not a Number  )

Java / Eléments de base

Attention : Les nombres en virgule flottante sont des approximations denombres réels (tous les nombres réels ne peuvent pas êtrereprésentés de manière exacte).

Il faut en tenir compte dans les comparaisons et notammentdans les tests d'égalité (prendre en compte un "epsilon" ).

Java / Eléments de base

Page 21: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 21/29

21

Types primitifs [6]

Nombres en virgule flottante (float, double)123.45 // valeur de type double (par défaut)

17d // valeur de type double

-4.032F // valeur de type float

6.02e23 // 6.02 x 1023 de type double

-5.076E-2f // -5.076 x 10-2 de type float

Java / Eléments de base

Le caractère '_' peut être inséré dans les littéraux numériqueslong creditCardNr = 1234_5678_9012_3456L;

int tenMillions = 10_000_000;

int bytePattern = 0b11000011_00001111_11110000_00110011;

float pi = 3.14_15_93f;

Cas particuliers (problèmes numériques) :1.2/0.0 // Infini Double.POSITIVE_INFINITY

-5.1/0.0 // Moins l'infini Double.NEGATIVE_INFINITY

0.0/0.0 // Not a Number (NaN) Double.NaN

Java 7 

Java / Eléments de base

Page 22: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 22/29

22

Affichage sur la console

Pour afficher une valeur littérale ou le contenu d’une variable sur la

console de sortie, on utilise les lignes de code suivantes :• System.out.print(…); // Affichage (reste sur la même ligne)

• System.out.println(…); // Affichage et retour à la ligne

Exemples :

System.out.println("Résultats");System.out.println("---------");

Résultats---------

int size = 123;char unit = 'm';System.out.print("Longueur : ");System.out.print(size);System.out.print(" ");System.out.println(unit);

Longueur : 123 m

int size = 123;char unit = 'm';System.out.println("Longueur : " + size + " " + unit);

Même affichage mais en utilisant l'opérateur de concaténation (+)

Java / Eléments de base

Java / Eléments de base

Page 23: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 23/29

23

Conversions de types [1]

Mis à part le type booléen, tous les types primitifs peuvent être

convertis entre eux. L'encodage Unicode permet (si nécessaire) de considérer les

caractères comme des nombres.Le type char peut donc agir comme un entier short mais il est nonsigné (contrairement aux autres entiers).

Conversion élargissante / Promotion (automatique)(avec perte éventuelle de précision lors du passage en virgule flottante)

Conversion restrictive explicite (par transtypage / casting)(sous la responsabilité du programmeur)

Java / Eléments de base

Remarque : Certaines conversions restrictives implicites sont automatiquementeffectuées lorsque le résultat d'une expression constante est assignéeà une variable (byte, short ou char) pour autant que la valeur del'expression puisse être représentée (sans perte) par la variable.

short compteur = 12*34; // Conversion implicite int -> short

Java / Eléments de base

Page 24: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 24/29

24

Conversions de types [2]

Conversions des types primitifs

boolean byte short char int long float double

boolean   –   N N N N N N N

byte   N   –   E   R   E E E E

short   N   R  –

  R   E E E E

char    N   R R   –   E E E E

int   N   R R R   –   E E* E

long   N   R R R R   –   E* E*

float   N   R! R! R! R! R!  –

  E

double   N   R! R! R! R! R! R*   –

   C  o  n  v  e  r  s   i  o  n   d

  e

Conversion vers

N : pas de conversion possible   R : conversion restrictive

E : conversion élargissante   * : perte de précision   ! : valeur tronquée(promotion)

Java / Eléments de base

Java / Eléments de base

Page 25: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 25/29

25

Transtypage (Casting)

Conversion de type explicite (au risque du programmeur)

Syntaxe : (Type_de_destination ) Valeu r_à_convert ir 

Exemples :

int i = 17;byte b = 4; // Conversion implicite : littéral int -> byte

b = i; // Erreur à la compilation

b = (byte)i; // Conversion explicite (int -> byte)

float f = 23.86f;

i = (int)f; // Valeur tronquée (i==23)

Java / Eléments de base

Java / Eléments de base

Page 26: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 26/29

26

Types "Référence"

En plus des huit types primitifs, Java définit deux autres catégories

de types de données :- les classes et- les tableaux

qui seront étudiés en détail plus tard.

Les classes et les tableaux sont des types généralementcomposites (représentant des valeurs multiples).

Ils sont collectivement nommés : Types "Référence"

(on parle également parfois de types non-primitifs).

Pour une variable de type référence, la case mémoire ne contient

pas directement les valeurs de la variable mais une référence(une sorte de pointeur ) vers une autre zone mémoire contenant lesvaleurs.

Java / Eléments de base

String nom = "Dupont"; nom "Dupont"

Java / Eléments de base

Page 27: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 27/29

27

Chaînes de caractères

Les chaînes de caractères ne font pas partie des types primitifs

Les chaînes de caractères font partie des types référence (ce sont des objets de la classe String)

D'usage courant Syntaxe particulière (simplifiée) pour lesvaleurs littérales :

• Texte entre guillemets ("…")

• Peuvent contenir des séquences d'échappement identiquesà celles définies pour les types char

• Ne peuvent pas s'étendre sur plusieurs lignes

• Concaténation (mise bout à bout) avec l'opérateur "+"

• Conversions possibles : types primitifs String

"Ceci est une chaîne de caractères"

"Le caractère \" se nomme 'guillemet'"

"La conca" + "ténation peut s'étendre " +"sur plusieurs lignes"

Java / Eléments de base

Java / Eléments de base

Page 28: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 28/29

28

Conversions types primitifs String

Il est possible de convertir des valeurs de types primitifs en chaînes

de caractères (String) et inversement en utilisant des fonctions(méthodes) disponibles dans des classes appelées Wrappers.

Conversions

Type primitif Wrapper    en String   de String

byte Byte toString(byte b) parseByte(String s)short Short toString(short s) parseShort(String s)

int Integer toString(int i) parseInt(String s)

long Long toString(long l) parseLong(String s)

float Float toString(float f) parseFloat(String s)

double Double toString(double d) parseDouble(String s)

D'autres fonctions de conversion sont également disponibles dans la classe String, notammentla méthode valueOf() qui permet de convertir en String les valeurs de tous les types primitifs.

Java / Eléments de base

Java / Eléments de base

Page 29: 01 Introduction Éléments de Base

7/26/2019 01 Introduction Éléments de Base

http://slidepdf.com/reader/full/01-introduction-elements-de-base 29/29

29

Exemples de conversions

Attention : Ne pas confondre les littéraux de type caractère ou chaîne de caractères avecles littéraux numériques. Par exemple '4', "4" et 4.

Le premier est un caractère (type char), le deuxième une chaîne de caractères(type String) et le troisième est une valeur numérique entière (type int).

int i; // Variable de type int

float f; // Variable de type floatdouble d; // Variable de type doubleString s; // Variable de type String

s = "412";i = Integer.parseInt(s); // Conversion String -> int

s = "1.234";d = Double.parseDouble(s); // Conversion String -> double

f = 123.8F;s = Float.toString(f); // Conversion float -> Strings = String.valueOf(f); // Conversion float -> String

Java / Eléments de base