En POO, on peut manipuler des variables

publicité
01- LES BASES EN JAVA
Introduction
DEFINITION :
JAVA est un langage de programmation objet créé en 1991 par la firme Sun Microsystems.
Il est très proche du langage C++. C’est un langage portable (indépendant des plates formes : windows,
linux….), compilé et interprété. Java est en plus multitâche, robuste ( gestion d’erreurs et d’exceptions
intégrées au langage), gratuit, orienté client/serveur (traditionnel ou web).
Avec java, on peut écrire :
 Des applications client/serveur traditionnel
 Des applications côté cliente pour le web (applet)
 Des applications côté serveur pour le web (servlet)
OUTILS NECESSAIRES :
Pour écrire et mettre au point un programme, vous aurez besoin :

d'un éditeur de texte. Au choix :
o Les plus courants : bloc-notes, gvim, gedit
o Les plus appropriés pour java : jcreator
o Les spécialisés (IDE) : netbean, eclipse

du kit de développement appelé J2SE SDK (Software Development Kit) contenant :
o un compilateur : javac
o un interpréteur : java
o la machine virtuelle java appelée J2SE JRE (Java Runtime Environment )
o des utilitaires. Ex : javadoc pour générer de la documentation , jar pour générer des archives,
appletviewer pour visualiser des applets,….
LIENS UTILES :



Le site dédié à JAVA par son constructeur : http://java.sun.com/
Et plus particulièrement la documentation sur les classes (API) :
http://java.sun.com/j2se/1.4.2/docs/api/index.html
Des cours et exercices en ligne : http://java.developpez.com/cours/
PREMIER PROGRAMME :
Stocker une information simple
Vous connaissez déjà l’utilité des variables, mais pas toujours leurs natures.
Avec JAVA, on peut manipuler des variables :
 Simples : entier, caractère,…
 Structurées ou bien dites complexes : les objets
 Multiples : collections, listes ou tableaux
1
MANIPULATION D’UNE VARIABLE DITE SIMPLE
Java étant un langage fortement typé, contrairement à PHP, vous devez déclarer une variable avant de pouvoir
l’utiliser : déclarer, c’est définir son type.
Syntaxe pour définir une variable
type nomVariable ;
Exemple
int a ;
int b , c ;
// a est un entier
// b et c sont des entiers
Remarque : On peut affecter une valeur à une variable dès sa définition : c’est une initialisation !
Exemple : int a = 3 ;
Opérations possibles sur une variable dite simple
On peut :
 appliquer toutes les opérations élémentaires : + - / *
 les comparer 2 à 2 à l’aide des opérateurs : > >= < <= !=
REGLE : toute variable doit être déclarée et initialisée avant de pouvoir être utilisée.
Exemple : somme = somme + 12 // provoquera une erreur de compilation
CONVENTION POUR NOMMER UNE VARIABLE
Le nom d’une variable commence par une minuscule. Cette convention prend son sens en POO, car seuls
les noms de classes doivent débuter par une majuscule.
LA PORTEE DES VARIABLES
Une variable a une durée de vie liée à sa déclaration.
Exemple : si une variable est déclarée à l’intérieur d’ une structure conditionnelle, elle n’a pour durée de vie
que la structure. En dehors, elle n’existe plus.
....
if (a>b)
{ int max = a ; }
else
{ int max = b ; }
System.out.println(“le max est”+ max); // provoquera une erreur de compilation
LES TYPES SIMPLES

Catégorie entier
Elle permet l’emploi de valeurs numériques entières et signées.
Type
byte
short
int
long
Taille occupée dans la mémoire
1 octet
2 octets
4 octets
8 octets
2
Eventail de valeurs
De –128 à 127
De 32 768 à 32 767
De – 2 147 483 648 à 2 147 483 647
De – 9 223 372 036 854 775 808
à 9 223 372 036 854 775 807

Catégorie réel
Elle permet l’emploi de nombres à virgule.
Type
float
double

Taille occupée dans la mémoire
4 octets
8 octets
Eventail de valeurs
-1.4*10-45 à 3.4*1038
4.9*10-324 à 1.7*10308
Catégorie texte
char : il sert à représenter des caractères isolés.
Un caractère est codé sur 2 octets.
L’éventail des valeurs est donc de 65 536 caractères différents (2 16).
ATTENTION :
'F' est considéré comme une variable de type char
"F" est considéré comme un objet de classe String

