4.1	Les classes
- 
Une classe représente une définition abstraite des "propriétés" et "capacités" d'un objet
- 
classe = structure d'information + méthodes de traitement d'information.
- 
Un programme Java est définie par un ensemble de classes
- 
Une fois définie une classe, on peut (et doit) créer des objets concrets.
- 
Lorsque le programme est exécuté, des objets seront crées et des méthodes seront exécutés.
- 
Des objets peuvent communiquer entre eux par le biais de méthodes "publiques"
Syntaxe de class
[Modificateur] class
NomDeClasse [extends SuperClasse] [implements Interface1[, Interface2]]
  {
    CorpsDeClasse
   }
... détails à suivre plus tard
Exemples simples:
public class Hello {....... }
public void paint (Graphics g) { .... }
A.	Les constructeurs
- 
Ce sont des méthodes spéciales destinées à instantier les classes;
- 
ils portent le même nom que la classe !
- 
ils ne retournent aucun type (pas même void);
 
 
Exemple 4-2: Les arbres
 
C.	Un programme qui implémente nos arbres
//http://tecfa.unige.ch/guides/java/staf2x/ex/basics/Trees.java
class Trees {
    static int totalEnquiries;
    int noOfEnquiries;
    public Trees () {
    }
    public Trees (int n) {
		noOfEnquiries = n;
    }
    public static void main (String [ ] args) {
    // on crée 3 arbres
		Trees acacia = new Trees ();
		Trees willow = new Trees ();
		Trees palm = new Trees (10);
		palm.enquiry();
		System.out.println 
	    ("Number of enquiries for palm trees = " + palm.noOfEnquiries +
	     "\nNumber of total enquiries = " + totalEnquiries );
    }
    void enquiry () {
	   noOfEnquiries++;
	   totalEnquiries++;
    }
}
 
D.	Les constructeurs (again)
- 
On définit deux constructeurs:
- 
un qui crée un simple objet de classe Trees
- 
un qui permet en plus de donner une valeur à la variable noOfEnquiries
    public Trees () {   }
    public Trees (int n) {
	noOfEnquiries = n;
    }
 
E.	Simple Output
- 
System.out.println imprime un string
- 
Notez que l'on peut concatener strings et nombres pour créer un seul string:
	System.out.println 
	    ("Number of enquiries for palm trees = " +
	     palm.noOfEnquiries +
	     "\nNumber of total enquiries = " +
	     totalEnquiries
	     );
 
F.	Une méthode très simple
   void enquiry () {
	   noOfEnquiries++;
	   totalEnquiries++;
    }
- 
enquiry incrémente des compteurs à chaque fois que l'on apelle
	palm.enquiry();
- 
appelle (invoque) cette méthode sur l'objet palm qui a été crée
- 
une méthode est toujours attachée à un objet ou une classe.
 
 
4.2	Les définitions de méthodes
- 
Détails, exemples, explications etc. voir plus tard !
Syntaxe d'une méthode
[Modificateurs] TypeRetourné NomDeMéthode(ListeDeParamètres)
    { CorpsDeLaMéthode }
Les méthodes ont toujours un "TypeRetourné"
- 
Le 
TypeRetourné
 indique le type que la méthode "retourne" quand on l'invoque.
- 
 sauf s'il s'agit de constructeurs. Dans ce cas seulement, aucun type n'est spécifié (pas même void). 
- 
La 
liste des paramètres
 s'exprime comme en langage C.
 (Type nom_de_variables, Type nom_de_variables, ....)
- 
Exemple de 
modificateurs
:
- 
public:
 La méthode peut être utilisée par d'autres méthodes en dehors de la même classe
- 
private:
 Le contraire (en plus ce sont de méthodes "final")
- 
abstract:
 Méthodes d'interfaces sans code, mais que des sous-classes doivent implémenter (à voir plus tard)
- 
static:
 Méthode qui s'applique uniquement à la classe et aux variables de classe (pas aux instances, à voir plus tard)
- 
protected et final:
 voir plus tard ....
A.	Exemples:
- 
Une méthode publique typique qui ne retourne rien:
public void paint (Graphics g) { ..... }
- 
Une méthode publique qui retourne une valeur booléenne:
public boolean action(Event event, Object what) { ...}
- 
Une méthode statique typique:
public static void main (String [ ] args) {... }
- 
Une méthode publique pour initialiser un applet
public class MyEAIapplet extends Applet { ..}
       public void init() {
 
B.	Le langage JAVA est un langage polymorphique:
- 
Il est possible de faire de la surcharge de nom de méthodes : 
- 
utiliser un nom de méthode qui existe déjà pour une méthode de la même classe ou d'une superclasse. 
- 
Il existe deux types de surcharge:
- 
Surcharge "verticale" : déclarer une méthode de même spécification qu'une méthode héritée, mais en faire une spécification différente.
- 
Surcharge "horizontale" : déclarer une méthode qui a le même nom qu'une autre méthode, mais pas la même liste de paramètres.
 (voir: D. "Les constructeurs (again)" [15])
 
 
Exemple 4-3: HelloWorld interactif
http://tecfa.unige.ch/guides/java/staf2x/ex/basics/Greetings.java
import java.io.*;
class Greetings {
  /* A simple greetings program    by J M Bishop  Oct 1996
   * --------------------------    Java 1.1  Dec 1997 */
  public static void main (String [] args) throws IOException {
    BufferedReader in = new BufferedReader
          (new InputStreamReader(System.in));
    System.out.println("What is your name?");
    String name = in.readLine();
    System.out.println("Bonjour " + name);
  }
}
- 
Ignorez comment fonctionne le input pour le moment
Mémorisez la méthode pour lire une ligne:
   // 1. Définir un input buffer
   BufferedReader in = new BufferedReader
          (new InputStreamReader(System.in));
   // 2. Utiliser:
   String xxxx = in.readLine()