Les éléments de base en Java
1) Introduction
==> Programmer c’est quoi ????
Programmer signifie réaliser des « programmes informatiques ». Les programmes demandent à l’ordinateur d'effectuer des actions.
==> Votre ordinateur est rempli de programmes comme:
JDK :
Commencez par télécharger l'environnement Java sur le site d'Oracle, comme le montre la figure suivante. Choisissez la dernière version stable
Le Java Development Kit (JDK) désigne un ensemble de bibliothèques logicielles de base du langage de programmation Java, ainsi que les outils avec lesquels le code Java peut être compilé, transformé en bytecode destiné à la machine virtuelle Java.
Pour L’installation de jdk est très simple comme n’importe quel logiciel.
Eclipse ID :
La fonction main se trouve dans la classe principale. C'est un nom de fonction particulier qui signifie « principal ». main est la fonction principale de votre programme, c'est toujours par la fonction main que le programme commence.
Une fonction a un début et une fin, délimités par des accolades { et }. Toute la fonction main se trouve donc entre ces accolades.
* System.out.print(" Bonjour ") ;
Cette ligne à l'intérieur d'une fonction main s’appelle instruction, Chaque instruction est une commande à l'ordinateur de faire quelque chose. Dans ce cas-là cette ligne demande par l’ordinateur d’afficher le message Bonjour à l'écran.
!!! Très important: toute instruction se termine obligatoirement par un point-virgule « ; ». Si vous oubliez de mettre un point -virgule à la fin d'une instruction, votre programme ne compilera pas !
==> Écrire un message "Bonsoir" à l'écran
À partir de maintenant, on va modifier nous -mêmes le code de programme précédent. Qui permet d’afficher le message « Bonsoir » à l'écran
* Les caractères spéciaux
Les caractères spéciaux sont des lettres spéciales qui permettent d'indiquer qu'on veut aller à la ligne, faire une tabulation, etc.
Ils sont faciles à reconnaître : c'est un ensemble de deux caractères. Le premier d'entre eux est toujours un anti -slash ( \ ), et le second un nombre ou une lettre. Voici deux caractères spéciaux courants que vous aurez probablement besoin d'utiliser, ainsi que leur signification :
Lorsqu’un programme devient long, il est conseillé d’ajouter des lignes de commentaires dans le programme, c’est-à-dire des lignes qui ont pour but de donner des indications sur les instructions effectuées et d’expliquer le fonctionnement de programme sans que le compilateur ne les prenne en compte.
instructions dans un programme au lieu de les effacer comme dans cet exemple:
Le programme ignore l’instruction qui se trouve entre le commentaire et affiche seulement Bonjour.
2) Les variables et les constantes
2-1) Notion de variable
Les données ainsi que les résultats des calculs intermédiaires ou finaux, sont rangés dans des cases mémoires qui correspondent à des variables, Ainsi, une variable est rangée dans un emplacement mémoire nommé, de taille fixe (ou non) prenant au cours du déroulement de programme un nombre indéfini de valeurs différentes.
2-2) déclaration des variables
La partie déclaration consiste à énumérer toutes les variables dont on aura besoin au cours de programme. Chaque déclaration doit comporter le nom de variable (identificateur) et son type.
Syntaxe : type identificateur ;
Identificateur : Un identificateur est le nom donné à une variable. Ce nome doit obligatoirement commencer par une lettre suivie d’une suite de lettres et les chiffres et il ne doit pas contenir d’espace.
Types de données :
Le type de variable est l’ensemble des valeurs qu’elle peut prendre.
int : sert à manipuler les nombres entiers positifs ou négatifs. Par exemple : 5 -12
float : sert à manipuler les nombres à virgule. Par exemple : 5 , 2.1f , -1.276f
double : sert à manipuler les nombres à virgule. Par exemple : 5.76543 -1.278 ….
char : sert à manipuler des caractères, Par exemple : 'A' , '6'
boolean: utilise les expressions logiques. Il n’y a que deux valeurs booléennes : true / false
String : sert à manipuler des chaînes de caractères, Par exemple : 'bonjour' , "hi cv"
Exemple :
* Lorsque l’on écrit directement une valeur flottante (float) dans le code, elle est considérée par défaut comme un double. Si on veut réduire sa précision pour qu’elle représente un float, il faut explicitement lui rajouter un F
* Le type String permet de gérer les chaînes de caractères, c'est-à-dire le stockage de texte.
Il s'agit d'une variable d'un type plus complexe que l'on appelle objet. Vous verrez que celle-ci s'utilise un peu différemment des variables précédentes
2-3) Les constantes
Comme une variable, il existe une constante correspond un emplacement mémoire réservé auquel on accède par le nom qui lui a été attribué, mais dont la valeur stockée ne sera jamais modifiée au cours du programme.
Syntaxe : final Nom_Constante = valeur ;
Exemple : final float pi = 3.14 ;
3) Les instructions de base
Une instruction est une action élémentaire commandant à la machine un calcul, ou une communication avec l’un de ses périphériques d’entrées ou de sorties. Les instructions de base sont:
3-1) L’instruction d’affectation :
L’affectation permet d’affecter une valeur à une variable. Elle est symbolisée par « = »
Syntaxe : Variable = Expression ;
Exemple :
3-2) L’instruction de sortie :
Avant de lire une variable, il est conseillé d’écrire un message à l’écran, afin de prévenir l’utilisateur de ce qu’il doit taper. L’instruction de sortie (d’écriture) permet d’afficher des informations à l’écran.
Syntaxe :
System.out.print (" message à l'écran ") ; ou
* System: ceci correspond à l'appel d'une classe qui se nomme « System ». C'est une classe utilitaire qui permet surtout d'utiliser l'entrée et la sortie standard, c'est- à-dire la saisie clavier et l'affichage à l'écran.
* out: objet de la classe System qui gère la sortie standard.
* print: méthode qui écrit dans la console le texte passé en paramètre (entre les parenthèses).
Exemple 1:
System.out.print(" Bonjour ! ");
System.out.print(" je m’appelle ");
System.out.print("mohamed");
Lorsque vous l'exécutez, vous devriez voir des chaînes de caractères qui se suivent sans saut de ligne. Autrement dit, ceci s'affichera dans votre console comme ceci :
Bonjour ! je m’appelle mohamed
cela, vous avez plusieurs solutions :
* soit vous utilisez un caractère d'échappement, ici \n ;
* soit vous utilisez la méthode println() à la place de la méthode print().
3-3) Les conversions ou < cast >
En programmation, on est souvent amené à convertir les types, c'est-à-dire passer d'un type numérique à une chaîne de caractères ou vice-versa Nous allons voir un truc super important en Java. Ne vous en déplaise, vous serez amenés à convertir des variables. via la syntaxe suivante : variable = (type) valeur
int
en type float
:D'un type
double
en type int :
Exemples:Remarque
==> pour convertir n’importe quel type de données en une chaîne, on utilise la fonction valueof
!!! La valeur 12 est considérée comme une chaîne, ce n’est pas une valeur numérique
Vous savez maintenant que pour lire un int, vous devez utiliser nextInt(). De façon générale,dites-vous que pour récupérer un type de variable, il vous suffit d'appeler next<Type de variable commençant par une majuscule>
!!! Il y a un type de variables primitives qui n'est pas pris en compte par la classe Scanner : il s'agit du type char.
Voici comment on pourrait récupérer un caractère :
Chapitre 2 : Les structures alternatives et répétitives
1) Les structures alternatives
1-1) Introduction :
Syntaxe :
Une condition est une expression logique ou une variable logique évaluée à Vrai ou faux.
La condition est évaluée. Si elle est vraie, la série d’instruction(s)1 est exécutée et l’ensemble d’instruction(s) 2 est ignoré, la machine sautera directement à la première instruction située après cette structure.
De même, au cas où la condition était fausse la machine saute directement à la première
ligne située après le else et exécute l’ensemble d’instruction2.
Exercice d’application 1
Ecrire un programme en java qui affiche si un nombre entier saisi au clavier est pair ou impair.
Exercice 1:
La condition if... else que l'on vient de voir est le type de condition le plus souvent utilisé. Toutefois, le if... else peut s'avérer quelque peu… répétitif : Prenons cet exemple :
Pour résoudre ce problème de la répétition de if else if else …. plusieurs fois. On utilise une nouvelle structure à choix multiples. Cette structure conditionnelle permet de choisir le traitement à effectuer en fonction de la valeur ou de l’intervalle de valeurs d’une variable ou d’une expression.
Syntaxe :
Lorsque l’ordinateur rencontre cette instruction, il vérifie la valeur de la variable, et il la compare aux différentes valeurs.
Les valeurs sont évaluées dans l’ordre, les unes après les autres, et une fois la valeur de variable est vérifiée l’action associée est exécutée. On peut utiliser une instruction default (facultative), dont l’action sera exécutée si aucune des valeurs évaluées n’a pas été remplie.
Exercice d’application :
Ecrire un programme en java permettant d’afficher le mois en lettre selon le numéro saisi au clavier (janvier=1 , février =2 …….. décembre = 12).
Remarque : Vous devez mettre une instruction break ; à la fin de chaque cas. Pour ignorer les instructions en dessous ! L'instruction break ; commande en fait à l'ordinateur de «sortir » des accolades. Et instruction defaulf ; sera exécutée si aucune des valeurs évaluées n’a pas été remplie.
2) Les Structures répétitives
2-1) Introduction
Prenons d’une saisie au clavier, par exemple, on pose une question à laquelle doit répondre par « oui » ou « non ».
L’utilisateur risque de taper autre chose (une autre lettre), le programme peut soit planter par une erreur d’exécution soit dérouler normalement jusqu’au bout, mais en produisant des résultats fantaisistes.
Pour éviter ce problème, on peut mettre en place un contrôle de saisie pour vérifier que les données entrées au clavier correspondent bien à celles attendues par le programme.
!!! Le programme ci-dessus résout le problème si on se trompe qu’une seule fois, et on fait entrer une valeur correcte à la deuxième demande. Sinon en cas de deuxième
erreur, il faudrait rajouter un « if ». Et ainsi de suite, on peut rajouter des centaines de « if »
==> La solution à ce problème consiste à utiliser une structure répétitive.
Une structure répétitive, encore appelée boucle, est utilisée quand une instruction ou une liste d’instruction, doit être répétée plusieurs fois. La répétition est soumise à une condition.
2-2) La boucle while
La boucle while permet de répéter un traitement tant que la condition est vraie.
Syntaxe:
* L’exécution de la boule dépend de la valeur de la condition. Si est vrai, le programme exécute les instructions qui suivent, jusqu’à ce qu’il rencontre l’accolade }. Il retourne ensuite sur la ligne du while, procède au même examen, et ainsi de suite
* La boucle ne s’arrête que lorsque prend la valeur fausse, et dans ce cas le programme poursuit son exécution après la boucle « sortir des accolades ».
Exemple:
Remarque :
Si la structure while contient la condition ne devient jamais fausse. Le programme tourne dans une boucle infinie et n’en sort plus.
Exemple :
Dans cet exemple nous avons une boucle infinie. L’ordinateur ne s’arrêtera jamais d’afficher le message Bonsoir car la variable i qui est testée dans la condition n’est jamais incrémenter. Alors pour résoudre le problème de boucle infinie dans ce cas-là, on incrémente la variable i à chaque tour de boucle pour afficher Bonsoir 10 fois exactement.
Exercice 1
Ecrire un programme en java qui calcule la somme S = 1+2+3+4+……..+ 10. Utilisant la boucle while.
Exercice 2
Ecrire un programme en java qui calcule la somme S= 1+2+3+……..+ N, où N saisi par l’utilisateur.
2-3) La boucle for
La boucle for permet de répéter une liste d’instructions un nombre connu de fois.
Syntaxe :
Exemple:
Cet exemple permet d’afficher le message bonjour 10 fois, et tant que la condition est vraie la boucle répète l’exécution des instructions qui se trouvent entre les accolades
==> La partie d’initialisation est de type entier. Elle est initialisée par la valeur initiale, la partie instruction(s) augmente cette valeur par 1 automatiquement à chaque tour de boucle jusqu’à la valeur finale.
==> Lorsque la valeur compteur vaut la valeur finale, le traitement est exécuté une seule fois puis le programme sort de la boucle.
Exemple:
Exercice 1
Ecrire un programme en java qui calcule S= 1+2+3+4+……..+ 10. Utilisant la boucle for.
Exercice 2
Ecrire un programme en java qui calcule S= 1+2+3+4+……..+ N. Utilisant la boucle for.
Exercice 3
Ecrire un programme en java qui affiche la table de multiplication de 5. Utilisant la boucle for.
Exercice 4
Ecrire un programme en java qui affiche la table de multiplication d’un entier saisie par l’utilisateur, Utilisant la boucle for
2-4) La boucle do ….While
Cette boucle permet de répéter les instructions qui se trouvent entre les accolades tant que la condition est vraie.
Remarque :
Cette boucle ne s’utilise en général que pour des menus, elle est dangereuse car il n’y a pas de vérification de la condition avant d’y entrer
Ce type de boucle est très similaire à while, bien qu’un peu moins utilisé en général. La seule chose qui change en fait par rapport à while, c'est la position de la condition. Au li eu d'être au début de la boucle, la condition est à la fin:
Syntaxe :
la boucle while pourrait très bien ne jamais être exécutée si la condition est fausse dès le départ. Par exemple, si la condition est fausse dès le début et on ne serait jamais rentré dans la boucle. et Pour la boucle do… while, c'est différent: cette boucle s'exécutera toujours au moins une fois même si la condition est fausse.
Il est donc parfois utile de faire des boucles de ce type, pour s'assurer que l'on rentre au moins une fois dans la boucle.
!!! N'oubliez pas de mettre un point-virgule après le while, si non votre programme plantera à la compilation !
Exemple:
En utilisant la boucle do…..while, on écrit un programme qui affiche Bonjour 10 fois.
Exercice 1
Ecrire un programme en java qui calcule la somme S= 1+2+3+…+ 10. Utilisant la boucle do…..while.
Exercice 2
Ecrire un programme en java qui affiche la table de multiplication de 5. Utilisant la boucle do ….While.
Chapitre 3 : Les Tableaux
1) Introduction
Imaginons que dans un programme, nous avons besoin d’un grand nombre de variables, il devient difficile de donner un nom pour chaque variable.
Exemple :
Ecrire un programme permettant de saisir quatre notes et de les afficher après avoir multiplié toutes les notes par 2.
==> Pour résoudre ce problème, il existe un type de données qui permet de définir plusieurs variables de même type.
2) Définition
Un tableau est une suite d’éléments de même type. Il utilise plusieurs cases mémoire à l’aide d’un seul nom. Comme toutes les cases portent le même nom, elles se différencient par un numéro ou un indice.
Nous pouvons représenter schématiquement un tableau nommé Note composé de cinq cases, dans la mémoire comme suit :
3) Tableau à une dimension
3-1) Déclaration
La déclaration d’un tableau permet d’associer à un nom d’une zone mémoire composée d’un certain nombre de cases mémoires de même type.
Syntaxe :
Exemple :
Remarques :
==> Le premier élément d’un tableau porte l’indice 0 .
==> La valeur d’un indice doit être un nombre entier
==> La valeur d’un indice doit être inférieure ou égale au nombre d’éléments du tableau. Par exemple, avec le tableau tab[20], il est impossible d’écrire tab[21] ou tab[26], ces expressions font référence à des éléments qui n’existe pas.
==> L’utilisation de ces éléments se fait en suite, via le nom du tableau et son indice. Ce dernier peut être soit une valeur (tab[3] ), soit une variable ( tab [i] ) ou encore une expression ( tab[i+1] ).
==> Pour Faire un parcours complet sur un tableau, on utilise une boucle.
Exercice 1
Ecrire un programme java permettant de saisir 10 notes et de les stocker dans un tableau nommé notes, puis les afficher.
Solution
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int[] notes = new int[10];
int i;
for( i=0; i < 10; i++){
System.out.print("Entrer un entier :");
notes[i] = sc.nextInt();
}
for( i=0 ; i < 10; i++)
System.out.print(notes[i]+" ");
}
}
Exercice 2
Écrire un programme en Java permettant de saisir 10 notes et qui affiche la moyenne de ces notes.
Réponse
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
float[] notes = new float[10];
float Som=0;
int i ;
for( i=0; i < 10; i++){
System.out.print("Entrer un entier :");
notes[i] = sc.nextInt();
Som = Som + notes[i];
}
System.out.print("La moyenne est: "+Som/10);
}
}
Exercice 3
Écrire un programme en Java permettant de saisir 10 entiers et qui affiche le maximum de ces entiers.
Réponse
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int[] Tab = new int[10];
int Max,i=0;
System.out.print("Entrer un entier :");
Tab[i] = sc.nextInt();
Max = Tab[0] ;
for( i=1; i < 10; i++) {
System.out.print("Entrer un entier :");
Tab[i] = sc.nextInt();
if ( Tab[i] > Max )
Max = Tab[i];
}
System.out.print("Le maximum est:"+Max);
}
}
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int[] notes = new int[10];
int i;
for( i=0; i < 10; i++){
System.out.print("Entrer un entier :");
notes[i] = sc.nextInt();
}
for( i=0 ; i < 10; i++)
System.out.print(notes[i]+" ");
}
}
Exercice 2
Écrire un programme en Java permettant de saisir 10 notes et qui affiche la moyenne de ces notes.
Réponse
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
float[] notes = new float[10];
float Som=0;
int i ;
for( i=0; i < 10; i++){
System.out.print("Entrer un entier :");
notes[i] = sc.nextInt();
Som = Som + notes[i];
}
System.out.print("La moyenne est: "+Som/10);
}
}
Exercice 3
Écrire un programme en Java permettant de saisir 10 entiers et qui affiche le maximum de ces entiers.
Réponse
import java.util.Scanner;
class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int[] Tab = new int[10];
int Max,i=0;
System.out.print("Entrer un entier :");
Tab[i] = sc.nextInt();
Max = Tab[0] ;
for( i=1; i < 10; i++) {
System.out.print("Entrer un entier :");
Tab[i] = sc.nextInt();
if ( Tab[i] > Max )
Max = Tab[i];
}
System.out.print("Le maximum est:"+Max);
}
}
La notion de POO
1) Introduction
POO c’est quoi ????
La programmation orientée objet (POO), ou programmation par objet, est un concept de programmation plus puissant et pratique. En effet, avec ce type de programmation, vous pourrez créer, utiliser, recréer divers objets à travers d’une classe.
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs. Il s'agit donc de représenter ces objets et leurs relations. L’interaction entre les objets via leurs relations permet de concevoir et réaliser les fonctionnalités (méthodes) attendues. Alors le POO est permet de transcrire les éléments du réel sous forme virtuelle.
Exemple :
Qu'est-ce-qu' une classe ?
Une « classe » est un modèle de données définissant la structure commune à tous les objets qui seront créés à partir d'elle. Autrement dit, nous pouvons percevoir une classe comme un moule grâce auquel nous allons créer autant d'objets de même type et de même structure qu'on le désire.
Par exemple, pour modéliser n'importe quelle voiture, nous pourrions écrire une classe Voiture dans laquelle nous définissons les attributs (couleur, matricule, marque, ...) et méthodes (démarrer, accélérer, freiner,...) communs à tout voitures.
Qu'est-ce qu'un objet ?
Un « objet » est une représentation d'une chose matérielle ou immatérielle du réel à laquelle on associe des propriétés et des actions.
Par exemple : une voiture, une personne, un animal, ou bien un compte bancaire peuvent être vus comme des objets.
==> Attributs
Les « attributs » (aussi appelés « données membres ») sont les caractéristiques
==> Méthodes
Les «méthodes» sont les actions applicables à un objet.
Un objet personne, par exemple, dispose des actions suivantes : manger, dormir, boire, marcher, courir ....
Exemple :
Qu'est-ce-qu' une instance ?
Une instance est une représentation particulière d'une classe.
Lorsque l'on crée un objet, on réalise ce que l'on appelle une « instance de la classe ». C'est à dire que du moule, on en extrait un nouvel objet qui dispose de ses attributs et de ses méthodes. L'objet ainsi créé aura pour type le nom de la classe.
Exemple :
Notre première classe
Dans le premier cours sur la programmation en Java, nous avons déjà travaillé avec quelque classe (comme String, Scanner).
Lorsque vous faisiez ceci : String chaine = new String ("Bonjour") ;
Ici chaine est un objet String. Vous avez utilisé un objet de la classe String : on dit que vous avez créé une instance de la classe String.
Le moment est venu pour vous de créer vos propres classes
!!! Attention Si vous avez bien suivi la première partie de ce cours,(👉Voir la première partie👈) nous avons déjà une classe mère s’appelle PremierClass contenant la méthode main. Maintenant nous allons créer une nouvelle classe s’appelle ClasseMain. Suiviez les étapes suivantes :
Pour l’instant tous est bien. nous allons créer une seconde classe s’appelle Personne
!!! Le nom de votre classe « Personne » (avec un « P» majuscule, convention de nommage oblige). Cette fois, vous ne devez pas y créer la méthode main.
Ici, notre classe Personne précédée par un mot clé public. Vous devez savoir que lors que nous créons une classe comme ceci, Eclipse nous facilite la tâche en ajoutant automatiquement ce mot clé, qui correspond à la portée de la classe.
Alors ces deux syntaxes public class Personne { } et class Personne { } sont presque équivalents !
En programmation, la portée détermine qui peut faire appel à une classe, une méthode ou une variable. Vous avez déjà rencontré la portée public : cela signifie que tout le monde peut faire appel à l'élément. Ici dans le cas qui nous intéresse il s'agit d'une méthode. Une méthode marquée comme public peut donc être appelée depuis n'importe quel endroit du programme.
Nous allons ici utiliser une autre portée : private. Elle signifie que notre méthode ne pourra être appelée que depuis l'intérieur de la classe dans laquelle elle se trouve ! Les méthodes déclarées private correspondent souvent à des mécanismes internes à une classe que les développeurs souhaitent « cacher » ou simplement ne pas rendre accessibles de l'extérieur de la classe…
1) Introduction
POO c’est quoi ????
La programmation orientée objet (POO), ou programmation par objet, est un concept de programmation plus puissant et pratique. En effet, avec ce type de programmation, vous pourrez créer, utiliser, recréer divers objets à travers d’une classe.
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs. Il s'agit donc de représenter ces objets et leurs relations. L’interaction entre les objets via leurs relations permet de concevoir et réaliser les fonctionnalités (méthodes) attendues. Alors le POO est permet de transcrire les éléments du réel sous forme virtuelle.
Exemple :
Qu'est-ce-qu' une classe ?
Une « classe » est un modèle de données définissant la structure commune à tous les objets qui seront créés à partir d'elle. Autrement dit, nous pouvons percevoir une classe comme un moule grâce auquel nous allons créer autant d'objets de même type et de même structure qu'on le désire.
Par exemple, pour modéliser n'importe quelle voiture, nous pourrions écrire une classe Voiture dans laquelle nous définissons les attributs (couleur, matricule, marque, ...) et méthodes (démarrer, accélérer, freiner,...) communs à tout voitures.
Qu'est-ce qu'un objet ?
Un « objet » est une représentation d'une chose matérielle ou immatérielle du réel à laquelle on associe des propriétés et des actions.
Par exemple : une voiture, une personne, un animal, ou bien un compte bancaire peuvent être vus comme des objets.
==> Attributs
Les « attributs » (aussi appelés « données membres ») sont les caractéristiques
==> Méthodes
Les «méthodes» sont les actions applicables à un objet.
Un objet personne, par exemple, dispose des actions suivantes : manger, dormir, boire, marcher, courir ....
Exemple :
Qu'est-ce-qu' une instance ?
Une instance est une représentation particulière d'une classe.
Lorsque l'on crée un objet, on réalise ce que l'on appelle une « instance de la classe ». C'est à dire que du moule, on en extrait un nouvel objet qui dispose de ses attributs et de ses méthodes. L'objet ainsi créé aura pour type le nom de la classe.
Exemple :
Notre première classe
Dans le premier cours sur la programmation en Java, nous avons déjà travaillé avec quelque classe (comme String, Scanner).
Lorsque vous faisiez ceci : String chaine = new String ("Bonjour") ;
Ici chaine est un objet String. Vous avez utilisé un objet de la classe String : on dit que vous avez créé une instance de la classe String.
Le moment est venu pour vous de créer vos propres classes
!!! Attention Si vous avez bien suivi la première partie de ce cours,
Pour l’instant tous est bien. nous allons créer une seconde classe s’appelle Personne
!!! Le nom de votre classe « Personne » (avec un « P» majuscule, convention de nommage oblige). Cette fois, vous ne devez pas y créer la méthode main.
Ici, notre classe Personne précédée par un mot clé public. Vous devez savoir que lors que nous créons une classe comme ceci, Eclipse nous facilite la tâche en ajoutant automatiquement ce mot clé, qui correspond à la portée de la classe.
Alors ces deux syntaxes public class Personne { } et class Personne { } sont presque équivalents !
En programmation, la portée détermine qui peut faire appel à une classe, une méthode ou une variable. Vous avez déjà rencontré la portée public : cela signifie que tout le monde peut faire appel à l'élément. Ici dans le cas qui nous intéresse il s'agit d'une méthode. Une méthode marquée comme public peut donc être appelée depuis n'importe quel endroit du programme.
Nous allons ici utiliser une autre portée : private. Elle signifie que notre méthode ne pourra être appelée que depuis l'intérieur de la classe dans laquelle elle se trouve ! Les méthodes déclarées private correspondent souvent à des mécanismes internes à une classe que les développeurs souhaitent « cacher » ou simplement ne pas rendre accessibles de l'extérieur de la classe…
2) Les constructeurs
L’objectif de ce chapitre est de construire un objet Personne, il va falloir définir les données qu’on va lui attribuer.
Alors un objet Personne est possède :
* un nom de type String
* un prénom de type String
* un CNI de type int
maintenant, on a une nouvelle variable ( Classe ) (comme int, float, String …) s’appelle Personne, et on peut déclarer une variable ( objet ) de type Personne comme ceci :
P : est un objet d’une classe Personne
Personne : est une variable spéciale s’appelle classe
Pour initialiser l’objet P nous allons devoir utiliser ce qu'on appelle des constructeurs
Un constructeur est une méthode d'instance qui va se charger de créer un objet.
Il existe deux types des constructeurs (constructeur par défaut et Constructeur avec paramètres).
==> constructeur par défaut
un constructeur par défaut, c’est une méthode qui ne prendra aucun paramètre mais permettra tout de même d'instancier un objet, c’est-à-dire initialiser les variables d'instance. Voici votre premier constructeur:
Remarque:
* le constructeur est une méthode qui n'a aucun type de retour
* le (les) constructeur(s) d'une classe doit (doivent) porter le même nom que la classe !
Exemple :
==> constructeur par paramètres
un constructeur par paramètres, c’est une méthode a des paramètres pour initialiser les variables d'instance.
Exemple :
Remarque :
* Pour accéder aux variables d'instance (les données membres) en utilisant le « . » Nom_objet.variable ; ou Nom_objet.méthode () ;
* il vous faudra respecter l'ordre des paramètres passés lors de l'initialisation de votre objet : si non, votre programme ne compilera pas !
Exemple :
On affiche les données de chacune personne P1 et P2
Apres l’exécution de ce programme ci-dessus on obtient le résultat suivant :
Vous constatez que nous pouvons accéder, modifier les variables d’instance directement à travers le nom d’objet suivi par le nom de variable tout simplement. mais C'est très risqué tant que les variables d’instance déclarées public. (en cas d’absence la portée signifie que la variable est déclaré public)
Exemple :
!!! pour résoudre ce problème, où les variables d’un objet seront visibles que dans la classe qui le définit, on ajoute le mot clé private avant chaque variable
Exemple :
Mais dans ce cas-là on ne peut pas faire les instructions suivantes !!!
Remarques
* La différence entre public et private c'est quand tu as d'autres classes. Un attribut public sera visible dans n'importe quelle classe, alors qu'un attribut private ne se sera visible que dans la classe qui le définit.
* En pratique, il vaut mieux mettre private tout le temps, parce que sinon, n'importe qui pourrait faire n'importe quoi avec tes données, ce qui peut entraîner pas mal d'erreurs
* si tu veux vraiment donner la visibilité public à un attribut, alors il faut lui rajouter le mot clé final (constante), comme ça tu es sûr qu'il ne changera jamais de valeur. Mais tout privé c'est quand même le mieux.
* mais la question qui se pose, comment accéder aux ces variables en cas de mode private, oui bravooo , c’est une bonne question.
* On utilise les méthodes get et set pour accéder aux valeurs des attributs.
3) Accesseurs et mutateurs
Un accesseur est une méthode qui va nous permettre d'accéder aux variables de nos objets en lecture, et un mutateur nous permettra d'en faire de même en écriture ! Grâce aux accesseurs, vous pourrez afficher les variables de vos objets, et grâce aux mutateurs , vous pourrez les modifier.
Exemple :
Problème 1 !!!
Imaginez que le nom d’une variable passée comme un paramètre dans la méthode setNom() est semblable avec le nom d’une variable d’objet. Prenons cet exemple:
Le problème c’est que, le programme considère le mot nom comme la variable d’objet courant et n’est pas une variable locale passée par paramètre, et par conséquence la variable nom ne changera pas (reste elle-même).
Pour résoudre ce problème on utilise le mot clé this qui fait référence à l'objet courant ! Bien que la traduction anglaise exacte soit « ceci », il faut comprendre « moi ». À l'intérieur d'un objet, ce mot clé permet de désigner une de ses variables ou une de ses méthodes.
Exemple :
Maintenant on répète le même exemple précédant en ajoutant seulement le mot clé this.
Problème 2 !!!On va prendre une autre classe qui s’appelle Ville. Alors un objet Ville est possède : * un nom de type String * un nbreHabitants de type int * un categorie de type char
chaque ville a une catégorie par rapport à son nombre d'habitants. si : nbreHabitants <= 10000 c’est-à-dire catégorie A si : 10000 < nbreHabitants <= 100000 c’est-à-dire catégorie B si : nbreHabitants > 100000 c’est-à-dire catégorie C
Nous voulons que la classe Ville gère la façon de déterminer la catégorie elle-même, et non que cette action puisse être opérée de l'extérieur. La méthode qui fera ceci sera donc déclarée private.
Exercice d’application
Ajouter dans la classe Ville une méthode pour comparer deux objets par rapport à leur nombre d'habitants.
Alors un objet Personne est possède :
* un nom de type String
* un prénom de type String
* un CNI de type int
maintenant, on a une nouvelle variable ( Classe ) (comme int, float, String …) s’appelle Personne, et on peut déclarer une variable ( objet ) de type Personne comme ceci :
P : est un objet d’une classe Personne
Personne : est une variable spéciale s’appelle classe
Pour initialiser l’objet P nous allons devoir utiliser ce qu'on appelle des constructeurs
Un constructeur est une méthode d'instance qui va se charger de créer un objet.
Il existe deux types des constructeurs (constructeur par défaut et Constructeur avec paramètres).
==> constructeur par défaut
un constructeur par défaut, c’est une méthode qui ne prendra aucun paramètre mais permettra tout de même d'instancier un objet, c’est-à-dire initialiser les variables d'instance. Voici votre premier constructeur:
Remarque:
* le constructeur est une méthode qui n'a aucun type de retour
* le (les) constructeur(s) d'une classe doit (doivent) porter le même nom que la classe !
Exemple :
==> constructeur par paramètres
un constructeur par paramètres, c’est une méthode a des paramètres pour initialiser les variables d'instance.
Exemple :
Remarque :
* Pour accéder aux variables d'instance (les données membres) en utilisant le « . » Nom_objet.variable ; ou Nom_objet.méthode () ;
* il vous faudra respecter l'ordre des paramètres passés lors de l'initialisation de votre objet : si non, votre programme ne compilera pas !
Exemple :
On affiche les données de chacune personne P1 et P2
Apres l’exécution de ce programme ci-dessus on obtient le résultat suivant :
Vous constatez que nous pouvons accéder, modifier les variables d’instance directement à travers le nom d’objet suivi par le nom de variable tout simplement. mais C'est très risqué tant que les variables d’instance déclarées public. (en cas d’absence la portée signifie que la variable est déclaré public)
Exemple :
!!! pour résoudre ce problème, où les variables d’un objet seront visibles que dans la classe qui le définit, on ajoute le mot clé private avant chaque variable
Exemple :
Mais dans ce cas-là on ne peut pas faire les instructions suivantes !!!
Remarques
* La différence entre public et private c'est quand tu as d'autres classes. Un attribut public sera visible dans n'importe quelle classe, alors qu'un attribut private ne se sera visible que dans la classe qui le définit.
* En pratique, il vaut mieux mettre private tout le temps, parce que sinon, n'importe qui pourrait faire n'importe quoi avec tes données, ce qui peut entraîner pas mal d'erreurs
* si tu veux vraiment donner la visibilité public à un attribut, alors il faut lui rajouter le mot clé final (constante), comme ça tu es sûr qu'il ne changera jamais de valeur. Mais tout privé c'est quand même le mieux.
* mais la question qui se pose, comment accéder aux ces variables en cas de mode private, oui bravooo , c’est une bonne question.
* On utilise les méthodes get et set pour accéder aux valeurs des attributs.
3) Accesseurs et mutateurs
Un accesseur est une méthode qui va nous permettre d'accéder aux variables de nos objets en lecture, et un mutateur nous permettra d'en faire de même en écriture ! Grâce aux accesseurs, vous pourrez afficher les variables de vos objets, et grâce aux mutateurs , vous pourrez les modifier.
Exemple :
Problème 1 !!!
Imaginez que le nom d’une variable passée comme un paramètre dans la méthode setNom() est semblable avec le nom d’une variable d’objet. Prenons cet exemple:
Le problème c’est que, le programme considère le mot nom comme la variable d’objet courant et n’est pas une variable locale passée par paramètre, et par conséquence la variable nom ne changera pas (reste elle-même).
Pour résoudre ce problème on utilise le mot clé this qui fait référence à l'objet courant ! Bien que la traduction anglaise exacte soit « ceci », il faut comprendre « moi ». À l'intérieur d'un objet, ce mot clé permet de désigner une de ses variables ou une de ses méthodes.
Exemple :
Maintenant on répète le même exemple précédant en ajoutant seulement le mot clé this.
Problème 2 !!!
chaque ville a une catégorie par rapport à son nombre d'habitants.
Nous voulons que la classe Ville gère la façon de déterminer la catégorie elle-même, et non que cette action puisse être opérée de l'extérieur. La méthode qui fera ceci sera donc déclarée private.
Exercice d’application
Ajouter dans la classe Ville une méthode pour comparer deux objets par rapport à leur nombre d'habitants.
4) Les variables de classe
il y a trois grands types de variables dans une classe :
1. Les variables d'instance : ce sont elles qui définiront les caractéristiques de notre objet.
2. Les variables de classe : celles-ci sont communes à toutes les instances de votre classe.
3. Les variables locales : ce sont des variables que nous utiliserons pour travailler dans notre objet.
Exemple :
nous allons compter le nombre d'instances de notre classe Ville, Il s'agira d'une variable de type int que nous appellerons nbreInstance, Afin qu'une variable soit une variable de classe, elle doit être précédée du mot clé static.
Remarque :
Remarquer que l'accesseur de notre variable de classe déclarée privée est aussi déclaré static:
ceci est une règle « Toutes les méthodes de classe n'utilisant que des variables de classe doivent être déclarées static. On les appelle des méthodes de classe»
1. Les variables d'instance : ce sont elles qui définiront les caractéristiques de notre objet.
2. Les variables de classe : celles-ci sont communes à toutes les instances de votre classe.
3. Les variables locales : ce sont des variables que nous utiliserons pour travailler dans notre objet.
Exemple :
nous allons compter le nombre d'instances de notre classe Ville, Il s'agira d'une variable de type int que nous appellerons nbreInstance, Afin qu'une variable soit une variable de classe, elle doit être précédée du mot clé static.
Remarque :
Remarquer que l'accesseur de notre variable de classe déclarée privée est aussi déclaré static:
ceci est une règle « Toutes les méthodes de classe n'utilisant que des variables de classe doivent être déclarées static. On les appelle des méthodes de classe»
5) Le principe d’encapsulation
L'encapsulation est un mécanisme consistant à protéger les données et les méthodes d'un objet à l'extérieur, c'est-à-dire en empêchant l'accès aux données par un autre moyen que via les accesseurs et mutateurs que nous avons défini. C'est le principe d'encapsulation !
L'encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces niveaux de visibilité définissent les droits d'accès aux données selon que l'on y accède par une méthode de la classe elle-même, d'une classe héritière, ou bien d'une classe quelconque. Il existe trois niveaux de visibilité:
publique: les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d'une classe définie avec le niveau de visibilité public. Il s'agit du plus bas niveau de protection des données
protégée: l'accès aux données est réservé aux fonctions des classes héritières, c'est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées (classes fils).
privée: l'accès aux données est limité aux méthodes de la classe elle-même. Il s'agit du niveau de protection des données le plus élevé.
L'encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces niveaux de visibilité définissent les droits d'accès aux données selon que l'on y accède par une méthode de la classe elle-même, d'une classe héritière, ou bien d'une classe quelconque. Il existe trois niveaux de visibilité:
publique: les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d'une classe définie avec le niveau de visibilité public. Il s'agit du plus bas niveau de protection des données
protégée: l'accès aux données est réservé aux fonctions des classes héritières, c'est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées (classes fils).
privée: l'accès aux données est limité aux méthodes de la classe elle-même. Il s'agit du niveau de protection des données le plus élevé.
6) L’héritage
L’héritage est la définition d’une classe par extension des caractéristiques d’une autre classe. L'héritage, est l'un des mécanismes les plus puissants de la programmation orientée objet, permet de reprendre des membres d'une classe (appelée superclasse ou classe mère) dans une autre classe (appelée sous-classe, classe fille ou encore classe dérivée), qui en hérite.Syntaxe :
Reprenons l'exemple de la classe Ville. Nous allons créer une nouvelle classe, nommée Capitale, héritée de Ville. C’est à dire les objets Capitale auront tous les attributs et toutes les méthodes associés aux objets Ville !
! ! ! Problème :
!!! Pourquoi ce problème ????? ==> Le problème c’est que les attributs de la classe mère (Ville) sont déclarés privates, alors ne se seront visibles que dans la classe Ville. Et pour résoudre ce problème, il faut Remplacer le mot private par le mot protected dans la déclaration de variables ou de méthodes de la
classe Ville. Donc, une fois les variables et méthodes privées de la classe mère déclarées en protected, notre objet Capitale aura accès à celles-ci !.
Remarque : Notons un point important avant de continuer. Contrairement au C++, Java ne gère pas les héritages multiples : une classe dérivée (aussi appelée classe fille) ne peut hériter que d'une seule classe mère ! Vous n'aurez donc jamais ce genre de classe :
À présent, continuons la construction de notre objet hérité Capitale qui a tous les attributs et toutes les méthodes associés aux objets Ville !, ce qui différenciera nos objets Capitale de nos objets Ville sera la présence d'un nouveau champ : le nom d'un monument . Cela
implique que nous devons créer un constructeur par défaut et un constructeur d'initialisation pour notre objet Capitale.
Remarque !!!! :Pour éviter d’écrire les mêmes instructions deux fois (la redondance), on peut faire appel aux variables de la classe mère dans nos constructeurs grâce au mot clé super. Cela aura pour effet de récupérer les éléments de l'objet de base, et de les envoyer à notre objet hérité.
==> On ajoute une nouvelle méthode dans la classe Ville s’appelle decrisToi() qui permet décrire la ville, afin d’utiliser le mot clé super.
Alors maintenant dans la classe Capitale, on peut récupérer la description de la ville via le mot clé super(), ce qui nous donne une méthode decrisToi() un peu différente, car nous allons lui ajouter le champ monument pour notre description:
7) Le polymorphisme
Reprenons l'exemple de la classe Ville. Nous allons créer une nouvelle classe, nommée Capitale, héritée de Ville. C’est à dire les objets Capitale auront tous les attributs et toutes les méthodes associés aux objets Ville !
classe Ville. Donc, une fois les variables et méthodes privées de la classe mère déclarées en protected, notre objet Capitale aura accès à celles-ci !.
À présent, continuons la construction de notre objet hérité Capitale qui a tous les attributs et toutes les méthodes associés aux objets Ville !, ce qui différenciera nos objets Capitale de nos objets Ville sera la présence d'un nouveau champ : le nom d'un monument . Cela
implique que nous devons créer un constructeur par défaut et un constructeur d'initialisation pour notre objet Capitale.