Vous êtes sur la page 1sur 40

Java: Cours 2

Christian Bac

CSC 4002
Novembre 2009
Revision : 1228
Java: Cours 2

Sommaire du cours

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 2/40


Java: Cours 2

1 Java: Classes et Héritage

1.1 Héritage: UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4


1.2 Upcast et Downcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Héritage, membres et protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Surcharge d’attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5 Surcharge de méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.6 Visibilité en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 3/40


Java: Cours 2 1 Java: Classes et Héritage

1.1 Héritage: UML

Base Class

Derived Class

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 4/40


1 Java: Classes et Héritage 1.1 Héritage: UML

1.1.1 Héritage: principes

¥ Une classe concrétise un type de donnée abstrait + un comportement.


¥ Besoin d’étendre des classes : classe Dérivée à partir d’une classe de Base.
¥ Plutôt que de couper/coller du code d’un fichier à un autre, on introduit la notion
d’héritage.
¥ Une class D qui hérite d’une classe B, partage tous les membres de B.
¥ Une class D qui hérite d’une classe B peut étendre ou modifier les structures de
données et le comportement hérité de la classe de base.

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 5/40


1 Java: Classes et Héritage 1.1 Héritage: UML

1.1.2 Héritage: comment en JAVA

¥ Une classe ne peut hériter que d’une autre classe (héritage simple),
¥ Une classe hérite d’une autre par l’utilisation du mot réservé extends,
¥ Toutes les classes héritent de la classe java.lang.Object,
¥ L’opérateur instanceof permet de savoir si une référence correspond à un objet
d’une classe.
¥ Le mot réservé final interdit à toute autre classe d’hériter de la classe sur lequel il
est utilisé.

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 6/40


1 Java: Classes et Héritage 1.1 Héritage: UML

1.1.3 Exemple héritage UML

Ellipse
−cx,cy,r1,r2 : double
+Ellipse(double,double,double,double)
+Ellipse(double,double)
+area():double
+getX():double
+getY():double

Circle

+Circle(double,double,double)
+Circle(double)

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 7/40


1 Java: Classes et Héritage 1.1 Héritage: UML

1.1.4 Exemple héritage(1)

1 package Shapes;
2 public class Ellipse {
3 private double cx,cy;
4 protected double r1, r2;
5 public Ellipse(double x, double y,double r1, double r2) {
6 this.r1 = r1; this.r2 = r2; cx = x; cy =y;
7 }
8 public Ellipse(double r1, double r2) {this(0,0,r1,r2);}
9 public double area(){return 2* Math.PI * r1 * r2;}
10 public double getX(){return cx;}
11 public double getY(){return cy;}
12 }

