Vous êtes sur la page 1sur 43

Programmation oriente objets JAVA avance

Unit 1: Introduction JAVA


Redouane EZZAHIR red.ezzahir@gmail.com

Plan de cours
Introduction JAVA Concept Objet:

Classe, Objet, Hritage, abstraction, interfaces Exceptions et Entres/sorties Gnriques (types paramtrs) Programmation concurrente (threads, synchronisation) JDBC et API Java pour XML Java Servlet, JSP & JSLT JSF (JavaServer Faces) Hebirnate et JPA Maven,

Plan pour aujourd'hui


Introduction : un peu d'histoire Compilateur et Interprteur Bytecode et VMJ Normes de nommage en Java Types de base et Type String Tableaux Interactivit (cran/clavier) Mthode et passage des arguments Oprateurs Structures de contrle et Boucles Premier programme JAVA

Introduction : un peu d'histoire


Le langage Java est n en 1991, dans le secret dune

quipe de Sun Microsystem;


Conu par James Gosling qui la appel langage Oak

But : dtudier limpact de la convergence entre les systmes embarqus et les ordinateurs. 1956 une dmonstration trs importante dun navigateur capable de montrer du contenu html mlang des applets.

Aprs l arrive du protocole http, James Gosling a fait en

volution gre par JavaSOFT (SunSoft) :


1991--1995 sortie de la premire version de JDK

Versions JAVA
Les versions se succdrent alors :

1996 : JDK 1.0 1997 : JDK 1.1 1998 : JDK 1.2, appel Java 2 2000 : JDK 1.3 2002 : JDK 1.4 2004 : JDK 1.5, appel Java 5 2007 : JDK 1.6, appel Java 6. 2011 : JDK 1.7, appel Java 7. Java 8 est attendu en Mars 2014

JAVA aujourd'hui
Trois environnements d'excutions diffrents
1. Java SE (Standard Edition) pour desktop 2. Java EE (Entreprise Edition) pour serveur
Servlet/JSP/JSTL/JSF JTA/JTS, EJB, JMS, JavaMail, etc.

3. Java ME (Micro Edition) pour PDA, tlphone

Android (Java SE moins certain paquetages)

Notion de Classe dobjets


Pour un dveloppeur java tout est objet. Les objets classs

par leurs caractres communes.

Classe:
24/09/2013

Vehicule

FormeGeometrique
R. Ezzahir

Animal
7

Programme JAVA
Tout programme a au moins une classe.
class Animal {
//

public static void main (String[] args) { System.out.println("Classe Animal" ); } }

Pour excuter un programme java il faut au moins une

fonction main.
24/09/2013 R. Ezzahir 8

Compilateur et Interprteur

Les Compilateurs et les Interprteurs sont des

traducteurs de langage de programmation de haut niveau en sries dinstructions-machine directement excutables par lordinateur.

Compilateur et Interprteur : dfinitions


le compilateur traduit les programmes dans leur

ensemble : tout le programme doit tre fourni en bloc au compilateur pour la traduction
linterprteur traduit les programmes instruction

par instruction dans le cadre dune interaction continue avec lutilisateur


Java utilise les deux !

Compilation dun programme: Architecture en C


Code en Ascii Compilateur Le code est compil sous forme objet rutilisable L'diteur de liens lie les diffrentes bibliothques entre elles pour crer l'excutable
010 010 010 010

Editeur de lien
010

Plateforme + OS

Compilation dun programme: Architecture en Java


Code en Unicode Compilateur API

0xCaf 0xCaf 0xCaf 0xCaf 0xCaf 0xCaf

Le code est compil dans un code intermdiaire (byte-code) La Machine Virtuelle charge les classes et interprte le code VM

Plateforme + OS

Compilation dun programme Java


fichier source excutable compilation Byte code commande : javac Salam.java interprtation

Salam.class b- ! p qs tu twxy<iit>b()

Salam.java public class Salam { public static void main (String[] args) { System.out.println("Salam Alaykom!"); } } commande : java Salam Salam Alaykom!

Linterprteur Java sappelle la machine virtuelle Java (Java Virtual Machine (JVM))

Bytecode
Bytecodes Java langage intermdiaire entre

compilation et excution.
Le terme bytecode vient de byte car chaque instruction

de la VMJ est code laide dun byte ( chaque instruction correspond un opcode de 8 bits).
Exemple : laddition de deux entiers est reprsent par

lopcode IADD et correspond 60 en hexadcimal.

La Plate-forme Java en bref


Programme Java API Virtuelle Machine de JAVA Machine relle

API (Application Programming Interface) : bibliothques de classes standard

Indpendance de la plateforme
Le byte-code assure la portabilit entre

diffrents environnements (machine/OS)


javac
0xCaf 0xCaf 0xCaf 0xCaf

bytecode

VM MacOS

