Cours Java Tome 1
Cours Java Tome 1
Cours Java Tome 1
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 1
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 3
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
1- Historique :
Le langage Java est issu d’un projet de Sun Microsystems datant de 1990 développer JAMES GOSLING
et son équipe.
Certains langages ont été conçus pour appliquer à la lettre les principes de P.O.O. C’est notamment le
cas de Simula, Smalltalk et de Eiffel. Dans ce cas, tout est objet (ou instance de classe) et
l’encapsulation des données est absolue. Les procédures sont obligatoirement des méthodes, ce qui
revient à dire qu’il n’existe pas de procédures indépendantes, c’est-à-dire susceptibles de s’exécuter
indépendamment de tout objet.
Java n’appartient pas à cette catégorie, autrement dit un pur langage de P.O.O. pour les raisons ci-
dessous :
Java dispose de types dits primitifs pour représenter les entiers, les flottants, les caractères et
les booléens. Les variables correspondantes ne sont pas des objets. En POO pur ces types
primitifs seront utilisés que pour définir les champs d’une classe, donc finalement d’un objet ;
Une classe pourra comporter des méthodes particulières dites méthodes de classe (déclarées
avec le mot-clé static) qui seront utilisables de façon indépendante d’un objet. En POO pur il
n’y a pas de méthodes static.
L’encapsulation se trouve naturellement induite par la syntaxe du langage mais elle n’est pas
obligatoire. En POO pur l’encapsulation des champs est obligatoire.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 4
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Historiquement, ce sont les plus anciens. Dans de tels programmes, on fournit des informations à
l’écran sous forme de lignes de texte s’affichant séquentiellement, c’est-à-dire les unes à la suite des
autres. Pour fournir des informations au programme, l’utilisateur frappe des caractères au clavier
Entrent dans cette catégorie :
• Les programmes fonctionnant sur PC sous DOS ou, plus fréquemment, dans une fenêtre DOS de
Windows,
• Les programmes fonctionnant sous Unix ou Linux et s’exécutant dans une "fenêtre de commande".
Avec une interface console, c’est le programme qui décide de l’enchaînement des opérations :
l’utilisateur est sollicité au moment voulu pour fournir les informations demandées.
Dans ces programmes, la communication avec l’utilisateur se fait par l’intermédiaire de composants
tels que les menus, les barres d’outils ou les boîtes de dialogue, ces dernières pouvant renfermer des
composants aussi variés que les boutons, les cases à cocher, les boutons radio, les boîtes de saisie, les
listes déroulantes...
L’utilisateur a l’impression de piloter le programme, qui semble répondre à n’importe laquelle de ses
demandes. D’ailleurs, on parle souvent dans ce cas de programmation événementielle, expression qui
traduit bien le fait que le programme réagit à des évènements provoqués par l’utilisateur.
Le terme G.U.I. (Graphical User Interface) désigne ce genre d’interface.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 5
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
4- Java et la portabilité
Dans la plupart des langages, on dit qu’un programme est portable car un même code source peut
être exploité dans des environnements différents moyennant simplement une nouvelle compilation.
En Java, la portabilité va plus loin. La compilation d’un code source produit, non pas des motifs
binaires, mais un code intermédiaire formé de byte codes. D’une part, ce code est exactement le
même, quel que soit le compilateur et l’environnement concernés. Ces byte codes sont exécutables
dans toute implémentation.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 6
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
class NomclassePrincipale
{
public static void main(String [] Args)
{
-------------------------------
-------------------------------
}
}
NB :
Java est un langage fortement sensible à la casse c’est-à-dire qu’il fait la différence entre les
minuscules et les majuscules.
Par exemple si vous écrivez string au lieu de String il signale une erreur.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 7
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
- Le nom des classes composées d’un seul mot commence par une lettre majuscule et le reste
en minuscule.
- Si la classe est composée de plusieurs mots la première lettre de chaque mot en majuscule et
le reste en minuscule.
- Le nom des méthodes composées d’un seul mot s’écrit en minuscule.
- Si la méthode est composée de plusieurs mots la première lettre du deuxième mot en
majuscule et le reste en minuscule
- Tous les mots clés sont écrits en minuscule. - Les constantes prédéfinies en majuscule.
C:\\...\monrepertoire>Javac nomfichiersource.java
S’il n’y a aucune erreur dans votre code source vous verrez l’invite de commande à nouveau
C:\\...\monrepertoire>
Sinon le compilateur (javac) affiche la liste des erreurs que vous devez corriger et recompilez.
Après avoir fini exécutez maintenant le fichier byte code (.class) généré après la compilation.
NB :
Le nom du fichier byte codes ne porte pas forcement le même nom que le fichier source au fait il
porte le nom de la classe où se trouve la fonction main. Pour éviter des erreurs faites de telles sortes
que le fichier source possède le même nom lors de l’enregistrement. Pour exécuter votre programme
faite appel à la JRE en tapant la commande :
C:\\...\monrepertoire>Java nomfichierbytecodes
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 9
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
2- Les Réelles
float
double
3- Les caractères
Une variable de type caractère se déclare en utilisant le mot-clé char comme dans :
char c1, c2 ;
4- Les booléens
Ce type sert à représenter une valeur logique du type vrai/faux. En Java, on peut disposer de variables
de ce type, en utilisant le mot clé boolean :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 10
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
int n = 15 ;
Rien n’empêche que la valeur de n n’évolue par la suite. Il est aussi possible d’associer la déclaration
de plusieurs variables si elles sont de même type :
int n, m=9, p ;
2- Notion de Constantes
En Java les constantes sont des variables déclarées de type final c’est ce mot clé qui permet de
déclarer une constante.
En théorie, vous n’êtes pas obligé d’initialiser une variable déclarée final lors de sa déclaration. En
effet, Java demande simplement qu’une variable déclarée final ne reçoive qu’une seule fois une
valeur.
Cette démarche nuit fortement à la lisibilité des programmes il faut toujours chercher à initialiser une
constante lors de sa déclaration.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 11
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
• En Java, aucune opération sur les flottants ne conduit à un arrêt de l’exécution (pas même une
division par zéro !). En effet, comme nous l’avons dit, les flottants sont codés en respectant les
conventions IEEE 754. Celles-ci imposent qu’il existe un motif particulier pour représenter
l’infini positif, l’infini négatif et une valeur non calculable. En Java, ces valeurs peuvent même
être affichées ou affectées directement à des variables.
• S’il le souhaite, le programmeur peut forcer la conversion d’une expression quelconque dans
un type de son choix, à l’aide d’un opérateur un peu particulier nommé cast. Si, par exemple, n
et p sont des variables de type int, l’expression : (double) n/ (double) p aura comme valeur
celle de n convertie en double diviser par celle de p convertie en double.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 12
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
i = i + k par : i += k
Ou, encore :
a = a * b par: a *= b
En :
Cette possibilité concerne tous les opérateurs binaires arithmétiques. Les opérateurs d’affectation
élargie sont :
• +=
• -=
• *=
• /=
• %=
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 13
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
i = i + 1 ;
n = n – 1 ;
Qui incrémentent ou qui décrémentent de 1 la valeur d’une variable. En Java, ces actions peuvent être
réalisées par des opérateurs unaires portant sur cette variable. Ainsi, l’expression :
++i ;
Tous ces opérateurs peuvent s’appliquer à tous les types numériques (pas nécessairement entiers)
ainsi qu’au type char.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 14
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
|| ou logique
&& et logique
! Négation logique
L’expression figurant à droite de l’opérateur d’affectation est en fait constituée de trois expressions
(Condition, val1 et val2) qui sont les trois opérandes de l’opérateur conditionnel, lequel se
matérialise par deux symboles séparés : ? et :
Cet opérateur évalue la condition. Si cette condition est vraie, le second opérande(val1) est fourni en
résultat ; si la condition est fausse c’est le troisième(val2) opérande qui est fourni en résultat.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 15
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Comme dans la plupart des langages de programmation java dispose des instructions lui permettant
de saisir sur le périphérique d’entré standard (clavier). Ces instructions se présentent sous forme de
méthodes définie dans une classe prédéfinie nommée Scanner appartenant au paquetage util. Pour
utiliser ces méthodes il suivre de suivre la démarche suivante :
- Importer le paquetage util par l’instruction
Import java.util.* ;
nom_var = nom_instance.methode() ;
Remarque :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 16
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Le paquetage java.lang dispose de deux méthodes print et println pour l’affichage d’information à
l’écran. Mais contrairement à java.util ce paquetage est automatiquement importer en java donc
inutile de l’importer avec l’instruction import. Pour l’affichage des informations utiliser l’une des
instructions suivantes :
• System.out.print() ;//affichage sans retour à la ligne
• System.out.println() ;//affichage avec retour à la ligne
//programme principale
public class Main
{
public static void main (String args[])
{
int age = 10; double taille = 4.5;
System.out.print("bonjour");
System.out.println(" Monsieur");
System.out.print("votre taille est : ");
System.out.println(taille);
System.out.println("votre age est : "+age+" ans");
}
}
Exercices d’Application
1. Ecrire un programme Java qui demande à l’utilisateur de saisir deux entiers, calcul et affiche :
- La somme
- Le Produit
- La division entière
- La division réelle
- Le reste de la division entière
2. Ecrire un programme qui demande un nombre à l’utilisateur, puis calcule et affiche le carré de
ce nombre.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 17
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
1.1- L’instruction if
Le mot else et l’instruction qu’il introduit étant facultatifs, l’instruction if présente deux formes :
if (condition) instruction_1
[else instruction_2]
L’instruction if condition est une expression booléenne quelconque, instruction_1 et instruction_2 sont
des instructions quelconques, c’est-à-dire :
– Simple (terminée par un point-virgule),
– Bloc.
N.B. : les crochets [...] signifient que ce qu’ils renferment est facultatif.
Exercice d’application
1- Ecrire un programme Java qui demande à l’utilisateur de saisir une quantité Q d’un produit
P dont le prix unitaire est fixé à 500 F. le programme calcul et affiche le montant hors taxe.
Si la quantité commandée est supérieur à 100 une remise de 2% est accordée sur le
montant hors taxe.
2- Ecrire un programme Java qui demande à l’utilisateur de saisir deux entiers. Calcul et
affiche le minimum de ces trois entiers :
En utilisant une alternative
En utilisant l’opérateur d’expression conditionnel
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 18
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Lorsque vous imbriquée des instructions if, la règle adoptée par Java pour lever une telle
ambiguïté est la suivante
Un else se rapporte toujours au dernier if rencontré auquel un else n’a pas encore été attribué.
Exercice d’application
Il s’agit d’un programme de facturation avec remise. Il lit en donnée un simple montant hors taxes et
calcule le montant TTC correspondant (avec un taux de TVA constant de 18,6%). Il établit ensuite une
remise dont le taux dépend de la valeur ainsi obtenue, à savoir :
• 0 % pour un montant inférieur à 1000 F,
• 1 % pour un montant supérieur ou égal à 1 000 F et inférieur à 2000 F,
• 3 % pour un montant supérieur ou égal à 2 000 F et inférieur à 5000F,
• 5 % pour un montant supérieur ou égal à 5 000 F.
switch (expression)
{
case constante_1 : [ instructions_1 ]
case constante_2 : [ instructions_2 ]
..............
case constante_n : [instructions_n ]
[ default : instructions ]
}
L’instruction switch commence au mot switch. Son exécution se déroule comme suit. On commence
tout d’abord par évaluer l’expression figurant après le mot switch. Puis on recherche dans le bloc qui
suit s’il existe une étiquette de la forme case x correspondant à la valeur ainsi obtenue. Si tel est le
cas, on se branche à l’instruction figurant après cette étiquette. Sinon, on passe à l’instruction qui suit
le bloc.
L’étiquette default
Il est possible d’utiliser le mot-clé default comme étiquette à laquelle le programme se branchera si
aucune valeur satisfaisante n’a été rencontrée auparavant.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 19
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercise d’application
1- Soit le programme suivant :
La valeur 0,
La valeur 1,
La valeur 4,
La valeur 10,
La valeur -5.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 20
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Syntaxe
do
instruction
while (condition)
;
L’instruction : do ..... while répète l’instruction qu’elle contient tant que la condition mentionnée est
vraie.
Toutefois, elle est toujours parcourue au moins une fois. La condition qui régit cette boucle n’est
examinée qu’à la fin de chaque répétition.
Syntaxe
while (condition)
instruction
L’instruction while répète l’instruction qui suit tant que la condition mentionnée est vraie, comme le
ferait do... while. Mais cette fois, la condition de poursuite est examinée avant chaque parcours de la
boucle et non après.
Syntaxe
Exercice d’application
1- Ecrire un programme Java qui demande à l’utilisateur de saisir une suite de nombre entier
terminé par -1. Le programme calcul et affiche la somme des nombres pairs et le produit
des nombres impairs de cette :
En utilisant la boucle while
En utilisant la boucle do....while
En utilisant la boucle for sans condition
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 22
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Java vous autorise d’employer cette instruction dans une boucle (while, do... while ou for).
Dans ce cas, elle sert à interrompre le déroulement de la boucle, en passant à l’instruction suivant
la boucle. Bien entendu, cette instruction n’a d’intérêt que si son exécution est conditionnée par
un choix ; dans le cas contraire, elle serait exécutée dès le premier tour de boucle, ce qui rendrait
la boucle inutile.
Remarque
En cas de boucles imbriquées, l’instruction break fait sortir de la boucle la plus interne.
De même, si break apparaît dans une instruction switch imbriquée dans une boucle, elle ne fait sortir
que du switch.
L’instruction break ordinaire a l’inconvénient de ne sortir que du niveau (boucle ou switch) le plus
interne. Dans certains cas, cela s’avère insuffisant. Par exemple, on peut souhaiter sortir de deux
boucles imbriquées. Un tel schéma ne convient pas alors :
while { .....
for (.....)
{ .....
break ; // ce break nous branche
.....
}
..... // <-- ici
}
.....
En fait, Java permet de faire suivre ce mot-clé break d’une étiquette qui doit alors figurer devant la
structure dont on souhaite sortir :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 23
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
repet : while
{ .....
for (.....)
{ .....
break repet ; // cette fois, ce break nous branche
.....
}
.....
}
..... // <-- ici
Les étiquettes pouvant figurées devant une structure sont des identificateurs usuels.
Remarques
1- Comme on s’y attend, lorsqu’elle est utilisée dans une boucle for, cette instruction continue
effectue bien un branchement sur l’évaluation des expressions d’incrémentation, et non après.
2- En cas de boucles imbriquées, l’instruction continue ne concerne que la boucle la plus interne.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 24
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Remarque :
Contrairement à l’instruction break avec étiquette, l’étiquette mentionnée dans l’instruction continue
doit obligatoirement être celle d’une structure de boucle (sinon, elle n’aurait pas de signification).
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 25
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Exercice d’application
1. Un magasin de reprographie facture 2 F les dix premières photocopies, 1.50 F les vingt suivantes
et 1 F au-delà. Ecrivez un programme qui demande à l’utilisateur le nombre de photocopies
effectuées puis affiche le montant correspondant.
3. Ecrire un programme permettant de fournir les trois coefficients d’une équation du second degré
ensuite calcul et affiche les racines réelles si elles existent.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 26
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
5. Ecrire un programme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse
convienne. En cas de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et
inversement, « Plus grand ! » si le nombre est inférieur à 10.
6. Ecrire un programme qui demande un nombre de départ, et qui ensuite affiche les dix nombres
suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de
18 à 27 en utilisant l’instruction while.
8. Ecrire un programme qui demande un nombre de départ, et qui ensuite écrit la table de
multiplication de ce nombre, présentée comme suit (cas où l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21
…
7 x 10 = 70
9. Ecrire un programme qui demande un nombre de départ, et qui calcule la somme des entiers
jusqu’à ce nombre. Par exemple, si l’on entre 5, le programme doit calculer :
1+ 2 + 3 + 4 + 5 = 15.
On souhaite afficher uniquement le résultat, pas la décomposition du calcul.
10. Ecrire un programme qui demande un nombre de départ, et qui calcule sa factorielle.
NB : la factorielle de 8, notée 8 ! vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8.
11. Ecrire un programme qui demande successivement 20 nombres à l’utilisateur, et qui lui dise
ensuite quel était le plus grand parmi ces 20 nombres. Modifiez ensuite le programme pour que
le programme affiche de surcroît en quelle position avait été saisie ce nombre.
12. Réécrire le programme précédent, mais cette fois-ci on ne connaît pas d’avance combien
l’utilisateur souhaite saisir de nombres. La saisie des nombres s’arrête lorsque l’utilisateur entre
un zéro.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 27
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
14. Ecrire un programme qui permet à l’utilisateur de saisir une suite caractère se terminant par ‘*’,
et qui affiche à la fin le nombre d’apparition de la lettre ‘A’ ou ‘a’.
15. Ecrire un programme permettant de convertir un entier N écrit sous forme binaire en sa valeur
décimale.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 28
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Pour définir les champs d’une classe Il nous suffira de les déclarer ainsi :
Le mot-clé private qui précise que ces champs ne seront pas accessibles à l’extérieur de la classe,
c’est-à-dire en dehors de ses propres méthodes. Cela correspond à l’encapsulation des données,
dont on voit qu’elle n’est pas obligatoire en Java (elle est toutefois fortement recommandée).
Ces déclarations peuvent être placées où vous voulez à l’intérieur de la définition de la classe, et pas
nécessairement avant les méthodes. En général, on place les champs et méthodes privées à la fin.
L’en-tête précise :
• Le nom de la méthode ;
• Le mode d’accès : public pour que cette méthode soit effectivement utilisable depuis un
programme quelconque ; nous avons déjà rencontré private pour des champs ;
• Les arguments qui seront fournis à la méthode lors de son appel.
• Le type de la valeur de retour ; si la méthode ne fournit aucun résultat, on utilise le mot-clé void.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 29
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
À l’intérieur d’une méthode quelconque, une déclaration telle que : Nomclasse Nomobjet ;
est tout à fait correcte. Cependant, contrairement à la déclaration d’une variable d’un type primitif
(comme int n ;), elle ne réserve pas d’emplacement pour cet objet, mais seulement un emplacement
pour une référence à cet objet. L’emplacement pour l’objet proprement dit sera alloué sur une
demande explicite du programme, en faisant appel à un opérateur unaire nommé new. Ainsi,
l’expression :
Crée un emplacement pour un objet et fournit sa référence en résultat. Par exemple, on pourra
procéder à cette affectation :
Une fois qu’une référence à un objet a été convenablement initialisée, on peut appliquer n’importe
quelle méthode à l’objet correspondant en procédant ainsi :
Nomobjet.nomMethode (……) ;
Exemple :
Créer une classe Rectangle comportant deux champs longueur et largeur puis ajouter les méthodes :
Initialise pour initialiser les champs
Périmètre pour calculer le périmètre d’un rectangle
Surface pour calculer la surface d’un rectangle
Affiche pour afficher les dimensions d’un rectangle
Tester les différentes méthodes depuis le programme principal.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 30
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
}
//programme principale
public class Main
{
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 31
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
2- La notion de constructeur
2.1- Généralités
Dans l’exemple précédent, il est nécessaire de recourir à la méthode initialise pour attribuer des
valeurs aux champs d’un objet de type Rectangle. Une telle démarche suppose que l’utilisateur de
l’objet fera effectivement l’appel voulu au moment opportun. En fait, la notion de constructeur vous
permet d’automatiser le mécanisme d’initialisation d’un objet.
Un constructeur n’est rien d’autre qu’une méthode, sans valeur de retour, portant le même nom que
la classe. Il peut disposer d’un nombre quelconque d’arguments (éventuellement aucun).
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 32
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Ne convient plus : elle serait refusée par le compilateur. En effet, à partir du moment où une classe
dispose d’un constructeur, il n’est plus possible de créer un objet sans l’appeler. Ici, notre
constructeur a besoin de deux arguments. Ceux-ci doivent obligatoirement être fournis lors de la
création, par exemple :
Un constructeur ne fournit aucune valeur. Dans son entête, aucun type ne doit figurer devant
son nom. Même la présence (logique) de void est une erreur
Une classe peut ne disposer d’aucun constructeur (c’était le cas de notre première classe
Rectangle). On peut alors instancier des objets comme s’il existait un constructeur par défaut
sans arguments (et ne faisant rien) par des instructions telles que :
Rectangle R = new Rectangle () ; // OK si Rectangle n’a pas de constructeur
Mais dès qu’une classe possède au moins un constructeur, ce pseudo-constructeur par
défaut ne peut plus être utilisé, On notera que. Si, pour une classe T donnée, l’instruction
suivante est acceptée : T t = new T () ; cela signifie simplement que :
Soit T ne dispose d’aucun constructeur,
Soit T dispose d’un constructeur sans arguments.
Un constructeur ne peut pas être appelé directement depuis une autre méthode. Par
exemple, si Rectangle dispose d’un constructeur à deux arguments de type int :
Rectangle R = new Rectangle (10, 5) ;
.....
R.Rectangle(8, 3) ; // interdit
Un constructeur peut être déclaré privé (private). Dans ce cas, il ne pourra plus être appelé de
l’extérieur, c’est-à-dire qu’il ne pourra pas être utilisé pour instancier des objets .
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 33
UNIVERSITE BARACK OBAMA DE SONFONIA COURS DE JAVA SE
Parmi les différentes méthodes que comporte une classe, on a souvent tendance à distinguer :
• Les constructeurs ;
• Les méthodes d’accès (en anglais accessor) qui fournissent des informations relatives à l’état
d’un objet, c’est-à-dire aux valeurs de certains de ses champs (généralement privés), sans les
modifier ;
• Les méthodes d’altération (en anglais mutator) qui modifient l’état d’un objet, donc les valeurs de
certains de ses champs.
On rencontre souvent l’utilisation de noms de la forme getXXXX pour les méthodes d’accès et
setXXXX pour les méthodes d’altération.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
UNIVERSITE BARACK OBAMA
Contact : 625789118
Mail : [email protected] Page 34
COURS DE JAVA SE TOME I : LES BASES DE LA PROGRAMMATION EN JAVA
Les opérateurs == et != s’appliquent théoriquement à des objets. Mais comme ils portent sur les
références elles-mêmes, leur intérêt est très limité. Ainsi, avec :
Rectangle a, b ;
L’expression a == b est vraie uniquement si a et b font référence à un seul et même objet, et non pas
seulement si les valeurs des champs de a et b sont les mêmes.
En Java, on peut définir des champs qui, au lieu d’exister dans chacune des instances de la classe,
n’existent qu’en un seul exemplaire pour toutes les instances d’une même classe. Il s’agit en quelque
sorte de données globales partagées par toutes les instances d’une même classe. On parle alors de
champs de classe ou de champs statiques. De même, on peut définir des méthodes de classe (ou
statiques) qui peuvent être appelées indépendamment de tout objet de la classe (c’est le cas de la
méthode main).
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Présentation
Considérons la définition de la classe suivante :
class A {
private int n;
private float y;
}
A a1 = new A ();
A a2 = new A ();
Mais Java permet de définir ce qu’on nomme des champs de classe (ou statiques)
qui n’existent qu’en un seul exemplaire, quel que soit le nombre d’objets de la
classe. Il suffit pour cela de les déclarer avec l’attribut static. Par exemple, si nous
définissons :
class B
{ private static int n ;
Private float y ;
}
B a1 = new B ();
B a2 = new B () ;
Les notations a1.n et a2.n désignent donc le même champ. En fait, ce champ existe indépendamment
de tout objet de sa classe. Il est possible (et même préférable) de s’y référer en le nommant
simplement : B.n // champ (statique) n de la classe B
Bien entendu, ces trois notations (a1.n, a2.n, B.n) ne seront utilisables que pour un champ non privé.
Il sera possible de prévoir des champs statiques privés, mais l’accès ne pourra alors se faire que par
le biais de méthodes.
Notez que depuis une méthode de la classe B, on accédera à ce champ on le nommant comme
d’habitude n (le préfixe B. n’est pas nécessaire, mais il reste utilisable).
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Nous venons de voir comment définir des champs de classe, lesquels n’existent qu’en un seul
exemplaire, indépendamment de tout objet de la classe. De manière analogue, on peut imaginer que
certaines méthodes d’une classe aient un rôle indépendant d’un quelconque objet. Ce serait
notamment le cas d’une méthode se contentant d’agir sur des champs de classe ou de les utiliser.
Bien sûr, vous pouvez toujours appeler une telle méthode en la faisant porter artificiellement sur un
objet de la classe (alors que la référence à un tel objet n’est pas utile). Là encore, Java vous permet de
définir une méthode de classe en la déclarant avec le mot-clé static. L’appel d’une telle méthode ne
nécessite plus que le nom de la classe correspondante.
Une méthode de classe ne pourra en aucun cas agir sur des champs non statiques.
Règles générales
À la rencontre d’un appel donné, le compilateur recherche toutes les méthodes acceptables et il
choisit la meilleure si elle existe. Pour qu’une méthode soit acceptable, il faut :
Qu’elle dispose du nombre d’arguments voulus,
Que le type de chaque argument effectif soit compatible par affectation avec le type de
l’argument muet correspondant,
Qu’elle soit accessible
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Remarques
Le type de la valeur de retour d’une méthode n’intervient pas dans le choix d’une méthode sur-
définie.
Utilisation de this
Employer des noms d’arguments identiques à des noms de champ, ce qui évite parfois d’avoir à
créer de nouveaux identificateurs,
//definition des champs
private int lon;
private int larg;
//definition des méthodes
public Rectangle(int lon, int larg)
{
this.lon = lon;
this.larg = larg;
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Croisée : l’appel d’une méthode entraîne l’appel d’une autre méthode qui, à son tour, appelle
une autre méthode (le cycle pouvant d’ailleurs faire intervenir plus de deux méthodes).
Créons une classe Cercle permettant de représenter des cercles définis par un centre, objet du type
Point, et un rayon (flottant). Nous supposerons que les fonctionnalités de notre classe Cercle se
réduisent à l’affichage des caractéristiques d’un cercle (coordonnées du centre et rayon)
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
//classe Cercle
public class Cercle
{
private Point centre;
private double rayon;
public Cercle(int abs, int ord, double rayon)
{
centre = new Point(abs, ord);
this.rayon = rayon;
}
public void affiche()
{
centre.affiche();
System.out.println("le rayon est : " + rayon);
}
}
//programme principale
public class Main
{
public static void main(String[] args)
{
Cercle C = new Cercle(5, 7, 5.6);
C.affiche();
}
}
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Une classe est dite interne lorsque sa définition est située à l’intérieur de la définition d’une autre
classe. Malgré certaines ressemblances avec la notion d’objet membre étudiée ci-dessus, elle ne
doit surtout pas être confondue avec elle, même s’il est possible de l’utiliser dans ce contexte.
La notion de classe interne correspond à cette situation :
1. Un objet d’une classe interne a toujours accès aux champs et méthodes (même privés) de l’objet
externe lui ayant donné naissance.
2. Un objet de classe externe a toujours accès aux champs et méthodes (même privés) d’un objet
d’une classe interne auquel il a donné naissance.
Remarque : Une classe interne ne peut pas contenir de membres statiques.
Exemple :
Reprendre l’exemple précèdent sur les objets membres en utilisant des classes internes.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Exercices d’application
1. Définir une classe Livre avec les attributs suivants : Titre, Auteur (Nom complet), Prix.
Définir à l’aide des propriétés les méthodes d’accès aux différents attributs de la classe.
Définir un constructeur permettant d’initialiser les attributs de la méthode par des valeurs
saisies par l’utilisateur.
Définir la méthode Afficher () permettant d’afficher les informations du livre en cours.
Écrire un programme testant la classe Livre.
4. Définir une classe Point caractérisée par son abscisse et son ordonné.
Définir à l’aide des getters et les setters les méthodes d’accès aux attributs de la classe.
Définir le constructeur par défaut et d’initialisation de la classe.
Définir la méthode Norme () qui retourne la distance entre l’origine du repère et le point en cours.
Écrire un programme permettant de tester la classe.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
5. On veut écrire un programme simulant des poupées russes de différentes tailles. Chaque poupée
a une taille donnée, peut s'ouvrir ou se fermer, peut contenir une autre poupée et être contenue
dans une autre poupée. Écrivez une classe PoupeeRusse contenant les méthodes suivantes :
o Un constructeur
o void ouvrir () : ouvre la poupée si elle n'est pas déjà ouverte et si elle ne se trouve pas à
l'intérieur d'une autre poupée
o void fermer () : ferme la poupée si elle n'est pas déjà fermée et si elle ne se trouve pas à
l'intérieur d'une autre poupée
o void placerDans (PoupeeRusse p) : place la poupée courante dans la poupée p si c'est
possible. Il faut que la poupée courante soit fermée et ne soit pas déjà dans une autre
poupée, que la poupée p soit ouverte et ne contienne aucune poupée, et que p soit
d'une taille supérieure à la poupée courante.
o voidsortirDe (PoupeeRusse p) : sort la poupée courante de la poupée p si elle est dans
p et si p est ouverte.
6. Définir une classe Client avec les attributs suivants : CIN, Nom, Prénom, Tél.
Définir à l’aide des propriétés les méthodes d’accès aux différents attributs de la classe.
Définir un constructeur permettant d’initialiser tous les attributs.
Définir un constructeur permettant d’initialiser le CIN, le nom et le prénom.
Définir la méthode Afficher () permettant d’afficher les informations du Client en cours.
Créer Une classe Compte caractérisée par son solde et un code qui est incrémenté lors de sa
création ainsi que son propriétaire qui représente un client.
Définir à l’aide des propriétés les méthodes d’accès aux différents attributs de la classe (le
numéro de compte et le solde sont en lecture seule)
Définir un constructeur permettant de créer un compte en indiquant son propriétaire.
Ajouter à la classe Compte les méthodes suivantes :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
8. On veut réaliser un programme qui représente des montres et les gens qui les portent. Une montre
donne l'heure et les minutes. On peut initialiser une montre soit à partir d'un couple heure/
minute donné, soit en utilisant l'heure affichée par une autre montre. Il doit être possible de faire
avancer l'heure d'une montre en ajoutant une minute (attention, les minutes sont limitées à 60 et
les heures à 24).
Écrivez une classe qui représente les montres telles que décrites au-dessus et une méthode
principale qui crée une montre affichant 13h45 et une autre montre qui est un clone de la
première.
Une personne a un nom et peut éventuellement porter une montre. On peut faire porter une
montre donnée à une personne, si elle n'en a pas déjà une. On peut aussi lui enlever sa montre si
elle en a une. Une personne peut demander l'heure à une autre, qui lui donne l'heure sous forme
d'une chaine de caractères, en consultant sa montre si elle en a une (sinon elle peut retourner une
chaine vide).
Écrivez une classe qui représente les personnes telles que décrites au-dessus.
On veut faire en sorte que chaque montre ne soit portée que par une seule personne. Proposez des
ajouts/modifications des deux classes précédentes pour garantir cela.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
La déclaration d’une référence à un tableau précise donc simplement le type des éléments du tableau.
Elle peut prendre deux formes différentes :
Type nomtableau [] ;
Type [] nomtableau;
La différence entre les deux formes devient intéressant lorsque l’on déclare plusieurs identificateurs
dans une même instruction. Ainsi, int [] t1, t2 ; // t1 et t2 sont des références a des tableaux d’entiers
est équivalent à : int t1[], t2[] ;
La première forme permet le mélange de tableaux de type T et de variables de type T :
int t1[], n, t2[] ; // t1 et t2 sont des tableaux d’entiers et n est un entier.
En Java, les éléments d’un tableau peuvent être d’un type primitif ou d’un type objet.
Remarque
Une déclaration de tableau ne doit pas préciser de dimensions. Cette instruction sera rejetée à
la compilation : int t[5] ; // erreur : on ne peut pas indiquer de dimension ici
On peut allouer l’emplacement d’un tableau comme celui d’un objet à l’aide de l’opérateur new. On
peut aussi utiliser un initialiseur au moment de la déclaration du tableau, comme on le fait pour une
variable d’un type primitif.
1.2.1- Création par l’opérateur new
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Lors de la déclaration d’une référence de tableau, on peut fournir une liste d’expressions entre
accolades, comme dans :
Type Nomtableau [] = {val1, val2, ……, valn} ;
Remarque
La notation {.....} n’est utilisable que dans une déclaration.
System.out.println (t[4]) ; // affiche la valeur du dernier élément de t Si, lors de l’exécution, la valeur
d’un indice est négative ou trop grande par rapport à la taille du tableau, on obtient une erreur
d’exécution.
Remarque :
On écrit t.length et non t.length() car length s’utilise comme s’il s’agissait d’un champ public de l’objet
tableau t et non d’une méthode.
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
double t [] ;
Avec cette cette instruction :
for (double v : t) System.out.println (v) ;
Il faut toutefois bien voir que cette structure for.… each ne s’applique qu’à des consultations de
valeurs, et en aucun cas à des modifications.
En Java un tableau à plusieurs dimensions est un tableau de tableaux, c’est-à-dire des tableaux dont
les éléments sont eux-mêmes des tableaux. Cette possibilité est en fait plus riche que celle de
tableaux à plusieurs indices offerts par les autres langages. Elle permet notamment de disposer de
tableaux irréguliers, c’est-à-dire dans lesquels les différentes lignes pourront être de taille différente.
7.1- Création
7.2- Initialisation
type nomtableau[][] = { {val1,val ,val3}, {val1, val2}} ;
Exemple
Ecrire un programme complet utilisant deux méthodes statiques définies dans une classe Util,
permettant :
D’afficher les valeurs des éléments d’un tableau d’entiers à deux indices, ligne par ligne
(méthode affiche),
De mettre à zéro les éléments d’un tableau d’entiers à deux indices (méthode raz).
On pourra l’appeler avec un ou plusieurs arguments de type int ou même sans argument. Voici
quelques appels corrects de somme :
int n, p, q ;
somme () ; // aucun argument
somme (n) ; // un argument de type int
somme (n, p) ; // deux arguments de type int
somme (n, p, q) ; // trois arguments de type int
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE
Exercice d’application
1. Soit un vecteur T (tableau à une dimension) contenant N nombres entiers (N≤100). Ecrire un
programme pour :
Détermine le minimum, le maximum et la moyenne des éléments d’un tableau T
Calcule le produit de tous les éléments de T ainsi que le nombre de valeurs strictement
positives.
Calcule la somme et le produit scalaire de deux vecteurs (T1 et T2).
Détermine les positions de l’apparition d’une valeur dans un vecteur T.
Inverse le contenu d’un vecteur T.
Supprime toutes les valeurs nulles d'un vecteur T.
Met les valeurs négatives au début et les valeurs positives à la fin en utilisant un seul
tableau.
4. Soient deux vecteurs d’entiers triés V1 (N entiers, N≤100) et V2 (M entiers, M≤150). Ecrire un
programme qui fusionne ces deux vecteurs dans un autre vecteur V3 trié sans répétition de
valeurs identiques.
5. Soit une matrice A (N, M) de caractères (N≤20 et M≤30). Ecrire un programme qui
6. Soit une matrice A (N, M) d’entiers (N≤20 et M≤30), écrire un programme qui :
Proposé par BAH AMADOU TIDIANE [BGRAS] Chef de département MIAGE/GENI INFORMATIQUE