8.    Réutilisation des classes - Composition

Réutilisation des classes - on utilise des classes construites et testées par quelqu'un d'autre sans modifier le code existant.
Deux approches pour réaliser la réutilisation - Composition et Heritage
Composition - on crée des objets des classes existantes à l'intérieur de la nouvelle classe. On peut aussi créer des nouvelles classes à l'intérieur de la classe.

8.1    Les objets membres


public class Point {
    private double x, y ;
    public Point(double x, double y){
        System.out.println("Constructing a point");
        this.x = x ;
        this.y = y ;
    }   
    public String  toString(){
        return "Point: (" + x + "," + y+")" ;
    }
    public void move(double dx, double dy){
        System.out.println("Moving the point");
        x+=dx;
        y+=dy;
    }
}
public class Test {
    public static void main(String[] arg){
        Point p1 =new Point(5.4,3.6);
        System.out.println(""+p1);
        p1.move(1.1, 2.3);
        System.out.println(""+p1);
    }
}


public class Circle {
    private Point c;        // center
    private double r;            // radius 
    public Circle(double x, double y, double r){
        System.out.println("Constructing a circle");
        c = new Point(x,y);
        this.r =r;
    }
    public String toString(){
        return "Circle - center: "+c+" and radius:"+r;
    }   
    public void move(double dx, double dy){
        System.out.print("moving the circle  ");
        c.move(dx, dy);       
    }
}

public class TestCrcl {
    public static void main(String arg[]){
        Circle cr = new Circle(9.3,8.2,17.1);
        System.out.println(""+cr);
        cr.move(3.1, 4.0);
        System.out.println(""+cr);
    }
}

8.2    Les classes internes

class External {                    // définition d’une classe usuelle (dite alors externe)
    .....                         // méthodes et données de la classe External
    class Internal {            // définition d’une classe interne à la classe External
        .....                     // méthodes et données de la classe Internal
    }
    .....                         // autres méthodes et données de la classe External
}

class External {                   
    public void f() {                            // méthode de External
        Internal i = new Internal() ;         // création d’un objet de type Internal ; sa référence est
                                                // ici locale à la méthode f()    
    }                   
    class Internal {           
        .....                    
    }
    private Internal  i1, i2 ;                 // les champs i1 et i2 de External sont des références
                                                // à des objets de type Internal
    .....                                         // autres méthodes et données de la classe External
}