Catégorie logique
Il s’agit du type boolean.
Un caractère est codé sur 1 bit.
L’éventail des valeurs est : {false, true} ce qui est traduit par {0,1}
CONVERSION DE TYPES SIMPLES (CASTING)
On peut facilement changer le type d’une donnée, cela s’appelle faire une opération de cast.
Exemple :
int x;
x = (int) 8.324;
Exercice :
Des erreurs se cachent dans ces extraits de code, trouvez les puis corrigez les :
1.
int longueur, largeur = 5, perimetre ;
perimetre = longueur * largeur ;
2.
int a =10, b=15 ;
if (a>b)
max = a;
else
max = b;
3.
int a,b,c ;
a=2;
b=a;
c=c+b;
4.
5.
char genre ;
int prix ;
….. // genre est initialisé par une saisie utilisateur
if (genre == ‘A’)
prix = 10 ;
if (genre == ‘E’)
prix = 8 ;
System.out.println("Le prix est de" + prix);
6.
float prix ;
….. // prix est initialisé par une saisie utilisateur
if ( prix > 250 )
int prixAvecRemise = prix * 0.9 ;
System.out.println("Le prix :" + prix);
System.out.println("Le prix avec remise : "
+ prixAvecRemise);
float pi = 3.14 ;
int rayon = 2 ;
int perimetre = 2 * pi * (rayon * rayon) ;
3
Communiquer une information
AFFICHER UNE INFORMATION

En mode console : System.out.println(…)
System.out.print( expr ) ; // affiche à l’écran le contenu de expr
System.out.println( ) ; // saute une ligne
System.out.println( expr ) ; // affiche à l’écran le contenu de expr et saute une ligne
System.out.println( "Mon texte" ) ; // affiche à l’écran le texte et saute une ligne
System.out.println("Mon texte" + expr ) ; // affiche à l’écran le le texte et le contenu de expr
Remarque : Println et print sont des méthodes (fonctions) qui ont été définies plusieurs fois de manière à
fonctionner quelque soit le type de l’expression qu’on leur passe en paramètre.

En mode graphique : JOptionPane.showMessageDialog(…)
import javax.swing.*;
…..
JOptionPane.showMessageDialog (null,"Mon texte") ; // affiche une boite de dialogue contenant le texte
Remarque : La méthode showMessageDialog est définie dans la classe JOptionPane qui se situe dans le
package swing qui lui même est dans un plus gros package appelé javax. Remarque : un package est une
unité (un fichier) regroupant des classes.
Ainsi pour utiliser, cette méthode, vous pouvez :
o la préfixez par le nom des packages : javax.swing.JOptionPane.showMessageDialog (null,"texte") ;
o utilisez l’instruction d’import ( cf exemple ci dessus )
Pour les méthodes print et println , cela est inutile car elles font parties des classes standards.
RECUPERER UNE INFORMATION (SAISIE)

En mode console : lire …(…)
Tout comme en PHP, il n’existe pas de méthode prédéfinie pour lire les données saisies par l’utilisateur
dans une console. Alors, vous allez utiliser les méthodes définies dans la classe Lire (classe fournie en
TP). Cette classe n’est pas définie par Java. C’est un fichier que vous devrez donc avoir en permanence.
static String
static float
static int
static char
Class Lire
lireStr()
renvoie la saisie de l’utilisateur sous forme d’une donnée de type String
lireFloat()
renvoie la saisie de l’utilisateur sous forme d’une donnée de type float
lireInt()
renvoie la saisie de l’utilisateur sous forme d’une donnée de type int
lireChar()
renvoie la saisie de l’utilisateur sous forme d’une donnée de type char
4
Pour les utiliser, vous devrez faire référence à la classe afin que le compilateur puisse savoir où trouver
la définition de ces méthodes.
System.out.println(" Entrez votre age ") ;
int age = Lire.lireInt() ;

