Encapsulation et organisation :
"modifieur" et package

import des packages

Source de Prog65.java
public class Prog65 
       extends java.applet.Applet {
  public void paint(java.awt.Graphics g) {
    g.drawLine(10, 30, 200, 30);
    g.drawRect(20, 40, 100, 50);
    g.drawOval(140, 40, 50, 50);
    g.drawString("texte", 10, 120);
  }
}

Source de Prog66.java
import java.awt.* ;
import java.applet.Applet;
public class Prog66 
       extends Applet {
  public void paint(Graphics g) {
    g.drawLine(10, 30, 200, 30);
    g.drawRect(20, 40, 100, 50);
    g.drawOval(140, 40, 50, 50);
    g.drawString("texte", 10, 120);
  }
}

CLASSPATH

création de package

Source de Cercle10.java
package geometrie;
public class Cercle10 {
  private double x, y, rayon;
  public Cercle10(double posX, double posY, double r) {
    x=posX; y=posY; rayon=r;   
  }
  public double surface() {
    return Math.PI*Math.pow(rayon, 2.);
  }
  public double perimetre() {
    return 2*rayon*Math.PI;
  }
}

Source de Rectangle10.java
package geometrie;
public class Rectangle10 {
  private double x, y, largeur, hauteur;
  public Rectangle10(double valX, double valY, 
              double valL, double valH) {
    x = valX; 
    y = valY; 
    largeur = valL;
    hauteur = valH;   
  }
  public double perimetre() {
    return 2*(largeur + hauteur);
  }
  public double surface() {
    return largeur * hauteur;
  }
}

Source de Prog68.java
import geometrie.Cercle10;
import geometrie.Rectangle10;

public class Prog68  {
  public static void main(String args[]) {
    Cercle10 cercle=new Cercle10(30,55,20);
    Rectangle10 rectangle=new Rectangle10(15,22,37,20);
    System.out.println ("surface totale = "
            +(cercle.surface()+rectangle.surface()));
  }
}

Structure d'un projet :

Plusieures techniques permettent d'encapsuler les données :

public

Source de Texte1.java
public class Texte1 {
  public String texte;
  public Texte1(String t) {
    texte=t;
  }
  public void afficher() { 
     System.out.print(texte);
  } 
}

Source de Texte11.java
public class Texte11 {
  public void toucher() {
    Texte1 t1 = new Texte1("coucou");
    t1.afficher();
    t1.texte="world";
  }
}

private

Source de Texte2.java
public class Texte2 {
  private String texte;
  public Texte2(String t) {
    texte=t;
  }
  public void modifier(String t) {
    texte=t;
  }
  public void afficher() { 
     System.out.print(texte);
  } 
}

Source de Texte21.java
public class Texte21
       extends Texte2 {
  public Texte21(String t) {
    super(t);
  }
  public void ajouter(String t) {
    texte = texte + t;
  }
}

protected

Source de Texte3.java
public class Texte3 {
  protected String texte;
  public Texte3(String t) {
    texte=t;
  }
  public void modifier(String t) {
    texte=t;
  }
  public void afficher() { 
     System.out.print(texte);
  } 
}

Source de Texte31.java
public class Texte31 
       extends Texte3 {
  public Texte31(String t) {
    super(t);
  }
  public void ajouter(String t) {
    texte= texte + t;
  }
}

acces dans un package

Source de Texte4.java
package autrePackage;
public class Texte4 {
  protected String texte;
  public Texte4(String t) {
    texte=t;
  }
  public void modifier(String t) {
    texte=t;
  }
  public void afficher() { 
     System.out.print(texte);
  } 
}

Source de Texte41.java
package autrePackage;
public class Texte41 {
  public void toucher() {
    Texte4 t4 = new Texte4("coucou");
    t4.modifier("hello");
    t4.texte="world";
  }
}

Source de Texte42.java
import autrePackage.Texte4;
public class Texte42 {
  public void toucher() {
    Texte4 t4 = new Texte4("coucou");
    t4.modifier("hello");
    t4.texte="world";
  }
}


les modificateurs d'acces

Voici un tableau qui résument les accès selon les modifiers.

modifier d'acces dans la classe dans une sous-
-classe
dans le même package ailleurs
private OK      
protected OK OK OK  
public OK OK OK OK
package OK   OK  

En détails sur les variables, méthodes et classes :

le modificateur final

exercices