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()