POO : JAVA
Pr Sara SEKKATE
Intelligence Artificielle & Génie Informatique
2022-2023
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 1 / 17
Éléments de programmation Java
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 2 / 17
Méthodes
Syntaxe
modificateur type de retour nomMethode(liste des paramètres){
//corps de la méthode
}
Exemple
p u b l i c s t a t i c i n t max ( i n t m1 , i n t m2) {
i n t r e s ; // v a r i a b l e l o c a l e
i f (m1<m2) r e s=m2 ;
e l s e r e s=m1 ;
return res ;
}
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 3 / 17
Appel d’une méthode
int z=max(13,15);
ou
int x=12, y=15;
int z=max(x,y)
x et y sont des arguments.
Le type de retour est void si la méthode ne retourne pas de valeur.
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 4 / 17
Différents types de passage de paramètre
Passage par valeur
A l’appel de la méthode, c’est la valeur de l’argument qui est transmise au paramètre
correspondant
L’argument n’est pas affecté par les modifications éventuelles du paramètre dans le corps
de la méthode
Passage par référence
Le paramètre peut être une référence (ex : tableau)
La valeur de l’argument transmise est celle de la référence
La référence reste inchangée mais l’élément référencé peut changer
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 5 / 17
Surcharge de méthodes
On appelle signature d’une méthodes, la séquence :
<nomMethode, liste des paramètres>
Ex : Signature de la méthode max: <max,int,int>
Remarque : Le type de retour et les modificateurs ne font pas partie de la signature
Règle
Deux méthodes dans un bloc doivent être de signatures différentes.
−→ On peut avoir dans un bloc des méthodes de même nom du moment qu’elles
possèdent des listes de paramètres différentes
On parle de surcharge
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 6 / 17
Surcharge de méthodes
Dans le cas de la surcharge, le compilateur choisit la version de la méthode la plus adaptée
S’il y a ambiguïté, une erreur est générée
Exemple
avec
double max(int,double){}
double max(double,int){}
Un appel tel que max(1,2) est ambigu
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 7 / 17
Méthodes à liste variable d’arguments
On reconnaît une méthode à nombre variable de paramètres grâce à la syntaxe ...
La définition des méthodes avec un nombre variable d’arguments est rendue possible sous
certaines conditions :
Les arguments "non réguliers" doivent être de même type.
Le paramètre correspondant est le seul "non régulier" dans la liste des paramètres et est
placé en dernier.
Ce paramètre est traité comme un tableau
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 8 / 17
Méthodes à liste variable d’arguments - Exemple -
/∗ r e t o u r n e l e p r e m i e r e n t i e r d i v i s i b l e p a r l e c a r r é d ’ un e n t i e r donn é ∗/
public static int d i v i s i b l e ( int i , int . . . j ){
i f ( j . l e n g t h ==0) r e t u r n 0 ;
f o r ( i n t k =0;k<j . l e n g t h ; k++){
i f ( j [ k ]%( i ∗ i )==0) r e t u r n j [ k ] ;
}
return 0;
}
Exemple d’appels
int i = divisible(5);
int i = divisible(5,7,25)
int i = divisible(5, new int[]{7,25,29})
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 9 / 17
Chaînes de caractères : le type String
Les chaînes de caractères ne sont pas considérées en Java comme un type primitif ou
comme un tableau.
On utilise une classe particulière, nommée String, fournie dans le package java.lang.
Les variables de type String ont les caractéristiques suivantes :
leur valeur ne peut pas être modifiée
on peut utiliser l’opérateur + pour concaténer deux chaînes de caractères
String s1 = "Hello", s2 = "World";
String res = s1+s2 //res=="HelloWorld"
Rq : Si la concaténation a un opérande qui n’est pas de type String,
il est converti en String.
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 10 / 17
Fonctionnalités de base de la classe String
String e = ""; // chaîne vide
String s = "xxx";
String ss = new String(s);
String v = new String();
s.length() //longueur de la chaine
s.charAt(i) // accès au ième caractère 0 ≤ i ≤ s.length()
String u = s.substring(0,3) ; // [0,3[
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 11 / 17
Fonctionnalités de base de la classe String
s1 == s2; //teste les références
s1.equals(s2); //teste les contenus
s1.equalsIgnoreCase(s2); //même effet que equals mais en ignorant majuscule/minuscule
int i = s1.compareTo(s2) //comparaison lexicographique
// i>0 si >, i<0 si <, i==0 si ’equals’
int i = s1.compareToIgnoreCase(s2);
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 12 / 17
Entrées-sorties de chaînes
Lecture à partir du flux d’entrée standard : System.in
Il faut d’abord associer un "Scanner" au flux:
Scanner input= new Scanner(System.in);
Sur input, on peut appeler l’une des méthodes :
String s =input.nextLine();//lit une ligne
String s =input.next()//lit un mot
int i =input.nextInt()//lit un entier
double d =input.nextDouble()//lit un double
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 13 / 17
Entrées-sorties de chaînes
boolean b =input.hasNext();//Y-a-t-il encore un mot ?
boolean b =input.hasNextInt();//Y-a-t-il encore un entier ?
boolean b =input.hasNextDouble();//Y-a-t-il encore un double ?
Lecture à partir d’un fichier
Il suffit d’associer le "Scanner" au fichier :
Scanner input= new Scanner(new File("fichier.txt"));
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 14 / 17
Entrées-sorties de chaînes
Affichage sur le flux de sortie standard : System.out
System.out.print(chaine+...) ;
System.out.println(chaine+...);
Sortie sur un fichier
Associer un "PrintWriter" au fichier :
PrintWriter output = new PrintWriter("fichier.txt")
Sur output, possibilité d’appeler des méthodes telles que :
output.print("");
output.println("");
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 15 / 17
En résumé
La lecture du flux d’entrée peut se faire via l’objet Scanner.
L’objet Scanner se trouve dans le package java.util que vous devrez importer.
Pour pouvoir récupérer ce que vous allez taper dans la console, vous devrez initialiser
l’objet Scanner avec l’entrée standard, System.in.
Il y a une méthode de récupération de données pour chaque type (sauf les char) :
nextLine() pour les String, nextInt() pour les int, etc.
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 16 / 17
Exercices
Exercice 1: Soit un fichier texte f
1. Compter le nombre de mots de f.
2. Trier dans un tableau les mots de f. Utiliser un tri par insertion.
3. Enregistrer le résultat dans un autre fichier texte.
Exercice 2: Soit deux fichiers texte f et g. Afficher à l’écran les mots apparaissant dans f
et n’apparaissant pas dans g.
Exercice 3 : Écrire une méthode qui teste si une chaîne de caractères est un palindrome.
Pr S.SEKKATE (IAGI) POO : JAVA 2022-2023 17 / 17