La
notion de classe est un enrichissement de la notion usuelle de structure en C (struct) en C. Une classe permet de
définir un type d’objet, éventuellement compliqué, associant des données et des
procédures qui accèdent à ces données. Les données se présentent sous forme de
champ désignés par identificateurs et dotés d’un type. A une donnée, on associe
un mot clé qui désigne l’accessibilité de cette donnée.
Les
procédures, également appelées méthodes,
définissent les opérations possibles sur ces composants. A une méthode, on associe un mot clé désignant l’accessibilité de cette méthode.
définissent les opérations possibles sur ces composants. A une méthode, on associe un mot clé désignant l’accessibilité de cette méthode.
Exemple
class
Point {
private int _x;
private int _y;
public Point()
{
_x = 0 ; _y = 0 ;
}
public Point(int x, int y)
{
_x = x ; _y = y ;
}
public void avancer(int dx, int dy)
{
_x = _x + dx ; _y = _y + dy ;
}
}
La
classe Point possède deux attribut : _x,
_y et trois méthodes Point(), Point(int, int), avancer(int,
int).
Le
mot clé private indique que l’attribut est privé il ne sera
accessible que par les méthodes appartenant à la classe. Un attribut public est accessible par une méthode appartenant à une
autre classe .
Remarque
Le
corps (contenu) des méthodes d’une classe sera défini dans la classe elle-même.
Initialisation des objets : constructeur
Une
classe peut définir une ou plusieurs procédures d’initialisation appelées constructeurs. Un constructeur est une
méthode avec aucune valeur de retour et qui porte le même nom que la classe.
S’il existe plusieurs méthodes dans une classe, elles se distinguent par le
type ou le nombre de paramètres :
Point( ) et Point(int,
int)
Le
constructeur permet de créer une instance de la classe. Une instance de classe
est dite objet.
Pour créer un Point on va :
1. Déclarer un handle
sur un Point.
Point
p ; (p est un handle sur un point).
Remarque
Un
handle est un numéro. Par exemple, quand une application alloue de la mémoire,
le compilateur ne rend pas un pointeur mais un numéro. Ce numéro est associé à
une zone mémoire.
2. La déclaration seule ne crée pas d’objet. Elle
associe l’identificateur à une référence appelée null qui ne fait référence à rien.
p==Null
Pour
créer une instance de la classe point (on dit objet de la classe Point), il
faut exécuter new en citant un
constructeur de la classe Point, avec ses paramètres. La primitive new rend en résultat la référence sur l’objet crée,
qu’il suffit alors d’affecter à la variable déclarée :
new Point(2,0)
Point p = new Point(2,0) ;
destruction des objets: destructeur
Avec Java, plus besoin d'écrire une fonction destructeur.
En effet, il existe un programme appelé 'garbage collector' (ramasseur
d'ordures) qui est exécuté automatiquement dés que la mémoire disponible
devient inférieure à un certain seuil.
2 - Compilation et
exécution d’un programme en java
Pour compiler un programme en Java, il faut utiliser
l’instruction javac suivi du nom du
fichier.
Exemple
Pour compiler la classe Point, on écrit javac Point.java
A la fin de la compilation si aucune erreur n’a été
détectée, le code de base est transformé en byte code et un fichier Point.class est généré. C’est ce fichier
qui sera exécuté.
Pour exécuter un programme en Java, on utilise
l’instruction java suivi du nom de la classe.
Exemple
Pour exécuter la classe Point, on écrit java Point
Remarque
Quand on écrit un programme en Java il faut éviter de
donner au fichier .java un nom différent de la classe. Par exemple, si pour on
sauvegarder la classe Point nous choisissons le nom Toto.java à la fin de la
compilation le fichier Toto.class sera créer. Il y aura ensuite des erreurs au
niveau de l’exécution (en effet, la classe Toto n’existe pas).
3- Notion de primitives
Souvent on dit que le langage Java est un langage tout
objet (tout est instance d'une classe). En fait, ce n'est pas tout a fait vrai.
Supposons qu'on aune boucle permettant d'incrémenter u entier 1000 fois, il ne
serait pas judicieux de créer 1000 un objet pour l'utiliser comme incrément (il
existe en Java la classe Integer qui
pourrait être utilisée mais qui ralentirai énormément le programme avec une
création de 1000 objets Integer). Les
concepteurs de Java ont donc doté ce langage d'une série d'éléments
particuliers appelés primitives qui
ne sont pas gérés de la même manière en mémoire (voir chapitre 1 du polycopie
pour les différentes primitives existantes).
Différence entre les objets et les
primitives
Les
primitives peuvent être "enveloppées" dans un objet provenant d'une
classe prévue à cet effet et appelée Wrapper (mot anglais signifiant
enveloppeur). Les enveloppeurs sont donc des objets pouvant contenir une
primitive et auxquels sont associés des méthodes permettant de les manipuler.
4 - Affichage sur sortie standard (écran)
Pour afficher un commentaire sur écran, on utilise
la méthode println.
Pour affiche « toto » sur écran on écrit System.out.println("toto") (La
méthode println appartient à la
classe System.out)
Exemple
public class Primitive
{
public static void main(String[] arg)
{
System.out.println("Primitives:");
int intA = 12;
System.out.println(intA);
int intB = intA;
System.out.println(intB);
intA = 48;
System.out.println(intA);
System.out.println(intB);
System.out.println("Objets");
Entier entierA = new Entier(12);
System.out.println(entierA);
Entier entierB = entierA;
System.out.println(entierB);
EntierA.valeur = 48;
System.out.println(entierA);
System.out.println(entierB);
}
}
class Entier
{
int valeur;
Entier(int
v) {valeur=v;}
}
Affichage
Primitives 12 12 48 12
Objets 12 12 48 48
5 - Notions de variables, classe
et méthodes final
5.1 - Variable final
Une variable déclarée final
ne peut plus voir sa valeur modifiée (final int x=1 ;).
5.2
Méthodes final
Les méthodes final ne peuvent pas être redéfinies dans les classes dérivées.
5.3
Classes final
Une classe final ne peut être étendue pour créer des
sous-classes.
6 -Notions d’attributs et méthodes static
6.1
Attribut static
Un attribut statique (déclaré avec le mot clé static : static int x=3) est un attribut partagé par tout les objets de la
classe (tout les objet ont la même valeur pour cet attribut).
6.2
Méthode static
Une méthode statique (déclarée avec le mot clé static : public static void f( ) ) est une méthode qui n’a accès qu’aux
membres static de la classe.
7-Le mot clé this
this désigne une référence sur l’objet courant.
Exemple
Point(int _x, int _y)
{
this._x
= _x ;
this._y
= _y ;
}
Pour distinguer le paramètre du constructeur à
l’attribut, on utilise le mot clé this
8- Mon premier programme en Java
Pour pouvoir exécuter un programme en Java, il faut
définir une fonction particulière appelée : main. Cette méthode doit
être contenue dans une classe (le tout objet), elle possède un en-tête
obligatoire fixé :
public static void main(String[] arg)
static : signifie qu’elle ne pourra
faire appel qu’aux champs statiques de la classe
String[] arg : tableau d’arguments
du programme
Exemple
class Exemple
{
public
static void main(String[] arg)
{
System.out.println("Bonjour" ) ;
}
}
9 -Notion de Paquetage
Un paquetage ou package est un regroupement de
classes. On regroupe dans un même paquetage des classes ayant une thématique et
des fonctionnalités communes. Un paquetage contient des classes et des
sous-paquetages.
Les classes de l’API appartiennent à plusieurs
packages (Exemple : java.util, java.awt…). Pour utiliser une classe qui
appartient à un package de l’API, on utilise l’instruction import suivi du nom du package.
Exemple
-
Pour utiliser la classe Vector du package java.util on écrit : import java.util.Vector ; au tout
début du programme.
-
Pour utiliser toutes les classes du package java.util on écrit : import java.util.* ;
9.1
Création de paquetage
Si vous souhaitez qu’une classe que vous avez crée appartienne
à un package particulier, vous devez le spécifier explicitement au moyen de
l’instruction package. Il faudra
aussi créer un répertoire au nom du package et sauvegarder les classes
appartenant au package dans ce
répertoire.
Exemple
package MonPackage
public class Employe
{
…
}
La classe Employe
doit être sauvegarder dans un répertoire appelé MonPackage.
9.2
Package et accessibilité
9.2.1
Portée d’une classe
La portée d’une classe est définie comme la zone dans
laquelle elle est visible. Seules les classes publiques sont accessibles depuis
l’extérieur du package.
Modificateur de portée
|
Portée
|
aucun
|
Le paquetage |
public
|
Partout |
9.2.2 Portée
des membres d’une classe
*protected : Les membres d’une classe
peuvent être déclarés protected. Dans ce cas, l’accès en est réservé aux
méthodes des classes dérivées, des classes appartenant au même package ainsi
qu’aux classes appartenant au même package que les classes dérivées.
*private : Accès au niveau de la classe
*public : accès partout
Remarque
Un attribut sans modificateur (modificateur par défaut) n’est pas accessible depuis l’extérieur du paquet de la classe.
10 Les tableaux
10.1
Déclaration
Exemple:
int[] x où int x[];
x est un handle (référence) correspondant à un
tableau qui contient des entiers.
10.2
Initialisation
int[] x;
x = new int[dimension];
x est un
référence sur un tableau de taille égale à dimension
Remarques
* Les tableaux de littéraux peuvent contenir des
variables.
Exemple: int a =1, b= 2;
int [ ] y = {a,b};
·
Si on ne fait pas d'initialisation, une initialisation automatique est
alors faite (pour les tableaux de primitives à 0, pour les tableaux de handles
à null)
10.3 Taille
des tableaux
La taille d'un tableau est fixe. Néanmoins, il n'est pas nécessaire qu'elle soit connue au moment de la compilation.
Exemple
Import
java.util.*;
class Test2
{
public static void main(String[] arg)
{
int x = Math.abs((new Random())%10;
int[] y;
y = new int[x] ;
System.out.println(x);
}
}
Dans ce cas, on peut connaître la taille d'un
tableau avec le champs length (System.out.println(y.length)).
10.4 Les
tableaux multi-dimensionnels
Syntaxe
int[][] x;
x = new int[2][4];
Initialisation
int[][] x = {{1,2,3,4}, {5,6,7,8}};
11
Les chaînes de caractères
En Java, les chaînes de caractères sont des objets.
Ce sont des instances de la classe String.
Java utilise une approche particulière, en effet, les contenus des chaînes de
caractères ne peut plus être modifié une fois initialisé ( Les chaînes de
caractères se comportent comme des primitives).
Exemple
public class chaines
{
public static void main(String[] arg)
{
String chaineA = new String ("chaine1");
System.out.println(chaineA);
String chaineB = chaineA;
System.out.println(chaineB);
ChaineA = "chaine2";
System.out.println(chaineA);
System.out.println(chaineB);}}
Résultat
chaîne1 chaîne1 chaine2 chaine1
Bien que les chaînes sont des objets, ils se
comportent ici comme des primitives. Cela est dû au fait que les chaînes ne
peuvent être modifiées.
Remarque
Java dispose d'une autre classe, appelée
StringBuffer, qui permet de gérer des chaînes dynamiques.
11.1
La classe
"StringBuffer"
La classe StringBuffer permet de modifier des chaînes de
caractères notamment grâce à la méthode append( ).
Exemple
StringBuffer chaine;
chaine = new StringBuffer ("Bon");
chaine.append("jour");
System.out.println(chaine);
Affichage
Bonjour
11.2 Quelques
méthodes relatives à la classe "String"
Concaténation
Les chaînes de caractères peuvent être concaténées
Exemple
String chaine1 = "Bonjour";
String chaine2 = "tout le monde";
chaine 1 = chaine1 + chaine2; // création d'une
chaîne constante "bonjour tout le monde et affectation à la variable
chaine1
La méthode
length( )
length( ) retourne le nombre de
caractères de la chaine.
La méthode
equals( )
equals( ) permet de tester l'égalité
de deux chaînes de caratères
Remarque
L'emploi de l'opérateur = = pour tester l'égalité de 2
chaînes n'est pas correct ( = = teste l'égalité des références des variables et
non celles de leurs contenus).
La méthode
substring( )
La méthode substring ( ) extrait une sous-chaîne d'une
chaîne donnée. La sous-chaîne commence à l'indice donné en premier argument et
se termine à l'indice donné en second argument.
Exemple
String chaine;
String chaine1;
chaine1.substring(2,6);
ConversionConversion EmoticonEmoticon
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.