En mode graphique : JOptionPane.showInputDialog(…)
String nom = JOptionPane.showInputDialog (null,"Votre nom ") ;
Remarque : cette méthode ne sait renvoyer que des variables de type String.
Il faut alors utiliser des méthodes qui permettent de changer le type des données. Ex :
String sAge = JOptionPane.showInputDialog (null,"Votre age ") ;
Int age = Integer.parseInt(sAge ) ;
5
Structures conditionnelles et répétitives
Les instructions conditionnelles et répétitives sont généralement les mêmes quelque soit le langage.
Remarques :
o L’imbrication est toujours possible
o Pour former une condition, les règles sont aussi les mêmes quelque soit le langage, on utilise les
opérateurs de comparaison (<,>,==, !=…) et les opérateurs logiques (&&, ||| )
o S’il n’y a qu’une seule instruction, vous n’êtes pas obligé de mettre les accolades.
FAIRE DES TESTS
Syntaxe
if (condition )
{ // instructions … }
if (condition )
{ // instructions … }
else
{ // instructions … }
if (condition )
{ // instructions … }
elseif ( condition)
{ // instructions … }
else
{ // instructions … }
REPETER DES ACTIONS
Syntaxe
while (condition)
{ // instructions }
do
{// instructions }
while (condition);
for ( init° cpt; condition pour continuer ; pas du cpt)
{// instructions }
6
Premier objet : variable de type String
Une chaîne de caractère n’est pas considérée comme une variable simple, mais comme un objet de la classe
String, autrement dit une variable complexe de type String !
DECLARER UN OBJET STRING
Déclaration et initialisation d’un objet de classe String
String maChaine ;
maChaine = new String( "toto" ) ;
String maChaine = new String( "toto" ) ;
Remarques :
 On peut aussi initialiser un objet de classe String à l’aide d’une saisie utilisateur.
 Etant donné que String est un type couramment utilisé, déjà existant dans les langages procéduraux, les
concepteurs de JAVA ont voulu faciliter son utilisation. On peut donc écrire :
String maChaine = "toto" ;
MANIPULER UN OBJET STRING
Pour manipuler un objet String, il faut utiliser les méthodes définies pour la classe String.
En POO, on dit qu’on applique une méthode à un objet. Cela se traduit en programmation :
nomObjet . nomMethode(param1,…) ;
Exemple :
int taille = maChaine.length() ; // taille = 4
if (maChaine.equals("" ) == true)
System.out.println ("Chaîne vide") ;
Remarque : pour concaténer une chaîne de caractère, il existe une méthode mais vous pouvez utiliser
l’opérateur + .
EXTRAIT DES METHODES DE LA CLASSE STRING
boolean
boolean
boolean
String
String
Class String
endsWith(String suffix)
test if this String ends with the specifies suffix
equalsIgnoreCase( String anotherString)
Compares this String to another String ignoring case considerations.
equals( String anotherString)
Compares this String to another String
toLowerCase()
Converts all of the characters in this String to lower case using the rules of the default locale.
toUpperCase()
Converts all of the characters in this String to upper case using the rules of the default locale.
7
int
int
int
String
String
String
indexOf(int ch)
Returns the index within this string of the first occurrence of the specified character.
indexOf(int ch, int fromIndex)
Returns the index within this string of the first occurrence of the specified character, starting the
search at the specified index.
length()
Returns the length of this string.
replace(char oldChar, char newChar)
Returns a new string resulting from replacing all occurrences of oldChar in this string with
newChar.
subString(int beginIndex, int endIndex)
Returns a new string that is a substring of this string.
StartsWith( String prefix)
Tests if this string starts with the specified prefix.
Exercices :
1.
Ecrivez les programmes JAVA permettant :
a. D’afficher la somme 2 chiffres saisis par l’utilisateur.
b. D’afficher un message de bienvenue personnalisé après avoir saisi le nom de l’utilisateur.
2.
Que va afficher cet extrait de code :
String chaine = «incontournable» ;
boolean b = chaine.startsWith(«in»);
if ( b == true)
{
String sousChaine = chaine.substring(2,13) ;
System.out.println (« C’est le contraire de » + sousChaine) ;
}
b = chaine.endsWith(«s»);
if ( b == false)
System.out.println (« ce mot est au singulier ») ;
else
System.out.println (« ce mot est au pluriel») ;
3.
Ecrivez les programmes JAVA permettant :
a. D’afficher le nombre de lettre contenu dans un mot saisi par un utilisateur, ainsi que sa 1 ere et
dernière lettre
b. D’afficher le nom de l’utilisateur en majuscule et son prénom en minuscule excepté sa 1er lettre.
c. D’afficher le login d’un utilisateur, celui-ci est composé des 6ères lettres du nom puis de la 1ere
lettre du prénom. Remarque : java est un langage rigoureux, si vous demandez les 6ères lettres du
nom mais que celui-ci ne comporte pas 6 caractères, vous aurez un plantage de votre programme !
8
SUITE OUTILS DE BASE EN JAVA
Contrairement au php, les notions de tableaux et de listes sont claires. Un tableau permet de stocker un nombre
fixe de données alors que la liste permet de stocker un nombre indéterminé de données.
Collectionner un nombre fixe d’objets
LES TABLEAUX A UNE DIMENSION
Comme toute variable utilisée dans un programme, un tableau doit être déclaré afin de :
 Donner un nom à l’ensemble des valeurs à regrouper
 Définir la taille du tableau
 Déterminer le type des valeurs
Déclaration d’un tableau
type [ ] nomTableau ;
Exemple : float [ ] notes ;
// notes est un tableau de float
Création d’un tableau
nomTableau = new type [ taille ] ;
ou bien
nomTableau = new type [ ] {valeur1,valeur2,...} ;
Exemples :
notes = new float[35] ; //notes vient d’être créé pour pouvoir stocker 35 float.
mois=new String[]{« janvier », « février », « mars »,....}
La création et la déclaration peuvent être faites sur la même ligne !
On peut définir des tableaux de valeurs :
o de type simple
o de type structuré : tableaux d’objets
Remarques :
o La taille du tableau correspond au nombre maximal de valeurs à traiter. Il n’est plus
possible de la modifier en cours d’exécution ! Cependant il est possible de ne pas fixer la
taille avant la compilation en plaçant une variable au lieu d’une valeur numérique entre
les [].
o Tous les tableaux ont un attribut publique length.
LES TABLEAUX A DEUX DIMENSION
9
Déclaration et création d’un tableau à 2 dimensions
type [ ] [ ] nomTableau = new type [nbLignes] [nbColonnes];
Exemple : float [ ] [ ] px = new float[2] [5] ;
Collectionner un nombre indéterminé d’objets
Mieux encore que les tableaux, il existe les listes. Les listes permettent de stocker un nombre variable de valeurs
car le programmeur n’est pas contraint d’indiquer la taille de la liste lors de sa création. Mais dans la plupart des
langages, la gestion d’une liste est beaucoup plus complexe que la gestion d’un tableau. Excepté pour Java, en
effet, ce langage fournit deux types permettant de gérer facilement les listes : Vector et ArrayList .
DEFINITION DE LA CLASSE ARRAYLIST
La classe ArrayList permet de gérer les listes. Elle a succédé à la classe Vector.
Etant plus efficace, il est préférable de l’utiliser à la place des vecteurs ( objets de type Vector).
Cette classe est une classe de la bibliothèque java, elle est définie dans le package java.util.
Pour l’utiliser, il faut donc importer le package : import java.util.* ;
Alors que les tableaux sont une fonctionnalité du langage java, utilisables à tout moment.
CONSTRUCTION D’UNE LISTE
Comme toute variable utilisée dans un programme, une liste (ici, objet de type ArrayList) doit être déclarée puis
créée.
Déclaration d’une liste
ArrayList nomListe;
Création (ou construction) d’une liste
Il existe 2 constructeurs :
ArrayList()
ArrayList(int capacite)
nomListe = new ArrayList() ;
ou nomListe = new ArrayList(x) ;
Construit une liste ayant une capacité de 10 objets
Construit une liste ayant pour capacité celle passée en paramètre
x étant un entier > 0
Exemple :
Créez une liste: lstMatiere-Elle servira à stocker le nom des matières
Créez une liste: lstEtudiant-Elle servira à stocker des étudiants
La classe ArrayList gère un tableau d’objets. Plus précisément, elle gère un tableau de références à des
objets.
Lorsque le tableau est plein, la liste crée automatiquement un tableau plus grand et recopie tous les objets du
plus petit tableau vers le plus grand. Si vous connaissez déjà le nombre d’éléments que peut contenir la liste,
il est bon de l’indiquer, cela évite des réallocations coûteuses. Cela ne limite en rien le nombre d’éléments
effectifs puisqu’une liste est capable de s’agrandir en fonction des besoins.
Taille d’une liste
int
size()
Renvoie le nombre réel d’éléments contenus dans une liste
Exercice : Que vont afficher ces instructions ?
ArrayList lstEtud = new ArrayList(50);
10
System.out.println("taille de la liste : " + lstEtud.size());
Etudiant [] tabEtud = new Etudiant[50];
System.out.println("taille du tableau : " + tabEtud.length);
Remarques

Une liste est ordonnée, comme pour les tableaux un indice est géré pour chaque élément de la liste.
On peut donc accéder à chacun des éléments à l’aide de l’indice.

Contrairement aux tableaux, on ne définit pas le type des valeurs stockées dans une liste.
Une liste gère des élément de type Object. La classe Object représente l’ancêtre ultime de toutes les
autres classes.
N’importe quel objet, qu’il soit de classe Etudiant, String,… est avant tout de classe Object.
Donc une liste peut gérer n’importe quel type d’objet, excepté les types primitifs.
MANIPULATION D’UNE LISTE (OBJET DE CLASSE ARRAYLIST)
Ajouter des éléments ( des objets ) à une liste
boolean
void
add(Object o)
add(int indice, Object o)
Ajoute l’objet passé en paramètre en fin de liste- Renvoie true.
Insère l’objet passé en paramètre dans la liste à l’indice
spécifié
Exercice :
1. Ajouter 2 matières : alsi et amki à la liste des matières déclarée précédemment
2. Ajouter 2 étudiants à la liste d’étudiants déclarée précédemment. Ils doivent être rangés par ordre
alphabétique.
La classe Etudiant possède un constructeur : Etudiant( String nom, String prenom, int age)
Ajouter tout d’abord l’étudiant : (Gregory, Puchot,19)
Puis ajouter l’étudiant : (Adel,Zellama, 21)
Une liste se compose uniquement d’objets, elle ne peut pas stocker des valeurs de types primitifs, comme
peut le faire un tableau. Pour résoudre ce problème JAVA a prévu des classes qui redéfinissent les types
primitifs. Exemple : classe : Float, Integer, …
Exemple d’utilisation :
Integer a = new Integer(2) ;
Integer b = new Integer(4) ;
ArrayList lstNote = new ArrayList();
lstNote.add(a);
lstNote.add(b);
ArrayList lstNote = new ArrayList();
lstNote.add(new Integer(2));
lstNote.add(new Integer(4));
Remarque : il est donc possible de stocker des objets de différents types dans une même liste. Les collections
hétérogènes sont utiles dans de rares occasions. Cela n’est pas recommandé et traduit souvent une erreur de
conception.
Accéder aux éléments d’une liste
void
Object
set(int indice, Object o
)
get(int indice)
Place l’objet passé en paramètre à l’indice spécifié. Ecrase l’ancienne
valeur.
Récupère l’objet stocké à l’indice spécifié en paramètre.
Exercice : Modifier dans la liste des matières amki par amsi.
Remarque :
Pour travailler sur un objet contenu dans une liste, on doit avant tout extraire cet objet de la liste à l’aide de la
méthode get !
11
Extraire un élément d’une liste est assez complexe, car le type renvoyé par la méthode get est Object.
Il faut donc convertir l’objet dans le type souhaité. On dit que l’on doit caster explicitement l’objet qui nous
est renvoyé.
Exemple : Etudiant unEtudiant ;
unEtudiant = (Etudiant) lstEtudiant.get(1) ;
Exercice : Afficher les propriétés du 1er étudiant à l’aide de la méthode afficheToi() : void
Supprimer un élément d’une liste
Object
remove(int indice)
Supprime l’objet dont l’indice est spécifié en paramètre. Retourne l’objet
supprimé
Rechercher un objet dans une liste
int
indexOf(Object o)
Retourne l’indice de la 1ere occurrence de l’objet passé en paramètre dans la liste
Remarque : Cette méthode compare l’objet passé en paramètre aux objets de la liste en utilisant la méthode
equals de la classe Object. Or equals ne fait que vérifier si les 2 objets ont la même référence. Ce n’est donc
pas un test utile. Pour que cela fonctionne, il faut alors redéfinir equals au niveau de la classe utilisée. Ici : il
faut ajouter à Etudiant :
12
Téléchargement