2 Java
2 Java
et JAVA avanc
Redouane EZZAHIR
[email protected]
Plan de cours
Introduction JAVA
Concept Objet:
Classe, Objet, Hritage, abstraction, interfaces
Exceptions et Entres/sorties
Gnriques (types paramtrs)
Programmation concurrente (threads, synchronisation)
JDBC et API Java pour XML
Java Servlet & JSP
JSF (JavaServer Faces)
Hebirnate et JPA
Le Framework Maven
Plan pour aujourd'hui
Classes et objets
Accs aux membre et le mot cl this
Principe de la P.O.O :
1 objet 1e responsabilit
Encapsulation
Immutabilit (final)
Type et Classe
Dcouplage interface/implantation
Abstraction et concept dhritage
Principe de localit et polymorphisme
Programmation objet
Parking PrixModele
+entrer(int,Voiture v) +getPrix(Modele):int
+sortir(int):voiture
Voiture 1 Modele
-matricule:String -nom:String
+getNom():String
+setNom(String)
Encapsulation
class AutreClass {
void autreMethod(Point p) {
p.init(2.0,3.0);
System.out.println(p.toString());
}
}
Mais il y a un problme
Supposons que l'on souhaite que rho ne soit
jamais gal zro class Point {
private double rho;
private double theta;
String s=args[0];
Type Whale whale=new Whale(2,3);
}
Classe
Les Types objet (2)
Cercle
L'hritage, c'est 3 choses : rayon:double
Rcupration des membres (hritage structurelle)
(cercle possde les champs
de FormeGeometrique)
@Point
Pile
centre 5
cercle couleur
rayon
1.7
Hritage de champs
class FormeGeometrique {
private Point centre;
private int couleur;
public FormeGeometrique(Point centre, int couleur) {
this.centre =centre;
this.couleur=couleur;
}
}
Constructeur vs Mthode
}
public static main(String[] args) {
Point p = new Point(0,0);
Cercle c1 =new Cercle(p, 1, 5);
c1.deplacer(2, 2); // ok
Cercle c2 = Cercle(null, 1, 5);
c1.deplacer(2, 2); // ok but,
//Exception in thread "main" java.lang.NullPointerException
}
}
}
public void deplacer() {
if(centre==null){
System.err.println("impossible de deplacer cet cercle" );
}
else this.centre.deplacer();
}
Assurer la redfinition
L'annotation@Override indique au
compilateur de gnrer une erreur si
une mthode ne redfinit pas une autre
public class Cercle extends FromeGemetrique{
final double rayon;
public Cercle(Point centre, double r, int couleur){
super(centre, couleur);
this.rayon = r;
}
public @Override void deplacer() {
if(centre==null){
System.err.println("impossible de deplacer cet cercle" );
}
else this.centre.deplacer();
}
Redfinition vs Surcharge
cercle @Cercle
forme
public static main(String[] args) {
Cercle cercle=new Cercle(...);
cercle.deplacer(1,1)); // Cercle::deplacer()
FormeGeometrique frome=cercle; // sous-typage
forme.deplacer(1,1); // toujours Cercle::deplacer()
}
}
public void deplacer() {
if(centre!=null){
super.centre.deplacer();
}
<<interface>>
Vehicle
Cycle
BiCycle MotoCycle
BiCycle MotoCycle
AVANT APRES
Intrt des classe abstraite
if (o instanceof String) {
String s=(String)o;
doSomeStuff(s);
}
}
}
Mauvais usage du instanceof
Le instanceof ne doit pas se
substituer au polymorphisme
public static void renderLoop(GItem[] items) {
begin(); GItem
for(GItem item:items) {
if (item instanceof Circle)
renderCircle((Circle)item);
else Circle Triangle
renderTriangle((Triangle)item);
}
end();
}
GItem
Circle Triangle
Note sur le transtypage