VM Linux

VM Windows

Et Solaris, HP-UX, BSD etc...

Indpendance de la plateforme
JVM JVM Atari JVM Macintosh JVM Sun Sparc JVM DEC Alpha JVM PC Pentium

Java Salam.class Salam.java


Intel (Linux Ubuntu)

Intel (Linux Ubuntu) C++ salam.o salam.cc

Java : La JVM pour processeurs Intel ou AMD peut interprter du bytecode gnr sur C++ : le code sur Pentium est inutilisable sur Sparc (sauf ventuelle cross-compilation)

Conventions de nommage en Java

Nom de classe :
HelloWorld

Commencez chaque mot par une majuscule


MonPremierProgramme

Nom de variable ou mthode :


maPremiereVariable maPremiereMethode nb1 main

Commencez chaque mot par une majuscule, sauf le premier

Usage non recommand :


mapremierevariable ma_premiere_variable

Types de base
Sont utiliss pour dclarer les variables
int i = 121; char car = C; double x = 12.98705;

Types de base
Type de base
boolean byte short int long float double char

Type
boolen entier entier entier entier virgule flottante virgule flottante caractre

Nombre de bits
32 (effectifs) 8 16 32 64 32 64 16

Valeurs possibles
true et false signes signes signes signes IEEE 754 IEEE 754 Unicode

Modifiable / non modifiable


