Programmation orientée Objet en langage JAVA Pr. Jihane Alami Chentoufi Département d’Informatique Faculté des Sciences- Kénitra-
Année Universitaire: 20102010-2011
1. 2. 3. 4. 5. 6.
2
Introduction au langage Java Bases du langage Classes et Objets HĂŠritage HĂŠritage et polymorphisme Package, collections et exceptions
Pr. Jihane Alami
Partie 1: Introduction au langage Java
3
Pr. Jihane Alami
Langages de programmation Types de langage de programmation: 1. dépendants des machines: langage machine, assembleur : pas de
réutilisation suivant les plateformes. 2. procéduraux : basés sur le concept d'appel procédural, ex. C, Pascal,
Cobol, Fortran, VB, etc. 3. orientés objet : se fondent sur des objets qui peuvent regrouper des
données et des méthodes. Ex. C++(1980) , Ada95, Java.
4
Pr. Jihane Alami
POO Vs. Programmation Structurée Objectifs de la POO: 1. 2. 3. 4.
Facilité la réutilisation de code, encapsulation et abstraction Facilité de l’évolution du code Améliorer la conception et la maintenance des grands systèmes Programmation par « composants ». Conception d’un logiciel à la manière de la fabrication d’une voiture
Programmation structurée: 1. 2. 3.
5
Une zone pour les variables Une zone pour les fonctions Chaque fonction résout une partie du problème
Pr. Jihane Alami
Historique de Java Mis au point en 1991 par la firme Sun Microsystems ( Projet Green) :
- Nommé Oak (chêne en français) - Créé par James Gosling. - Objectif : concevoir un langage orienté objet spécifiquement conçu pour être indépendant des plateformes, robuste et fiable. Renommé Java en 1995
- Etendu, amélioré et sécurisé pour être utilisé sur Internet: capable de faire fonctionner des applets (des petites applications fonctionnant dans un navigateur)
6
Pr. Jihane Alami
Applications Java En Java on peut développer : Les applications : applications standards fenêtrées. Les applets : s’exécutent au sein d’un navigateur Web et sont automatiquement chargées
à partir d’un serveur Web. Servelets: des applications Java fonctionnant du côté serveur; permettent de gérer des
requêtes HTTP et de fournir au client une réponse HTTP dynamique (donc de créer des pages web dynamiques). Java Server Pages (JSP): permet aux développeurs de générer dynamiquement du code
HTML, XML ou tout autre type de page web.
7
Pr. Jihane Alami
Avantages Java Langage objet “pur“: il n’existe ni fonctions, ni procédures, la programmation se fait
uniquement par classes. Mémoire: la gestion de la mémoire n’est pas à la charge du programmeur ( présence
d’un « garbage collector ») Java est fondé sur une syntaxe très proche du C++ Robuste: typage des données très fort, pas de pointeur, etc. Sûr: mécanisme d’exception.(un débordement de tableau déclenchera une exception Portable: Java n’est pas compilé à destination d’un processeur, mais dans un code
intermédiaire pour être interprété sur la machine virtuelle. 8
Pr. Jihane Alami
Outils de développement Java Outils de développement gratuit :
http://www.oracle.com/technetwork/java/javase/downloads/index.html Software Developpement Kit (anciennement dénommé JDK) : 1.
javac,
2. java, 3.
appletviewer,
4. Javadoc 5. Jdb 6. etc Indépendance de la plateforme : le code compilé peut être exécuté sur de
nombreuses plateformes : 1.
Unix,
2. Windows, 3. Mac, 4. de gros calculateurs. 9
Pr. Jihane Alami
Versions de Java Avant Java 2, une seule édition JDK (édition standard). Java 2 comporte 3 éditions:
J2SE, Java 2 Standard Edition : développement d'applications pour ordinateurs personnels J2ME, Java 2 Micro Edition : pour systèmes embarqués J2EE, Java 2 Enterprise Edition : pour applications d’entreprises
Chaque édition propose un environnement complet pour le développement et l'exécution d'applications basées sur Java et comprend notamment JVM ainsi qu'un ensemble de classes.
10
Pr. Jihane Alami
Fonctionnement Fichier source Java: 1. 2. 1. 2. 1.
Fichier utilisé lors de la phase de programmation Le seul fichier réellement intelligible par le programmeur Byte-Code Java: Code objet destiné à être exécuté sur toute « Machine Virtuelle » Java Provient de la compilation du code source Machine Virtuelle Java: Programme interprétant le Byte-Code Java et fonctionnant sur un système d’exploitation particulier Conclusion : il suffit de disposer d’une « Machine Virtuelle » Java pour pouvoir exécuter tout programme Java même s ’il a été compilé avec un autre système d’exploitation
11
Pr. Jihane Alami
Machine virtuelle Java JVM Stations de travail, Network
Computers Téléphones portables Cartes à puces etc
12
Pr. Jihane Alami
Principales étapes d’un développement 1. Création du code source: Outil : éditeur de texte, IDE (Integrated Development
Environment) 2. Compilation en Byte-Code A partir du code source Outil : compilateur Java javac 3. Diffusion sur l’architecture cible Transfert du Byte-Code seul 4. Exécution sur la machine cible Exécution du Byte-Code java Outil : Machine Virtuelle Java 13
Pr. Jihane Alami
Compilation et exĂŠcution du code Java Compilation: javac [options] fichiers_sources
exemple : javac MaClasse.java MaClasse.class ExĂŠcution: java [options] nom_classe
exemple: java MaClasse lance la JVM
14
Pr. Jihane Alami
‘ PATH & CLASSPATH’ JDK
Bin
Lib
PATH: une variable d'environnement qui définit les répertoires où doivent être cherchés les exécutables lorsqu'une commande est tapée dans l'interpréteur de commandes MS-DOS. Poste de travail Avancé Variables d’environnement CLASSPATH: une variable d'environnement qui définit les répertoires où doivent être cherchés le byte-code et/ou les sources des classes java lorsqu’on utilise le compilateur java (javac) ou lancez la machine virtuelle java (java) Poste de travail Avancé Variables d’environnement
15
Pr. Jihane Alami
Partie 2: Bases du langage Java
16
Pr. Jihane Alami
Premier programme Java public class PremierProg { public static void main(String[ ] args) { System.out.println("Voci mon premier programme en Java"); } } public class PremierProg: Nom de la classe public static void main : La fonction principale équivalent à la fonction main du C/C++ String[] argv: Permet de récupérer des arguments transmis au programme au moment de son lancement System.out.println("Voci mon premier programme en Java"): Méthode d'affichage dans la fenêtre console
17
Pr. Jihane Alami
Types de variables Il existe deux types de données:
- Types primitifs: entiers, caractères, booléens, réels, …. - Types de référence : tableaux, objets.
18
Pr. Jihane Alami
Types primitifs Ne sont pas des objets; Syntaxe : <type> identificateur; Les différents types :
- Quatre types de données pour les valeurs entières : byte, short, int et long. - Deux types de données pour les valeurs décimales : float et double. - Un type de données qui permet de stocker un caractère: char. - Un type de données logique nommé boolean qui autorise seulement deux valeurs : true (vrai) ou false (faux).
19
Pr. Jihane Alami
Types primitifs Primitive
Signification
char
Caractère
2
byte
Entier très court
1
short
Entier court
2
int
Entier
4
long
Entier long
8
-9223372036854775808 à 9223372036854775807
float
flottant (réel)
4
-1.4*10-45 à 3.4*1038
double
flottant double
8
4.9*10-324 à 1.7*10308
1
0 ou 1 (toute autre valeur que 0 est considérée égale à 1)
boolean
20
Pr. Jihane Alami
booléen
Taille (en octets)
Plage de valeurs acceptée valeur de caractères Unicode (65000 caractères possibles) -128 à 127 -32768 à 32767 -2 147 483 648 à 2 147 483 647
Initialisation des variables Déclaration des constantes Initialisation 1.
Une variable peut recevoir une valeur au moment de sa déclaration : char a = ‘A’; int b = 1;
2.
Cette instruction joue le même rôle : char a; a= ‘A’; int b; b= 1;
Constantes 1. Ce sont des variables dont la valeur ne peut être affectée qu'une fois 2. Elles ne peuvent plus être modifiées 3. Elles sont définies avec le mot clé final
final int a = 5; final int b; b= 8; a= 10; // erreur : a est déclaré final
21
Pr. Jihane Alami
Structures de Contrôle 1.
Conditionnel Si alors sinon : « if condition {…} else {…} »
2.
Itérations Boucle pour: « for (initialisation ; condition ; modification) { … } » Tant que : « while (condition) { … } » Faire jusqu’à : « do { … } while (condition) »
3.
Sélection bornée/branchement conditionnel Selon faire : « switch choix { case valeur0 : … case valeur1 : … default: …} » Le mot clé break demande à sortir du bloc
22
Pr. Jihane Alami
Structures de Contr么le public class exempleIf{ public static void main (String[] argv) { int i = 10; if (i < 0) System.out.println("Le nombre est n茅gatif"); else System.out.println("Le nombre est positif"); } }
23
Pr. Jihane Alami
Structures de Contrôle public class exempleSwitch{ public static void main (String[] argv) { int nbre = 5; switch (nbre) { case 1: System.out.println("Ce nombre est tout petit"); break; case 2: System.out.println("Ce nombre est tout petit"); break; case 3: System.out.println("Ce nombre est un peu plus grand"); break; case 4: System.out.println("Ce nombre est un peu plus grand"); break; case 5: System.out.println("Ce nombre est la moyenne"); break; case 6: System.out.println("Ce nombre est tout de même grand"); break; case 7: System.out.println("Ce nombre est grand"); break; default: System.out.println("Ce nombre est très grand, puisqu'il est compris entre 8 et 10"); } } } 24
Pr. Jihane Alami
Structures de Contr么le public class exempleFor{ public static void main (String[] argv) { for(int i = 1; i <= 10; i++) { System.out.println("Voici la ligne "+i); } } }
25
Pr. Jihane Alami
public class exempleWhile{ public static void main (String[] argv) { int i = 0; while(i < 10) { System.out.print("i vaut : "+i); i ++; } } }
Structures de Contr么le public class exempleDoWhile{ public static void main (String[] argv) { int i =0; do { System.out.println("i est : " + i); i++; }while(i < 5); } }
26
Pr. Jihane Alami
Opérateurs sur les types primitifs Opérateurs arithmétiques 1. 2. 3. 4.
Unaires : « +a, -b » Binaires : « a+b, a-b, a*b, a%b » Incrémentation et décrémentation : « a++, b-- » Affectation élargie : « +=, -=, *=, /= »
Opérateurs comparaisons 1. 2. 3.
« a==b, a!=b, a>b, a<b, a>=b, a<=b » Et : « a && b » Ou : « a || b »
Conversion de type explicite (cast: typage forcé) 1.
« (NouveauType)variable » a = (int) b; c = (float) d; int i = (int)1.07;
27
Pr. Jihane Alami
Opérations sur les types primitifs Affecter et recopier un type primitif « a=b » signifie a prend la valeur de b Toute modification de a n’entraîne pas celle de b 2. Comparer un type primitif « a == b » retourne « true » si les valeurs de a et b sont identiques 1.
Affectation
28
Pr. Jihane Alami
Les tableaux en Java Fournissent des collections ordonnées d’éléments Les valeurs contenues sont repérées par un indice (de 0 à n-1), Les éléments d’un tableau peuvent être:
Des variables d’un type primitif (int, boolean, double, char, …) 2. Des références sur des objets (à voir dans la partie Classes et Objets) Les tableaux en Java sont considérés comme des objets 1.
Création d’un tableau 1. 2. 3.
29
Déclaration = déterminer le type du tableau Dimensionnement = déterminer la taille du tableau Initialisation = initialiser chaque case du tableau Pr. Jihane Alami
Les tableaux en Java: Déclaration Déclaration: précise simplement le type des éléments du tableau
Exemple: int [] tab; ou int tab [] ; //référence sur l’objet tab String chaine[ ]; ou String chaine[] //référence sur l’objet chaine Attention: une déclaration de tableau ne doit pas préciser de dimensions du tableau: int tab[5]; // erreur
30
Pr. Jihane Alami
Les tableaux en Java: Dimensionnement / instanciation Instanciation: dimensionne le tableau avec une taille fixe Le nombre d’éléments du tableau sera déterminé quand l’objet tableau sera
effectivement créé en utilisant le mot clé new La taille déterminée à la création du tableau est fixe, elle ne pourra plus être modifiée par la suite Longueur d’un tableau : «Tableau.length » Exemple: int[] Tableau; // Déclaration Tableau = new int[3]; // Dimensionnement La création d’un tableau par new: 1. Alloue la mémoire en fonction du type de tableau et de la taille 2. Initialise le contenu du tableau à 0 pour les types simples
31
Pr. Jihane Alami
Les tableaux en Java: Initialisation Initialisation:
Les indices commencent à zéro 2. l’accès à un élément d’un tableau s’effectue suivant cette forme: Tab[ind]; // ind>= 0 et <Tab.length 3. Java vérifie automatiquement l’indice lors de l’accès (exception levée) Autre façon d’initialisation : en donnant explicitement la liste de ses éléments entre {…} 1.
int[ ] monTab = {1, 2, 3} est équivalent à: monTab = new int[3]; monTab[0] = 1; monTab[1] = 2; monTab[2] = 3;
32
Pr. Jihane Alami
Les tableaux multidimensionnels en Java: Tableaux dont les éléments sont eux mêmes des
tableaux Déclaration: type[][] tab; Tableaux rectangulaires: Dimensionnement: tab = new type[2][3] Tableaux non-rectangulaires Dimensionnement : tab = new type[2] tab[0] = new type[2] tab[1] = new type[3] 33
Pr. Jihane Alami
Commentaires et mise en forme Documentation des codes sources
Utilisation des commentaires // Commentaire sur une ligne complète int b = 34; // Commentaire après du code /* Le début du commentaire ** Je peux continuer à écrire … Jusqu’à ce que le compilateur trouve cela */ 2. Utilisation de l’outil Javadoc (à voir dans la partie les Indispensables) Mise en forme Facilite la relecture Crédibilité assurée !!!! Indentation à chaque niveau de bloc 1.
34
Pr. Jihane Alami