1 package Shapes;
2 public final class Circle extends Ellipse {
3 public Circle(double x, double y, double r) {super(x,y, r, r);}
4 public Circle(double r) {super(r, r);}
5 public double getRadius() {return r1;}
6 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 8/40


1 Java: Classes et Héritage 1.1 Héritage: UML

1.1.5 Exemple héritage(2)

1 import Shapes.Circle;
2 import Shapes.Ellipse;
3
4 public class InheritExample {
5 public static void main(String[] args) {
6 Ellipse e = new Ellipse(2.0, 4.0);
7 Circle c = new Circle(2.0);
8 System.out.println(e instanceof Circle); // false
9 System.out.println(e instanceof Ellipse); // true
10 System.out.println(c instanceof Circle); // true
11 System.out.println(c instanceof Ellipse);
12 // true Circle isA Ellipse
13
14 }
15 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 9/40


Java: Cours 2 1 Java: Classes et Héritage

1.2 Upcast et Downcast

Transtypage implicite et explicite lors de l’affectation de références d’objets faisant partie


d’un même arbre d’héritage.
¥ Upcast: une référence d’une classe B peut référencer toute instance de la classe B
ou de ses classes dérivées,
¥ Downcast: une référence d’une classe D dérivée d’une classe B peut recevoir une
référence de la classe B si et seulement si:
¨ l’object référencé est bien du type D ou d’un de ses types dérivés,
¨ la référence doit être explicitement transtypée (cast) vers le nouveau type (D).

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 10/40


1 Java: Classes et Héritage 1.2 Upcast et Downcast

1.2.1 Exemple Upcast et Downcast

1 import Shapes.Circle;
2 import Shapes.Ellipse;
3
4 public class UpDownExample {
5 public static void main(String[] args) {
6 Ellipse e = new Ellipse(10,20,2.0, 4.0);
7 Circle c = new Circle(30,40,2.0);
8 System.out.println(e instanceof Circle); // false
9 System.out.println(e instanceof Ellipse); // true
10 e = c; // UpCast
11 System.out.println(e instanceof Circle); // true dynamic
12 System.out.println(c instanceof Ellipse);
13 // true Circle isA Ellipse
14
15 c = (Circle)e; // Downcast
16 }
17 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 11/40


Java: Cours 2 1 Java: Classes et Héritage

1.3 Héritage, membres et protection

¥ Une classe D héritant d’une classe B hérite de tous ses membres:


¥ les membres privés de B sont inaccessibles depuis D;
¥ les membres protected de B sont accessibles depuis D;
¥ les membres public sont accessibles depuis D comme depuis les autres classes.

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 12/40


1 Java: Classes et Héritage 1.3 Héritage, membres et protection

1.3.1 Exemple: membres et protection(1)

1 package Shapes;
2 public final class Circle extends Ellipse {
3 public Circle(double x, double y, double r) {super(x,y, r, r);}
4 public Circle(double r) {super(r, r);}
5 public double getRadius() {return r1;}
6 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 13/40


1 Java: Classes et Héritage 1.3 Héritage, membres et protection

1.3.2 Exemple: membres et protection (2)

1 import Shapes.Circle;
2 import Shapes.Ellipse;
3
4 public class ProtExample {
5 public static void main(String[] args) {
6 Ellipse e = new Ellipse(10,20,2.0, 4.0);
7 Circle c = new Circle(30,40,2.0);
8 System.out.println("e area "+ e.area());
9 System.out.println("c area " + c.area());
10 }
11 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 14/40


Java: Cours 2 1 Java: Classes et Héritage

1.4 Surcharge d’attribut

¥ Une classe peut redéfinir des attributs avec des noms identiques à ceux de son
ancêtre.
¥ Accès aux attributs surchargés:
¨ Une classe peut accéder aux attributs surchargés de ses ancêtres avec une cast,
¨ Une classe peut aussi accéder aux attributs surchargés de sa classe parente en
utilisant le mot réservé super.

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 15/40


1 Java: Classes et Héritage 1.4 Surcharge d’attribut

1.4.1 Exemple: surcharge d’attributs

1 class A { int x; A(){x=1;}}


2 class B extends A { int x; B(){super(); x=2;}}
3 class C extends B {
4 int x,a;
5 C() {super(); x=3;}
6 void test() {
7 System.out.println(" x value in C " + x);
8 System.out.println(" x value in B " + super.x);
9 System.out.println(" x value in A " + ((A)this).x);
10 }
11 }
12
13 public class ABC {
14 public static void main(String args[]) {
15 C c;
16 c = new C();
17 c.test();
18 }
19 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 16/40


Java: Cours 2 1 Java: Classes et Héritage

1.5 Surcharge de méthodes

¥ Une classe peut redéfinir les méthodes dont elle hérite.


¥ Java est polymorphique:
¨ C’est la surcharge la plus prôche de la classe qui est invoquée, même lorsque
l’appel est réalisé à travers une référence d’une classe ancêtre.
¨ Liaison dynamique ou tardive,
¨ Un accès explicite à une méthode surchargée de la classe parent est possible en
utilisant le mot réservé super.

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 17/40


1 Java: Classes et Héritage 1.5 Surcharge de méthodes

1.5.1 Exemple : surcharge de méthodes


1 class A {
2 int x;
3 A(){x=1;}
4 public String toString() {
5 return "A class object " + x ;
6 }
7 }
8 class B extends A {
9 int x;
10 B(){
11 super(); x=2;
12 }
13 public String toString() {
14 return "B class object " + x ;
15 }
16 }
17 class C extends B {
18 int x;
19 C() {
20 super(); x=3;
21 }
22 void test() {
23 System.out.println(toString());
24 System.out.println(super.toString());

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 18/40


1 Java: Classes et Héritage 1.5 Surcharge de méthodes

25 System.out.println(((A)this).toString());
26 }
27 public String toString() {
28 return "C class object " + x ;
29 }
30 }
31
32 public class ABCm {
33 public static void main(String args[]) {
34 C c;
35 c = new C();
36 c.test();
37 }
38 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 19/40


Java: Cours 2 1 Java: Classes et Héritage

1.6 Visibilité en Java

Un membre de la classe C peut être:


¥ private accessible seulement à la classe;
¥ friendly (pas de mot réservé) accessible aux classes dans le même paquetage ;
¥ protected accessible au paquetage et toute classe dérivée en dehors du paquetage ;
¥ public accessible à toutes les classes.

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 20/40


1 Java: Classes et Héritage 1.6 Visibilité en Java

1.6.1 Table de visibilité

package P1; package P2;


class c1 { class c4 extends c1 {
public int A; ...
protected int B;
}
int C;
private int D; class c5 {
} ...
class c2 extends c1 { }
...
}
class c3 {
...
}

A B C D
Accessible to c2 o o o -
Accessible to c3 o o o -
Accessible to c4 o o - -
Accessible to c5 o - - -

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 21/40


Java: Cours 2

2 API Java : java.lang.object et collections

2.1 Plan : premières classes de l’API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23


2.2 La classe Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3 java.lang.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4 java.util.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 22/40


Java: Cours 2 2 API Java : java.lang.object et collections

2.1 Plan : premières classes de l’API

¥ java.lang.Object
¥ java.lang.String
¥ Collections en Java
¨ java.util.Vector
¨ java.util.HashMap

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 23/40


Java: Cours 2 2 API Java : java.lang.object et collections

2.2 La classe Object

public String toString()


protected Object clone()\
throws CloneNotSupportedException
public boolean equals(Object obj)
protected void finalize() throws Throwable
public final Class getClass()
public int hashCode()
...

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 24/40


2 API Java : java.lang.object et collections 2.2 La classe Object

2.2.1 Égalité d’objets

Les objets sont manipulés par des références ⇒


o1 == o2
Teste si les références sont égales
o1.equals(o3)
Teste si le contenu de l’objet référencé par o3 est égal au contenu de l’objet
référencé par o1
obj1 obj2
o1
"texte" o3 "texte"
o2

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 25/40


2 API Java : java.lang.object et collections 2.2 La classe Object

2.2.2 Copie simple/légère/profonde

Les objets sont manipulés par des références ⇒


o2 = o1 : copie la référence o1 dans o2
obj1 obj1
o1 "Jean" o1 "Jean"

"Paul" "Paul"
o2 o2
obj2 obj2

o2 = o1.clone() : o2 référence un nouvel objet (copie de o1)


"Jean"
o1 "Jean" o1

"Paul"
"Paul"
o2 o2
"Jean"

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 26/40


2 API Java : java.lang.object et collections 2.2 La classe Object

2.2.3 Interface de Programmation

¥ Les paquetages de l’API Java commencent tous par java


¥ Par défaut, java.lang.* est importé dans tout fichier (toutes les classes du
paquetage java.lang)
¥ Ne pas confondre hiérarchie de classes et noms des paquetages !!
¥ Avantage : interface disponible quelle que soit la plateforme

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 27/40


2 API Java : java.lang.object et collections 2.2 La classe Object

2.2.4 Quelques paquetages Java

¥ java.lang ¥ java.applet
¥ java.util ¥ java.awt
¥ java.io ¥ java.math
¥ java.net ¥ java.text

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 28/40


Java: Cours 2 2 API Java : java.lang.object et collections

2.3 java.lang.*

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 29/40


Java: Cours 2 2 API Java : java.lang.object et collections

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 30/40


2 API Java : java.lang.object et collections 2.3 java.lang.*

2.3.1 Classe Integer

1 public class IntExample{


2 public static void main(String argv[]) {
3 Integer i = new Integer("4567");
4 int j = i.intValue();
5 System.out.println("Integer i :" + i + " int j :" + j + "\n");
6 // Pour realiser une conversion
7 try { j = Integer.parseInt(argv[0]); }
8 catch ( NumberFormatException e) {
9 System.out.println("Erreur de conversion "
10 + e.toString());
11 System.exit(1);
12 }
13 System.out.println("String argv[1] :" + argv[0] + " j :" + j + "\n");
14 }
15 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 31/40


2 API Java : java.lang.object et collections 2.3 java.lang.*

2.3.2 Classe String

¥ Gestion des chaînes de caractères


¥ Une String n’est pas modifiable
¥ Les constantes littérales comme "abc" sont converties en String
¥ L’opérateur + permet la concaténation

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 32/40


2 API Java : java.lang.object et collections 2.3 java.lang.*

2.3.3 Exemple pour String

1 import java.util.Date;
2 public class StringExample{
3 public static void main(String argv[]) {
4 String s = "\u00catre ou ne pas \u00eatre";
5 int lg = s.length();
6 System.out.println(s + " " + lg);
7 String c = "Java".substring(2,3);
8 String t = "Java" + "Soft";
9 char[] data = { ’J’, ’a’, ’v’, ’a’ };
10 String n = new String(data);
11 String p = String.valueOf(2*Math.PI);
12 String d = String.valueOf(new Date());
13 String j = "Java";
14 String k = "Java";
15 if (j == k) { System.out.println("== Vrai");}
16 if (j.equals("Java")) { System.out.println(".equals Vrai");}
17 }
18 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 33/40


2 API Java : java.lang.object et collections 2.3 java.lang.*

2.3.4 Classe StringBuffer

¥ Gestion de chaînes de caractères modifiables avec :


¨ setCharAt()
¨ append()
¨ insert()
¨ toString()

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 34/40


Java: Cours 2 2 API Java : java.lang.object et collections

2.4 java.util.*

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 35/40


2 API Java : java.lang.object et collections 2.4 java.util.*

2.4.1 Classes paramétriques (1) HashTable<K,V>

¥ Il s’agit de réaliser des tableaux associatifs pour, à partir d’une clé, retrouver la
valeur et inversement
¥ Cette classe est dite paramétrique en effet elle associée à deux paramêtres qui
correspondent à la classe de la clé et de la valeur. C’est pourquoi sa définition est
notée HashTable<K,V>.
¥ Exemple: HashTable<String,String> myHasTable;
¥ La classe associée à la clé doit supporter les méthodes hasCode() et equals()
¥ HashTable supporte quelques méthodes notables:
¨ boolean contains(Object value)
¨ Enumeration<K> keys()
¨ Enumeration<V> values()
¨ V put(K key, V value)

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 36/40


2 API Java : java.lang.object et collections 2.4 java.util.*

2.4.2 Exemple pour Hashtable

1 import java.util.*;
2
3 public class HashtableExample{
4
5 static void disphtcontent(Hashtable<String,String> h){
6 Enumeration e = h.keys() ;
7 while( e.hasMoreElements() ) {
8 String k = (String) e.nextElement();
9 System.out.println("Clé : "+ k + " Valeur : " + h.get(k));
10 }
11 }
12 public static void main(String argv[]) {
13 Hashtable<String,String> ht = new Hashtable<String,String>();
14 Date today = new Date();
15 ht.put("today", today.toString());
16 ht.put("1k", "1024");
17 disphtcontent(ht);
18 }
19 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 37/40


2 API Java : java.lang.object et collections 2.4 java.util.*

2.4.3 Classe Vector<E>

¥ Gestion d’une collection d’éléments de la classe E dans un tableau dynamique


¥ Insertion (à la fin avec addElement() ou à une position donnée avec
insertElementAt())
¥ Suppression du premier élément égal au paramètre removeElement(E ) ou à une
position donnée avec removeElementAt(int))
¥ Recherche de l’index d’un objet si il est dans le vecteur avec indexOf()

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 38/40


2 API Java : java.lang.object et collections 2.4 java.util.*

2.4.4 Exemple de classe avec Vector

1 import java.util.Vector;
2
3 public class VectorExampleBis{
4 public static void main(String argv[]) {
5 Vector v = new Vector<String>();
6 String un = "un", deux = "deux", trois = "trois";
7 v.addElement(un);
8 v.addElement(trois);
9 v.insertElementAt(deux, 2);
10 String s = (String) v.firstElement();
11 for (int i=0; i<v.size(); i++) {
12 System.out.println(v.elementAt(i));
13 }
14 if (v.contains(un)) v.removeElement(un);
15 v.removeElement(deux);
16 v.removeElementAt(0);
17 }
18 }

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 39/40


2 API Java : java.lang.object et collections 2.4 java.util.*

2.4.5 Classe Enumeration

¥ Il s’agit d’une classe interface qui permet de fournir une technique pour parcourir
les éléments extraits d’une collection.
¥ Hashtable posséde deux méthodes keys et elements qui retourne des
Enumeration.
¥ Une Enumeration propose le parcours séquentiel de tous les éléments d’une
collection avec nextElement() et un test d’arrêt avec hasMoreElements()
¥ Voir aussi l’exemple précédent de la classe HashtableExample

TELECOM SudParis — Christian Bac — Novembre 2009 — CSC 4002 40/40