Java


Gestion des objets





|

Déclaration d'une classe : 
    Représentation d'une classe
    
Voiture classe
...
poids
vitesseMaxi
puissanceFisc
puissanceDin
...
Etats (attributs)
...
passerVitesse
accelérer
freiner
ouvrir
...
Comportements (méthodes)
    Syntaxe de la déclaration d'une classe : 
    [<modificateurs d'accès>] class <nom de la classe> [<extends ou implements>] 
    [<nom super-classe ou de l'interface>]
        

<modificateurs d'accès>

Option facultative
mots clés java qui affectent l'accessibilité de
la classe
public : classe visible et modifiable
protected : classe visible non modifiable
private : classe non visible
class
Mot clé identifiant la création d'une classe
<extends> <nom de la super-classe>
Option facultative
Permet d'indiquer que la classe hérite d'une autre classe
<implements> <nom de l'interface Option facultative
Permet d'indiquer le nom de l'interface à utiliser.
Exemple : Déclaration de la classe voiture
    class Voiture{}
    
    Toutes les classes héritent automatiquement d'une classe maître  : la classe Object.
    
    


|

Création d'un objet : Opérateur new
    Représentation des instances de classes

Instance 1

Voiture

...
poids=1200
puissanceFisc=6
puissanceDin=110
vitesseMaxi=190
vitesseCourante=5
marque="Peugeot"
...
...

Instance 2

Voiture

...
poids=800
puissanceFisc=4
puissanceDin=60
vitesseMaxi=140
vitesseCourante=4
marque="Renault"
...
...
    Pour créer une instance, il faut utiliser l'opérateur new et un des constructeurs 
      de la classe.
    Exemple : Voiture monAuto = new Voiture();

Destruction d'un objet : 
	La création d'un objet provoque une allocation mémoire. Les langages objets 
	existant avant java (C++,...), obligent le développeur à gérer la mémoire : 
	Allocation, libération.
	La machine virtuelle java gère la mémoire de façon automatique et dynamique. 
	L'utilisation de l'opérateur new provoque une allocation méméoire. 
	Un processus appelé ramasse-miettes (Garbage Collector), s'occupe de 
	libérer la mémoire.
	Tous les objets qui ne sont plus utilisés dans les programmes sont détruits.


|

Accès aux variables et méthodes d'un objet
Cette opération s'effectue à l'aide de l'opérateur ".". Pour accéder à une variable 
    ou une méthode d'un objet,
    il suffit de placer un point (.) entre l'identificateur de l'objet et la variable 
    ou la méthode.
    
    Syntaxe : 
    <nom de l'objet>.<nom de la variable>;
    <nom de l'objet>.<nom de la méthode>([<paramètres>]);
    
	Exemple : 
	Voiture monAuto = new Voiture();
	monAuto.passerVitesse(2);
	System.out.println(monAuto.vitesseCourante);

Attributs et Méthodes d'une classe
	Une classe contient deux types d'éléments : 
		- Des Attributs ( = variables )
		- Des Méthodes ( = procédures ou fonctions)
	
	Les attributs
	Un attribut est une valeur de donnée d'un objet ou d'une classe, qui représente 
	un état de cet objet ou de cette classe.
	On distingue deux types de variables
		- Variables d'instance
		- Variable de classe
	
	Variable d'instance : 
		La valeur d'une variable d'instance n'est connue que de l'instance dans 
		laquelle elle se trouve.
    	Syntaxe : 
    	<modificateur d'accès> <type> <nom de la variable> [= <valeur>];
    	
    	Exemple : 
    	public int vitesseCourante = 0 ;
    	public double vitesseMaxi ;
    	public String marque ;
    	
	Variable de classe : 
		La valeur d'une variable de classe est la même pour toutes les instances 
		de cette classe.
		En clair il s'agit d'une constante.
    	Syntaxe : 
    	static <modificateur d'accès> <type> <nom de la variable> = <valeur> ;
    	
    	Exemple : 
    	static public int nombreDeRoues = 4 ;
    	static public String avertissement = "RESTEZ CONCENTRÉ";
    	

	Les méthodes
	Une méthode représente un comportement de l'objet.
	Les méthodes de notre classe voiture pourraient être
		- passer une vitesse
		- accélérer
		- ralentir
		- freiner
		- démarrer
	
	Il y a deux types de méthodes : 
		- Les procédures : Bloc d'instructions qui ne retourne pas de valeur
		- Les fonctions : Bloc d'instructions qui retourne une valeur
	
	La déclaration de la méthode va définir son rôle : procédure ou fonction
    	Syntaxe d'une procédure: 
    	[<modificateur d'accès>] void <nom de la méthode>([<paramètres>]){
    		<Séquence d'instructions>
    	}
    	
    	Exemple : 
    	public void demarrer(){
    		<séquence instructions>
    	}
    	public void passerVitesse(){
    		int vitesse = vitesseCourante;
    		vitesse++;
    		vitesseCourante = vitesse;
    	}

    	Syntaxe d'une fonction: 
    	<modificateur d'accès> <type de retour> <nom de la méthode>([<paramètres>]){
    		<Séquence d'instructions>
    		return <valeur>
    	}
    	Exemple : 
    	public int prochaineVidange(){
    		int nbVidange = nbKmCourant/nbKmMax;
    		if(nbVidange==0)nbVidange = 1;
    		return (nbKmMax*nbVidange)-nbKmCourant;
    	}
    	
	
    


|

Méthode Constructeurs :
    Une classe java peut contenir une ou plusieurs méthodes appelées constructeurs. 
    Un constructeur est une méthode appelé par la JVM au 
    moment de l'instanciation de la classe, 
    c'est à dire à l'utilisation de l'opérateur new.
    Cette méthode va permettre notamment d'initialiser les variables.
    La déclaration d'une méthode constructeur ne différe pas d'une méthode classique, 
    mais impose quelques règles.
    	- Le nom du constructeur doit être identique au nom de la classe. 
    		(Respecter la casse)
    	- Un constructeur ne retourne pas de valeur.
    	- Il ne faut pas utiliser le mot clé void qui est implicite.

    Syntaxe d'une fonction: 
    <nom de la classe>([<paramètres>]){
    
    Exemple : 
    	public class Voiture{
    		public int vitesseCourante = 0;
    		public String marque;
    		
    		Voiture(){}
    		
    		Voiture(String nouvelleMarque){
    		  marque = nouvelleMarque;
    		}
    	}
    	Dans l'exemple, on trouve deux constructeurs. Ces deux constructeurs vont 
    	permettre différentes façons d'instancier la classe voiture.
    	
    	public Voiture auto1 = new Voiture();
    	public Voiture auto2 = new Voiture("Peugeot");
    
Méthode Destructeur ou de finalisation : 
    
    
    De la même façon qu'il existe un type de méthode appelée par la JVM lors de 
    l'instanciation de la classe,il existe une méthode particulière qui est appelée par 
    la JVM lors de la destruction de l'objet, c'est à dire au moment ou le ramasse-miettes 
    détruit l'objet..
    Cette méthode va permettre notamment de libérer toutes les références à 
    d'autres objets .... La méthode s'appelle finalize. 
    Cette méthode est déclarée dans la classe object. Comme toutes les 
    classe héritent de la classe object, il faut redéfinir de façon exact cette méthode : 
    
    protected finalize()throws Throwable{
    }
    
    

|

Les méthodes d'accès ("getteur" et "setteur") :
    Par convention (et non par obligation!!), les développeurs java s'interdisent 
    d'acccéder directement à un attribut.
    Pour chaque attribut, il est conseillé de définir deux méthodes
    	- La méthode get retourne la valeur de l'attribut.
    	- La méthode set permet d'attribuer une valeur à l'attribut.
    L'intérêt de ces accesseurs résident dans la sécurité. Il devient facile de contrôler 
    la mise à jour des attributs de votre classe de façon à interdire certaine valeur 
    (par l'intermédiare de la méthode set).
    De plus si pour des raisons fonctionnelles, un attribut doit obéir à une règle 
    de gestion avant d' être mise à disposition des autres objets, il vous suffit 
    de modifier la méthode get.
    Il est conseillé de définir les attributs avec le mot clé private et 
    de créer les accesseurs. 
    Exemple : 
    	public Class Voiture(){
    	  private int vitesseCourante = 0;
    	  private String marque;
    	  
    	  public int getVitesseCourante(){
    	  	return vitessCourante;
    	  }

    	  public void setVitesseCourante(int nouvelleVitesse){
    	  	vitessCourante = nouvelleVitesse;
    	  }
    	}
    




|

Surcharge des méthodes:
La surcharge de méthode consiste à déclarer dans une même classe plusieurs méthodes 
    qui portent le même nom, mais avec des paramètres différents. 
    Le meilleur exemple de surcharge des méthodes, est la déclaration de 
    plusieurs constructeurs. Cela permet, lors de la création de l'instance de pouvoir 
    disposer de méthodes qui vont construire l'objet de manières différentes.
Héritage : 
    L'héritage permet à une classe d'hériter de l'ensemble des méthodes et 
    attributs d'une autre classe sans avoir à réécrire le code de cette classe.
    Une classe héritée est une super-classe, alors qu'une classe qui 
    hérite est appelée sous-classe
    Exemple : 
    
    	- La classe A est la super classe de la classe B et de la classe C
    	- La classe B et C sont des sous-classes de la classe A
    	- La classe D et E sont des sous-classes de la classe B, 
    		qui est elle même une sous-classes de la classe A
    	- La classe A est une sous-classe de la classe Object
    	
    	Syntaxe : 
    	<modificateurs d'accès> class <nom de la classe> 
    		extends <nom super-classe> {}
	
	Exemple:
	 public class Voiture extends Vehicule{}

|

Polymorphisme : 
Le polymorphisme est la possibilité pour deux objets, ayant un lien d'héritage, 
de posséder la même méthode avec des implémentations différentes.
    Le mécanisme d'héritage impose à la JVM de remonter la hiérarchie de classe 
    pour trouver les méthodes qui ne sont pas présentes dans la classe en cours. 

|

Les packages : 
    	Pour faciliter la réutilisation du code existant, Java propose de regrouper 
    	les classes dans des packages.
    	Les classes sont des fichiers, et les packages des répertoires.
    	L'objectif des packages est d'ordonner les classes de façon logique.
    	Exemple par les classe du JDK : 
    		java.io.* : Classes gérant les entrées-sorties
    		java.net.* : Classes gérant les accès réseaux
    		java.util.* : Classes utilitaires
    	
 
    	Quand vous voulez utiliser les fonctionnalités d'une classe dans vos programmes, 
    	il faut indiquer au compilateur java dans quel package se trouve cette classe.
    	Cette opération se fait par le mot clé import.
    	
    	Exemple : 
    	
    	import java.util.*;
    	public class Voiture extends Véhicule{}
    	
    	Création de ces propres package : 
    	Pour déclarer un package, il suffit d'indiquer le mot clé package avant 
    	de déclarer la classe.
    	
    	Exemple : 
    	
    	package volubis;
    	import java.util.*;
    	public class Voiture extends Véhicule{}