La nature modifiable ou non modifiable dune donne peut tre dfinie lors de la dclaration par lindication du mot rserv final. Elle ne pourra donc plus tre modifie par le programme (toute tentative de modification produira un message d'erreur lors de la compilation).
Exemples : final double PI = 3.141592653; final int MAX_SIZE=15 ;

Convention de nommage pour les constantes : on utilise des lettres majuscules, au besoin spare par les _.

Typage fort

Java est un langage typage fort :


Chaque variable a un type La valeur doit tre du mme type que la variable On ne peut (normalement) pas mlanger des variables de

type diffrent

Pourquoi?
Utilisation efficace de la mmoire Vrification de la logique du programme

Les rgles pour int et double sont plus souples :


Transtypage automatique : int double Transtypage explicite (explicit cast) : double int

Typage fort (2)


Un int droite peut devenir un double gauche mais pas vice versa :
int i; double d; d = 1.7; Oui d = 1; Oui, .0 ajout i = 1; Oui i = 1.7; Non !!!

On peut forcer une conversion double int :


i = (int)1.7; Oui, valeur tronque, i vaut 1 i = (int)d; Oui, idem

Attention : Valeur tronque ne veut pas dire valeur arrondie !

Le type String
Une chane de caractres est dclare avec le mot-cl String Ce nest pas un type de base Il se manipule comme un type de base Ce nest pas quivalent un tableaux de caractres

String s = "Bonjour tous le monde!"


Loperateur + est utilis pour concatner les chanes de caractres

Les tableaux
Deux syntaxes pour lallocation :
int[] monTableau = new int[10]; int monTableau[] = new int[10];

Une mthode peut renvoyer un tableau


public class Test { static int[] construireTableau (int dimension) { int tab[] = new int[dimension]; return tab; } }

Les tableaux (initialisation)


Initialisation statique :
int[] monTableau = {1, 2, 3};

Initialisation dynamique :
int[] monTableau = new int[10]; for (int i = 0; i < param.lenght ; i++){ param[i]= i; }

length: renvoie la dimension du tableau

Lindice des lments varie de 0 monTableau.length 1

Type volu
String s = "Salam!"; int [] t = {1, 2, 3};
S t

/0xFF0D

/0xAF01

Salam!

Entres-Sorties
Un minimum dinteractivit...
Affichage : System.out.print(...) / System.out.println(...) : prdfinis dans Java Lecture (dun entier) :
import java.util.Scanner ;

Scanner keyb = new Scanner(System.in) ;


int i = keyb.nextInt() ;

Mthodes statiques

Avant ltude du concept dobjets on ne peut utiliser que des variables et mthodes statiques dans une classe. Toute mthode statique dune classe peuvent tre invoque depuis nimporte quelle autre mthode statique de la classe

l'ordre de dclaration des mthodes na pas dimportance

Pour invoquer mthode dune autre classe il faut la prfixer par NomClasse.

Exemple: Math.random(); Arrays.sort(monTableau);

Ne pas oublier import pour les classes dun autre package que java.lang import java.util.Arrays

Surcharge (exemple) :
void affiche (int arg) ; void affiche (double arg) ; void affiche (int arg1, int arg2) ;

Mais il est possibilit davoir des mthodes avec des signatures identiques dans des classes diffrentes

Mthode et passage des arguments


Lvaluation de lappel de mthode peut tre schmatis de

la faon suivante
La mthode m est souvent appele mthode auxiliaire

Passage par valeur : type m(typedeBase arg) ; m(x) x ne peut pas tre modifi par m

Passage dune rfrence (par valeur aussi) : type m(typeObjet arg) ; m(x) la rfrence x ne peut pas tre modifie par m m(x) lobjet rfrenc par x peut tre modifi par m

Quiz
Soit la situation suivante (pseudo-code) o Type

est un type de base:


... void methode(Type v){ // traitement modifiant v } // ailleurs, (dans le programme principal, par exemple): Type v1 = ..; // initialisation de v1 methode(v1); // v1 est-elle modifie ici ou non??? }

Si Type est un type volu?

Quiz

Quaffiche le code suivant ?


class Test { public static void main(String[] args) { int val = 1; m(val); System.out.println(" val= " + val); } static void m(int x) { x = x + 1; System.out.print("x= " + x); }

Quiz

Quaffiche le code suivant ?

1 tab \xFD0A

class Test { public static void main(String[] args) { int[] tab = {1}; m(tab); System.out.println(" tab[0]= " + tab[0]); } static void m(int[] x) { int[] t = {100}; x = t; //Modification de la rfrence //(on met une autre adresse dans x) System.out.print("x[0]= " + x[0]); } }

100

x \xFFCC

t \xFFCC

Quiz
Quaffiche le code suivant ?
class Test { public static void main(String[] args) { int[] tab = {1}; m(tab); System.out.println(" tab[0]= " + tab[0]); } static void m(int[] x) { x[0] = 100; // modification de lobjet rfrenc System.out.print("x[0]= " + x[0]); } }

Oprateurs

Priorits (par ordre dcroissant, tous les oprateurs dun mme groupe sont de priorit gale) : ! ++ --, * / %, + -, < <= > >=, == !=, ^ &&, ||

Notation abrge : x = x <op> y, o <op> est un oprateur arithmtique, peut aussi scrire : x <op>= y (exemple : x += y)

Test conditionnel
class Test { public static void main (String args[]) { int compteur = 0; if (compteur == 0) { debut = true; System.out.println("Dbut de la partie"); } else if (compteur ==10) System.out.println("Fin de la partie"); else System.out.println("Partie en cours"); } }

Boucles while
class Test { public static void main (String args[]) { int c; do { System.out.println("Entrez un nombre < 10"); c= lireUnInt(); } while (c>10); while (c>0) afficher (c--); } } public static int lireUnInt() {} public static void afficher (char c) {} }

Boucles for
class Test { public static void main (String args[]) { int i; for (i=0 ; i <=5 ; i++) { System.out.println (i); } for (int j=0 ; j <=5 ; j++) { System.out.println (i); } // i est accessible // j nest pas accessible }}

Switch
import java.io.IOException; class Test { public static void main (String args[]) throws IOException { char c = (char) System.in.read(); switch(c) { case 'o': case 'O' : System.out.println("Oui"); break; case 'n' : case 'N' : System.out.println("Non"); break; default : System.out.println("Mauvaise rponse"); break; } Le switch ne sapplique

}}

quau type entier ou caractre.

Quiz
1. Quel est le rsultat du segment de code suivant : short unShort = 0xA000; unShort = unShort>>2; 2. Combien de fois est excute la boucle suivante : for (int i=0; i < 10; i++) i++; 3. Que gnre le segment de code suivant ? double x, y; float z; x = y = 2.0; z = x*y; 4. En C++, le code suivant est lgal, mme sil ne gnre pas forcment les rsultats attendus par le programmeur. Ce code est-il lgal en Java, et comment le transcrire sinon ? int x, y=2; if (x=y) { // ... }

Quiz
5. Que vaut la variable x dans lexemple suivant, selon que la valeur initiale de x est 0, 1 ou 4 ? int x; // ... switch(x) { case 0 : x++; break; case 1 : x++; case 2 : x++; case 3 : x++; break; default : x++; }

Premier programme JAVA


import java.util.Scanner ; public class Program1{ private static int i ; public static void main(String [] args) { Scanner keyb = new Scanner(System.in) ; System.out.print("Entrer i : "); int i = keyb.nextInt() ; System.out.println("i + 1 = " + (i + 1)) ; } } Remarquez le respect de

la norme de nommage!

Exercice 1: Equation2.java Ecrire en JAVA un programme de rsolution de lquation ax2+bx+c=0

Quiz
Donner la ligne de command permettant la compilation

du programme Equation2? Quel est le fichier gnr? Donner la ligne de command pour lexcuter? Vrai ou Faux :
Equation2.java est portable Equation2.class est portable Equation2.class peut tre excuter sur autre machine mme

selle ne dispose pas de JVM. Sur chaque machine (microprocesseur) sinstalle une JVM diffrente. On peut affecter une variable qui nest pas statique lintrieur de la fonction main.

Vous aimerez peut-être aussi