Java

publicité
Java
Caractéristique de java :
Architecture neutre
Orienté objet
Distribué
Compilé et interprété
Robuste
Dynamique
Sécurisé
Indépendant du système d’exploitation.
Limites de Java :
Moins rapide qu’un vrai exécutable (C).
Solutions : Optimiser les machines virtuelles, compilateur JIT
(Just In Time).
2 types de programmes :
Application (programme indépendant)
Applet (Exécuté a automatiquement quand ils sont chargé dans une page HTML.
Commentaire :
Identique au C++
// sur une ligne
/* plusieurs lignes */
Javadoc
/** déscription pour la création Automatique de documentations.*/
Afficher un texte.
En C++ ( cout<< ‘’hello World !’’<<endl ;
En Java :
System.out.printl(‘’hello World !’’) ;
1 exemple d’application : (format :ASCII)
//fichier HelloWorld.java
class HelloWorld
{
static public void main(String args[])
{
system.out.printl(‘’HelloWorld’’) ;
}
}
Compilation de l’exemple :
javac HelloWorld.java
-g ou –g :none :compile avec ou sans les infos de debug.
-d <dir> spécifie le répertoire de destination des .class .
Execution de l’exemple :
Java HelloWorld
Les types natifs Java :
Entiers (byte, short, int, long)
Nombre réels (float, double)
Caractère (char)
128 premiers = codes ASCII ‘a’,’1’
‘\n’ pour un saut de ligne
‘\t’ pour une tabulation
‘\’’ pour une ‘
‘\\’ pour \
Booléen (true, false)
Conversion automatique :
Erreur :
double d =0.0d ;
int i = d ; // ‘’possible loss of precision’’
Necessite une conversion explicite :
double d = 0.0d ;
int i = (int)d ; // ok
Références :
En java pas de pointeur, une variable est soit de type natif, soit une référence.
Les blocs :
Identique au C
{
}
On peut déclarer les variables à tout instant, elles sont locales et temporaires.
Les variables sont automatiquement détruite en dehors de sa portée.
Les tests
Identique au C :
if(conditions) { }
if() { }
else { }
switch ()
{
case : break ;
default : break ;
}
! différence : les expressions à tester doivent être de type boolean.
Les boucles
Identique au C :
while() { }
do { }
while () ;
for ( ; ; ) { }
L’opérateur new
Sert à créer des instances d’une classe
String s = new String() ;
Ne s’applique pas aux types natifs en Java (sauf pour l’initialisation des tableaux)
Les tableaux
Déclaration similaire au C
On peut mettre les [] avant ou après la variable
Possibilité de créer des tableaux multidimensionnels
L’indexage est protégé (dépassement génère une exception d’erreur)
2 exemple : tableaux
//Déclaration
int [] tInt ;
float tfloat [] ;
//Création
int [] tInt2 = new int[4] ;
double tDboule[] [] = new double[2][3] ;
//Création avec initialisation
long [] tLong = {3L, 2L} ;
short [] [] tShort = {{4,5},{1,2,3}
, null } ;//Dimension
int [] vide = {} ;
Les classes de base :
Les chaînes de caractères
Deux types :
Pour les constantes : String
Pour les variables : StringBuffer
Les types natifs peuvent être convertis
String s= ´´total = ´´+3 + ´´CHF´´ ;
Retrouver la longueur d’une chaîne
int lg = s.lenght() ;
Accès en lecture (String ou StringBuffer) à
un caractère donné de la chaine :
.charAt (int index) ;
String s =´´total´´ ;
char c = s.charAt(1) ; // c = ‘o’
au tableau de caractère donné de la chaîne :
.toCharArray() ; // ou .toString().toCharArray() ;
char[ ] ctab = s.toCharArray() ; //ctab[] = {´t´,…}
.getChars ( int deb, int fin,
char[] dst, int dstdeb) ;
char [] ctab = new char [s.lengh()] ;
s.getChars(0, s.length(), ctab, 0) ; //ctab[]=(´t´,…)
Accès en écriture (StringBuffer)
A un caractère donné de la chaine
.setCharAt (int index, char c) ;
StringBuffer s = new StringBuffer(´´total´´) ;
s.setCharAt(2,´n´) ; // s = ´´tonal´
La classe System et les E/S
Cette classe permet d’accéder à la console pour les entrées et les sorties avec
out, err pour la sortie standard et d’erreur.
in pour l’entrée standard
3 exemple : lire ligne clavier
import java.io.* ;
public class LireLigneClavier
{
public static void main (String[] args)
throws java.io.IOException
{
BufferedReader inr = new BufferedReader
(new InputStreamReader (System.in)) ;
System.out.print(´´tapez un nombre ; ´´) ;
String s = inr.readLine() ;
Int a = Integrer.parseInt(s) ;
System.out.println(a*a) ; // imprime a au carré
}
}
EXERCICE 1
Faire un programme qui calcule la moyenne de N notes saisies au clavier
( la somme des notes sera calculée au fur et à mesure de la saisie).
Pas à pas :
Déclaration des variables :
N = nombre de note à saisir
I = compteur de 1 à N
somme = cumul de la somme
note = note saisie par l’utilisateur
moyenne = résultat
Algorithme :
Somme  0
Saisir N
Pour i = 1 à N
Saisir note
Somme  somme + note
Moyenne  somme/N
Afficher (moyenne)
Solution :
import java.io.* ;
class lireligne
{
public static void main(String args[])
throws java.io.IOException
{
BufferedReader inr = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Entrez le nombre de notes a saisir : ");
String s =inr.readLine();
int nbNotes = Integer.parseInt(s);
int somme = 0;
int i;
for(i=0; i<nbNotes; i++)
{
System.out.println("entez votre note numero : " +i);
s = inr.readLine();
somme += Integer.parseInt(s);
}
System.out.println("La somme est =" +somme);
}
}
EXERCICE 2 :
Faire un programme simulant une calculatrice 4 opérations
(saisir un nombre, une opération, et un nombre puis afficher le résultat).
= pour terminer le programme.
Exemple :
2*5 10
4=6 fin du programme
Pas à pas :
1. saisir les données (valeurs et opérateurs)
2. Faire les calculs
3. Afficher le résultat
Déclaration des variables
float val et val2 = les 2 valeurs courantes de l’opérations
float res = résultat de l’opération
Bool fin = fin des calculs ?
Fin  faux
faire {
saisir val1, op et val2
suivant op
si op =´*´alors res  val1*val2
si op =´/´alors res  val1/val2
si op=´+´ alors res  val1+val2
si op =´-´alors res val1-val2
si op=´=´alors fin vrai
fin suivant
afficher res
} tant que (non fin)
Solution :
import.java.io.* ;
class calculette {
public static void main(String args[])throws java.io.IOException
{
int val1,val2,res = 0 ;
char oper ;
boolean fin=false ;
BufferedReader inr = new BufferedReader(new
InputStreamReader(System.in)) ;
String sval1, soper, sval2 ;
do
{
System.out.println(´´NOMBRE OPERATEUR NOMBRE, par exemple :
5*2´´) ;
System.out.println(´´Operateur = pour terminer \n´´) ;
System.out.println(´´Calcul : ´´) ;
sval1 = inr.readLine() ;
soper = inr.readLine() ;
sval2 = inr.readLine() ;
val1 = Integer.parselnt(sval1) ;
val3 = Integer.parselnt(sval2) ;
oper = soper.charAt(0) ; //prendre le premier caractère
switch(oper)
{
case ‘*’ : res=val1*val2 ; break ;
case’/’ : res=val1/val2 ; break ;
case ‘+’ : res=val1+val2 ;break ;
case’-‘ : res=val1-val2 ;break ;
case’=’ : fin=true ;
}
if(fin == false)
{
System.Out.Println(val1 + ‘’ ‘’+oper +’’ ‘’+val2+’’ =’’+res) ;
}
}
while(fin !=true) ;
}//main
}
Java Classes et Objets
Notions :
Classe : c’est un type d’objet
Définition d’un objet en terme de
Conteneus (variables)
Méthodes à exécuter pour accéder /modifier son contenu
Objet : c’est une instance d’une classe
Créé par un constructeur (méthode spéciale fournie par la classe)
Héritage : Relation entre les classes, donc entre les objets.
Classe
Définit un type d’objet en termes de
Variables = stockage d’état
Méthodes = opérations changeant l’état de l’objet
Different type de variable
Variable de classe : commun à tous les objets
Variable d’instance : Lié à une instance d’objet.
Variable d’instance : Utilise ces mots clés comme qualificatifs (modifier)
Public : indique un accès libre à la variable
Private : indique un accès exclusif par les méthodes de classe
Protected : indique un accès réservé aux méthode de la classe et de ses
descendants.
Sans mots clef : accessible seulement par les autres classes du même
package.
Variable d’instance, exemple :
class Compte
{
public int numero ; //variable d’instance
private float solde ;//variable d’instance
static public int nb2comptes = 0 ; //variable de classe
{
// bloc d’initialisation
numero = 0 ;
solde = 0.0f ;
nb2compte++ ;
}
}
Objet :
Instance d’une classe :
Contient les valeurs associées à un objet particulier
Pour chaque variable d’instance de la classe qui le définit.
Difference classe VS objet
Classe : définit le modèle de l’objet, de ses propriétés et attributs généraux
Ex : classe vélo
couleur, nombredevitesse
Objet : Incarne une instance avec des paramètres propres :
Ex : objet vélo
couleur=bleu, vitesse = 10, …
Constante
Déclaration, puis première initialisation
final int numeroBanque ;
numeroBanque = 2345 ; // ok
numeroBanque = 2345 ; // erreur (car valeur est final)
Déclaration avec initialisation
final int numeroBanque = 2345 ;
numeroBanque = 2345 // erreur
Exemple de constante : Float
Champs :
public final static float POSITIVE_INFINTY
public final static float NEGATIVE_INFINITY
public final static float NaN
public final static double MAX_VALUE
1.40129846432481707e-45f
public final static double MIN _VALUE
3.40282346638528860e+38f
Variable de classe
Utilise le mot clé static .
class Compte
{
static int nb2comptes = 0 ;
static String nomBanque = ‘’MiraB’’ ;
static finl int numeroBanque ;
static
{
// bloc d’initialisation static
numeroBanque = 0 ;
}
}
Accès à une variable d’un objet
Se fait en précisant le nom de l’objet suivit de ’’.’’ et du nom de la variable
Compte client1 = new Compte() ;
if(client1.numero == 1)
client1.solde += 10000.0f ;
class Compte
{
public int numero ;
private float solde ;
public float calculerSolde()
{ return this.solde ; }
}
class AutreCompte
{
private Compte c = new Compte() ;
public float autresolde()
{
if (c.numero >0) //ok
return c.solde ; //erreur
return 1.0f ;
}
}
Structure d’un programme Java
3 sections optionnelles :
Déclaration de package
Import de packages ou de classes : import
Déclarations des classes et des interfaces du fichier.
Package :
Définit un groupe de travail dans lequel les classe doivent être rangées
Cette directive doit être placée au début du fichier
Le nom de package correspond à un répertoire dans lequel les
classes doivent être placées.
Exemple
package alternet ; // Répertoire : alternet/
class AltClasse1 {} // alternet/Altclasse1.class
Import :
Permet de charger des classes d’autre packages en vue d’utiliser leurs
fonctionnalités.
On peut spécifier le nom du package qui contient la ou les classes
Exemple :
import cePackage.* ; (nom du package d’ou on utilise la classe)
import package.autreClasse ;
import cetteClasse ;
Déclaration de classses
Syntaxe : qualificatif class nomClasse{}
public class Classe2
{ // corps de classe2 }
Les qualificatifs sont
public : indique la classe exporté par le fichier .java (même nom que le
fichier.java
final : indique que la classe ne peut pas être dérivée
abstract : obligatoire pour les classes contenant les méthodes abstract
(on ne peut pas créér d’instance d’objet de ces classes)
Le corps d’une classe peut contenir :
des dclarations de varialbes
des déclarations de méthodes
des blocs d’intialisatilons
des classes internes (déclarée à l’interieur d’une classe)
Classe interne :
Les qualificatifs sont :
public, private, protected ( comme variable d’instance)
final, abstract (comme les classes externes)
static ( indique que la classe est indépendante des instances d’objet)
Création de classe interne static
class Externe
{
static class Interne {}
}
class Autre
{
public Externe.Interne ei ;
{ ei= new Externe.Interne() ; }
}
Création de classe interne non static
class Externe
{
oublic class Interne {}
}
final class Autre
{
public Externe e = new Externe() ;
public Externe.Interne ei ;
{
ei= new Externe.Interne() ; //erreur
ei= e.new Interne() ; //ok
}
}
Classe interne non static
Dépend de l’instance de la classe externe
2 objets d’une même classe externe peuvent stocker des instances
internes différentes
Conserve une éférence vers cette classe
Permet d’appeler les méthodes de la classe externe
Classes internes imbiquées
Une classe interne peut à son tour contenir des classes internes
class Externe
{ public class Interne1
{
private class Interne2 {}
}
}
Compilation : chaque classe d’un fichier .java génère un fichier .class
lors de la compilation.
Pour une classe interne le nom du fichier :
Externe$Intrne.class
Externe$Interne1$interne2.class
Exemple :
// 1 debut du fichier maClasse.java
//déclaration de package :
package MonPackage
// 2 déclaration d’Import
//classe sans package :
import MaClasse
// classe d’un package :
import MonPackage.MaClasse ;
//toutes les classes d’un package
import MonPackage.* ;
//3 déclarations des classes
public class MaClasse
(1 seule classe déclarée public, par convention porte le même nom que le fichier.)
{//corps de MaClasse}
class MaClasse2
{ //corps de Maclasse2}
Introduction à la programmation objet
La programmation par objet PPO
On peut dire que la complexité des problèmes qu’opn est capable de resoudre est
directement proportionnelle au type et à la qualité de nos capacités d’abstraction.
Le fortran, Basic et le C sont de nettes amélioration par rapport au langage assembleur
mais leur abstraction première requiert une réflexion en termes de structure ordinateur
plutôt qu’à la structure du problème.
L’approche orienté objet va un cran plus loin en fournissant un concepteur des outils
premettant de représenter des éléments dans l’éspace problème.
L’idée est que :
Le programmeur est autorisé à s’adapter à l’ésprit du problème en ajoutant de
nouveaux types d’objet, de façon à ce que, quand on lit le code décrivant la solution,
on lit aussi quelque chose qui décrit le problème.
La programmation orienté objet (POO) permet de décrire le rpoblème avec les termes
même du problème plutôt qu’avec les termes de la machine ou la solution sera mise en
œuvre.
Tous les objets ont leur propre caractéristique et comportement.
1. Toute chose est un objet (=variable amélorée)
2. Un programme est un ensemble d’objet se disant les uns aux autre quoi faire.
3. Chaque objet à son propre espace de mémoire composé d’autres objets.
4. Chaque objet est d’un type précis.
5. Tous les objets d’un type particulier peuvent recevoir le même
message.(=substituablité)
Un objet dispose d’une interface :
Une classe décrit un ensemble d’objet partageant des caractéristiques communes
et des comportements.
Une fois qu’une classe est créée, on peut créer autant d’objets de cette classe
qu’on veut et les manipuler comme s’ils étaient les éléments du problème.
Comment utiliser un objet ?
Il faut pouvoir lui demander d’exécuter une requète.
Chaque objet ne peut traiter que certaine requetes (définis par son
interface).
Limite d’accès :
Java utilise 3 mots clés pour fixer les limites au sein d’une classe :
public (tt le monde à accès au définition)
private (personne y a accès)
protected (seul la classe et ses dérivée y ont accès)
par defaut (accès dans le même package sinon se comporte en private)
Les méthodes
Définition : fonction, procédure définie dans une classe.
On distingue
Les méthodes de classe (invoquées sans faire référence à un objet)
Les méthodes d’instance (invoquées pour une instance d’objet)
Encapsulation : séparation entre le service rendu par la classe et son implementation.
Il est judicieux de cacher les varaibles d’instance private en fournissant un accès
par des méthodes qui testent la validité des paramètres.
Déclaration d’une méthode (symilaire au C)
type nomDeFonction (type param1,…)
{
}
Pas de déclaration sans définition ( sauf méthode abstract c.f héritage)
Méthode de classe static :
class compte
{
static String nomBanque = "mirab " ;
static bool initialise ()
{
return true;
}
static String getnomBanque()
{
return nomBanque
}
}
Méthode d'instance :
class Compte
{
private float solde;
private boolean testSolde()
{…}
public float getSolde()
{
if (testsolde())
retun solde; //défini après
return 0.0f;
}
}
Autres qualificatifs :
native : indique un code spécifique à une architecture matérielle (C/C++)
donc non portable !
synchronised : bloque l'accès à l'objet durant l'opération.
Utile pour garantir les opérations en mode d'exécution concurrente.
Pas de fonction globale mais fonction de classe :
class A
{
public static float puiss_n(float x, int n)
{
float puiss = 1.0f;
for ( ; n > 0; -- n)
puiss *= x;
return puiss;
}
Appel :
}
class b
{
static public void main (String args[])
{
A.puiss_n(3.0f, 5);
}
}
Ordre des déclarations quelconque:
class Compte
{
private bool testSolde()
{…}
public float getSolde()
{
if (testSolde())
return solde; //défini après
return 0.0f;
}
private float solde;
Surcharge de méthode :
interdit de surchargé la fonction par type de retour :
public int methodeCoue()
{ retun1 ; }
public boolean methodeCoue() //erreur
{ return true ; }
Constructeur :
méthode spéciale :
appelée pour crée un objet
reprend le nom de la classe par convention
pas de type
Qualificatifs : public, private
Par défaut : constructeur public et sans paramètre qui ne fait que l'allocation
mémoire.
class Compte
{
public Compte()
{ solde = 0.0f; }
public Compte(float solde1)
{ solde = solde1; }
private float solde;
}
Appel d'un constructeur : (new)
class Comptablilite
{
private Compte compte1;
public Comptabilité ()
{ compte1 = new Compte(); }
public Comptabilité (Compte c)
{ compte1 = c; }
}
Destruction des objets :
Réalisée automatiquement par le garbage collector
quand l'objet n'est plus utilisé
pas forcement immédiatement
Le garbage collector appelle la fonction finalize() juste avant de détruire un objet.
Passage de paramètres :
Pour les types de base = par valeur (il faut utiliser une classe conteneur pour les
modifier).
Pour les objets = par référence.
exemple :
class Compte
{
public Compte()
{ reset(this); }
private void reset(Compte c)
{ c.solde = 0.0f; }
private float solde;
}
Contre exemple :
class Compte
{
public Compte()
{
reset(this.solde); //passage par valeur
}
private void reset (float s)
{ s = 0.0f; }
private boolean reset (float s) // erreur
{ s = 0.0f; return true; }
private float solde;
}
Paramètre constant final :
Un paramètre comme une variable locale peut être qualifié de constant
Avec le mot clé final :
public void reset (final Compte c) {}
Un paramètre final ne peut pas être modifié
compte b = new Compte ();
c = b // erreur
Mais l'objet référencer peut être modifié
c.val = b.val; // ok
Classe conteneur :
Pour pouvoir modifier un type de base passé en parmètre.
class DoubleCont // classe conteneur
{
public double val = -1.0;
public DoubleCont ()
{}
public DoubleCont (double v)
{ val = v;}
}
class Compte
{
public Compte ()
{
solde = new DoubleCont();
reset (this.solde);
}
private void reset (DoubleCont s)
{ s.val = 0.0; }
private DoubleCont solde ;
}
Les exceptions : interruption de l'exécution du programme (erreur).
try : sert à délimiter un bloc dans lequel une exception peut survenir
try
{ // bloc d'instruction}
catch : associé à try {}, sert à spécifier une action pour un typde d'excepetion donné
catch (TypeException1 e)
{ // instruction gérant l'erreur }
finally : associé à try {}, sert à spécifier une action à effectuer erreur ou pas.
finally
{ //instruction finales }
Exemple :
public Object securedPop (pile p)
{
Object o = null;
try { o = p.pop(); }
catch (IOEception e)
{ System.err.println("Erreur IOException : " + e.getMessage() ); }
finally
{
if (o == null)
system.out.println("objet null!");
return o ;
}
}
throw : génère une exception sous forme d'un objet de type donné, Throwable …
throw objetException;
indique qu'une classe ou méthode est suceptible de générer une exception de type
donné.
class X throws objetExcption;
Exemple Throws :
public Object pop() throws IOException
{
object obj ;
if (size == 0)
throw new IOException();
obj = objectAt (size – 1 );
setObjectAt (size – 1, null);
size -- ;
return obj;
}
Héritage
Hiérarchie des classes :
On peut organiser les classes sous formes de hiérarchie
En Java, une classe peut avoir au plus une classe parente directe.
qualficatif class X extends Y{}
 la X hérite de la classe Y
Une sous classe hérite :
Des paramètres des classes parentes
Des méthodes des classes parentes (super classes)
Elle peut :
Soit redéfinir des méthodes de la classe parente (overload)
Soit les réutiliser et ajouter ses propres paramètres et méthodes.
Exemple :
class Compte
{
private int numero;
public float solde;
public Compte()
{
numero = 0;
solde = 0.0f;
}
public float CalculerSolde ()
{ return solde; }
public void CahngerNumero (int n )
{ numero = n ; }
}
class CompteDepot extends Compte
{
public float operations [];
public int nbop = 0 ;
public CompteDepot () {}
public float CalculerSolde ()
{
for (int i = 0; i < nbop; ++i)
solde += operations [i]
nbop = 0;
return solde;
}
}
Utilité de l'héritage :
Généralement utilisé pour modifier le comportement d'une classe( spécialisation).
Réutilisation de méthodes communes.
Empêche la modification directe de la classe existente.
Héritage versus compostion
Héritage se fait sur des classes partageant des mêmes fonctionalités
(nombreDeroues, nombreDePassager).
Le lien entre des classes sans rapport se fait par simple composition.
 Une classe autobus peut utiliser une classe roue mais pas en hériter !
Constructeur & Héritage :
Lors de la création d'une instance (objet)
les constructeurs de toutes les classes parentes sont appelés,
dans l'orde parent -> enfant.
Constructeur :
On peut rediriger l'appel d'un constructuer vers un autre avec :
this(param, …) pour un constructeur de la même classe.
super(param, …) pour un constrcuteur de la classe parent.
Exemple : Entier
class Entier
{
public int _e;
Entier (int i)
{ _e = i ; }
Entier ()
{ this(0); }
}
class EntierPos extends Entier
{
entierpos(int i )
{
super(i);
if (i>=0)
_e = 0;
}
EntierPos()
{
super(0);
}
}
Appel super() implicite :
class EntierPos extends Entier
{
EntierPos (int i)
{ //super(); implicite
if (i<0)
_e = 0 ;
else
_e = i;
}
EntierPos()
{ super(); }
Conséquences :
Il faut soit :
créer un constructeur sans paramètre dans la super classe.
soit appeler explicitement super(params, …)
dans les constructeurs de la classe.
Autre utilisation de super :
On peut utiliser ce mot clé pour appeler des méthodes de la classe parente directe.
class CompteDepto extends Compte
{
//…
public CompteDepot (int num)
{ super.ChangerNumero(num) ; }
}
Redéfinition de varfiable :
Lorsqu'une variable d'une super classe est redéfinie dans une sous classe en
respectant exactement son nom, elle masque la variable de la super classe.
class Entier
{ public int _e; }
class EntierPos entends Entier
{ public int _e ; }
Exemple : Qualificatifs
class Entier
{
public int e;
protected int f;
private int g;
Entier ()
{
e = 0;
f = 1;
g = 2;
}
}
class EntierPos extends Entier
{
EntierPos()
{
e=0;
f=1;
g = 2; // non! car private !
}
}
Exemple 2 : qualificatifs
class Entier
class Entier
class EntierPos extends Entier
{
{
public int a ()
public int a()
{ return 0; }
{ return 1 ; }
}
}
{
public int e;
prototected int f;
private int g;
Entier ()
{
e=0;
f = 1;
g = 2;
}
}
class Autre // ne dérive donc pas
{
Autre(Entier ent)
{
ent.e = 0;
ent.f = 1; // non car protected = seulement pour les mêmes classes ou parentes
ent.g = 2; // non car private.
Redéfinition d'une méthode :
Lorsqu'une méthode d'une super classe est redéfinie dans une clase en respectant :
son nom, le nombre, l'ordre et les types des paramètres elle remplace la méthode
de la super classe pour les objets de cette sous classe.
Qualificatifs de classe :
qualif.class X [extends super X] {}
Les qualificatifs sont :
final : la classe ne peut être dérivée (pas de sous classe)
abstract : utilisé pour fournir des méthodes et des champs commun à
toutes les classes qui en dérivent.
public : désigne la classe correpsondant au nom de fichier, une seule par
.java
Autre qualificatifs de méthode :
Rappel : public, protected, private, static, native, synchronised
En + :
final : indique que la méthode ne peut pas être redéfinie dans une sous classe.
abstract : défini un modèle de méthode sans corps qui doit être redéfini dans toute
sous classe dérivée.
Utilité des classes abstraites :
Permet de modéliser des concepts qui n'ont pas de sens en termes d'existence.
Exemple de la nourriture (concept abstrait) :
abstract class Food
{
abstract public boolean isFruit();
}
class Carot extends Food
{
public boolean isFruit
{
return true;
}
}
class Apple extends Food
{
public boolean isFruit()
{ return true; }
}
class Chocolate extends Food
{
public boolean isFruit()
{ return false; }
}
Interface & Applet
Interface:
déf : c'est une collection de définition de méthode sans implémentations.
Syntaxe : qualificatif interface I extends J
{}
qualificatifs :
absent : l'inerfeace n'est utilisable que par les classes du même
package.
public : l'interface est utilisable par toutes les classes (1 par fichier)
Interet :
Permet de savoir qu'une classe possède ces méthodes, se comporte de telle
manière.
Relation avec une classe
class C implemets I //,k,…
{ // implémentation de toutes les méthodes de I }
Autre utilisation des interfaces :
Masquage de classe d'implémentation.
Certaine classe java sont cachées derrière une interface commune.
Permet de créer des classe liées à differents système d'exploitation.
Interface vide :
Permet de créer une catégorie de classes :
chaque classe implémentant ce type d'interface appartient à telle ou telle
catégorie.
Pour tester si la classe d'un objet appartient à une catégorie, il suffit
d'utiliser l'opérateur instanceof() avec le nom de l'interface.
ex : interface Cloneable
Déclaration d'un ensemble de constantes : utiliser dans des classes sans liens
d'héritage.
interface ConstatntesCommunes
{ // déclaration des constantes A,B,C
}
class Classe1 extends SuperClasse1 implements ConstantesCommunes
{//les constantes A,B,C sont utilisables dans la Classe1
}
class Classe2 extends SuperClasse2 implements ConstantesCommunes
{//Les constantes A,B,C sont utilisables dans la classe Classe2
}
Exemple d'interface :
public interface appareilElectrique
{ // teste si l'appareil est enclenché
public boolean estEnclenché();
/* on appelle cette méthode lorsqu'on branche l'aapareil dans une source
de courant active (=true) */
public void alimenté(boolean alim);
}
Exemple de classe
Class lampe implements appareilElectrique
{
private boolean allumé = false;
public boolean estEnclenché()
{ return allumée;}
public void alimenté(boolean alim)
{allumée = alim;}
Differences avec les classes abstract
Une interface ne peut définir de variable seulement des constantes.
Une classe ne peut hériter que d'une seule super classe (abstract incluse)
Mais elle peut implémenter plusieurs interfaces.
On peut implementer des méthodes (non abstract) dans une classe abstract,
Aucune implémentation accepetée dans une interface.
Héritage des interfaces :
Attention une classe qui implémente une interface qui hérite d'une super-interface
doit implémenter toutes les méthodes définies dans ces interfaces.
interface A
{ // Déclaration des méthodes de A }
interface B extends A
{//Déclaration des méthodes de B}
class Classe1 implements B
{ // définitions des méthodes de B et A }
Interface comme type d'objet :
Le nom d'une interface peut être utilisé comme type d'objet.
Seules des instances de classes implémentant cette interface peuvent être
assignées à des variables de ce type.
public interface A
{//Déclaration méthodes A }
class ClasseA implements A
{
public void méthode(A objetdetypeA)
{ objetdetypeA = new ClasseA();}
}
Tout objet de type interface X sont garantis d'avoir les méthodes déclarées dans
cette interface X.
public interface A
{public int méthodeA(A objetdetypeA);}
class ClasseA implements A
{
public void méthodeC(A objetdetypeA);
{objetdetypeA.méthodeA();}
public int méthodeA(A objetdetypeA)
{…}
}
Application & Applet
Rappel :
Application :
Programme indépendant
Point d'entrée du programme
public static void main(String [] args)
Applet :
Programme téléchargeable
Executé automatiquement quand ils sont integrés à l'intérieur des pages
HTML.
Applet Java :
La classe d'un applet doit :
dériver de la classe Applet, être public
avoir un constructeur public sans paramètre
public class monApplet exetends Applet
{
public monApplet (){}
}
Pour l'exécution il faut 2 fichiers :
L'exécutable de l'applet : monApplet.class
Le fichier .html qui décri l'applet au navigateur
tag html :
<APPLET CODE =monApplet.class WIDTH=150
HEIGHT=25></APPLET>
Exemple Hello World :
import java.applet.Applet;
import java.awt.Graphics;
public class AppletHelloWorld
extends Applet
{
public void paint(Graphics g)
{ g.drawString("Applet Hello World",20,20);
}
public static void main (String [] args)
{ System.out.println("Applet Hello World");
}
Syntaxe complète des tag html
<APPLET CODE=ClasseApplet.class
WIDTH = largeur, HEIGHT = Hauteur
CODEBASE ="répertoire" ALT="marche pas"
NAME="NomApplet"
ALIGN=alignement
ARCHIVE="fichier.jar"> Message HTML pour les clients non
java</applet>
Téléchargement