programme en langage objet - Serveur pédagogique UFR Sciences

publicité
PROGRAMME EN LANGAGE OBJET
Collection de classes qui « se répartissent » les opérations à effectuer
PROGRAMME EN LANGAGE OBJET
pour programmer en langage objet, il faut décrire une ou plusieurs
classes
un programme est un ensemble de descriptions de classes.
Il comprend (au moins) une classe principale :
classe « d’amorce » qui permet le lancement du programme
lorsque l’utilisateur exécute le programme, c’est une méthode de cette
classe qui est lancée
cette méthode crée des instances des autres classes du programme et
leur « passe la main » pour faire les calculs
! en java, c’est la méthode main :
public static void main(String[] args){…}
PROGRAMME EN JAVA
En java, les ensemble de classes regroupées en un package
Le source de chaque classe contient en première ligne le nom
du package (en minuscules) dans lequel elle s'inscrit
! package <nom package>
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package p;
class C1
{
Variables et méthodes
void m1(…)
{
C3 troisieme=new C3();
}
C1(…)
{
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Regroupement logique : chaque fichier référence le package
PROGRAMME EN JAVA
un fichier par classe
Son nom est celui de la classe avec l'extension .java
les fichiers des classes sont regroupées dans un dossier dont
le nom correspond à celui du package
! coursjava/programme/exemples pour
coursjava.programme.exemples
PROGRAMME EN JAVA
coursjava
programme
exemples
coursjava.programme.exemples
package p;
public class C1
{
package p;
void M1()
{
System.out.println("Lancement de M1");
C3 Troisième=new C3();
}
public C1()
{
System.out.println("Création d'une instance de C1");
M1();
}
public class C1
{
void M1()
{
System.out.println("Lancement de M1");
C3 Troisième=new C3();
}
public C1()
{
System.out.println("Création d'une instance de C1");
M1();
}
package p;
public class C1
{
void M1()
{
System.out.println("Lancement de M1");
C3 Troisième=new C3();
}
public C1()
{
System.out.println("Création d'une instance de C1");
M1();
}
}
}
ex1.java
ex2.java
}
ex3.java
package p;
package p;
public class C1
{
public class C1
{
void M1()
{
System.out.println("Lancement de M1");
C3 Troisième=new C3();
}
public C1()
{
System.out.println("Création d'une instance de C1");
M1();
}
void M1()
{
System.out.println("Lancement de M1");
C3 Troisième=new C3();
}
public C1()
{
System.out.println("Création d'une instance de C1");
M1();
}
}
}
ex4.java
ex6.java
Regroupement physique
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package p;
class C1
{
Variables et méthodes
void m1(…)
{
C3 troisieme=new C3();
}
C1(…)
{
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Lancement de classe principale via sa méthode main
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Création d’une instance de C1
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Lancement du constructeur de l’instance
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
premier
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Exécution de la méthode m1 invoquée dans le constructeur
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
troisieme
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class
C3
variables
et méthodes
C3(…){…}
{
}Variables et méthodes
C3(…){…}
}
Création d’une instance de C3
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
premier
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
troisieme
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class
C3
variables
et méthodes
C3(…){…}
{
}Variables et méthodes
C3(…){…}
}
Exécution du constructeur de l’instance créée
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
troisieme
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class
C3
variables
et méthodes
C3(…){…}
{
}Variables et méthodes
C3(…){…}
}
Création d’une instance de C1
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
troisieme
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class
C3
variables
et méthodes
C3(…){…}
{
}Variables et méthodes
C3(…){…}
}
Fin de l’exécution du constructeur
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
premier
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
troisieme
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class
C3
variables
et méthodes
C3(…){…}
{
}Variables et méthodes
C3(…){…}
}
Suppression de l’instance de C3 et fin de l’exécution de m1
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
premier
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Fin de l’exécution du constructeur de l’instance de C1
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
package p;
class C2
{
Variables et méthodes
C2(…){…}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Retour à la classe principale
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
deuxieme
package
p;
{
classVariables
C2
et méthodes
{
C2(…){…}
} Variables et méthodes
C2(…){…}
}
premier
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Exécution de la deuxième ligne de la méthode main
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
deuxieme
package
p;
{
classVariables
C2
et méthodes
{
C2(…){…}
} Variables et méthodes
C2(…){…}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Création d’une instance de C2
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
deuxieme
package
p;
{
classVariables
C2
et méthodes
{
C2(…){…}
} Variables et méthodes
C2(…){…}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Exécution du constructeur de l’instance
PROGRAMME EN JAVA
Package P
premier
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
deuxieme
package
p;
{
classVariables
C2
et méthodes
{
C2(…){…}
} Variables et méthodes
C2(…){…}
}
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Retour à la méthode main
PROGRAMME EN JAVA
Package P
package p;
class Main
{
Variables et méthodes
static void main(String[] args)
{
C1 premier=new C1(…);
C2 deuxieme=new C2(…);
}
}
deuxieme
package
p;
{
classVariables
C2
et méthodes
{
C2(…){…}
} Variables et méthodes
C2(…){…}
}
premier
package
p;
{
class C1 Variables et méthodes
{
void m1(…)
Variables et méthodes
{
void m1(…)
C3 troisieme=new C3();
{
} troisieme=new C3();
C3
C1(…)
}
C1(…) {
m1(…);
{
}
m1(…);
}
}
package p;
class C3
{
Variables et méthodes
C3(…){…}
}
Fin du programme. Les instances ne sont plus référencées
COMPOSITION/UTILISATION
D’OBJETS
Des objets peuvent être définis à partir d’autres objets
RÉFÉRENCEMENT (UTILISATION)
D’UN OBJET PAR UN AUTRE
Un attribut a d’un objet (instance) O1 de la classe C1 peut
contenir une valeur d’un type simple (en java, int, double,
char…) mais aussi référencer (déjà vu) un autre objet O2
de la classe C2
RÉFÉRENCEMENT (UTILISATION)
D’UN OBJET PAR UN AUTRE
Techniquement :
il contient l’adresse de cet autre objet, et pas l’objet lui-même
l’attribut a pour type le nom de la classe C2
Le type de a est dit : type objet… par opposition aux types
simples
COMPOSITION/UTILISATION
D’OBJETS
class Segment
{
Point extremite1,extremite2;
}
class Disque
{
Point centre;
double rayon;
}
type
objet
class Personne
{
String nom,prenom;
Date dateNaissance;
Adresse principale, secondaire;
boolean isSalarie;
int tailleCentimetres;
}
Exemples
RÉFÉRENCEMENT (UTILISATION)
D’UN OBJET PAR UN AUTRE
Conceptuellement :
O1 est défini par O2… entre autres
! pour connaître O1, il faut connaître O2
Cela peut vouloir dire que l’objet que représente O2 est un
composant (physiquement) de l’objet que représente O1
! Mais ça veut surtout dire que la description de la classe
C1 utilise la classe C2 :
Il y a un lien d’utilisation entre ces classes.
COMPOSITION/UTILISATION
D’OBJETS
Exemples :
un Livre est composé (physiquement) d’une suite de
Chapitres, qui sont composés de Paragraphes…
Un Disque est défini par son rayon et son Point central
Un Segment est défini par deux Points
PRINCIPE DE DÉLÉGATION
Chacun fait sa part du boulot mais pas plus
PRINCIPE DE DÉLÉGATION
Le principe de délégation est une bonne pratique
pour programmer correctement.
Il est analogue au principe de subsidiarité qui régit le
fonctionnement institutionnel de l’union européenne.
PRINCIPE DE DÉLÉGATION
1 - Un objet doit « travailler avant tout sur lui-même » :
! Chacun s’occupe de ses affaires
ses méthodes opèrent toujours sur les valeurs de ses
attributs…
! Il n’y a pas de paramètre pour eux parce qu’ils sont
directement accessibles
avec un éventuel un apport d’informations extérieure
! qui doit être fait via les paramètres des méthodes
PRINCIPE DE DÉLÉGATION
1 - Un objet doit « travailler avant tout sur lui-même » :
! Chacun s’occupe de ses affaires
ses méthodes opèrent toujours sur les valeurs de ses
attributs…
! Il n’y a pas de paramètre pour eux parce qu’ils sont
directement accessibles
! cas de la plupart des getXXX()…
sauf s’il faut chercher une information dans une collection,
un groupe.
Auquel cas, il faut préciser la localisation de
l’information dans le groupe. Ex : getXXX(int i)
PRINCIPE DE DÉLÉGATION
1 - Un objet doit « travailler avant tout sur lui-même » :
! Chacun s’occupe de ses affaires
ses méthodes opèrent toujours sur les valeurs de ses
attributs…
avec un éventuel un apport d’informations extérieure
! exemple du setXXX(<informaAonapportée>)
PRINCIPE DE DÉLÉGATION
II - Un objet composite (composé d’autres objets) ne doit pas se
substituer à ses composants si ceux-ci peuvent « faire le travail » tout
seuls
! L’union européenne ne doit pas se substituer à l’un des pays qui la
constitue pour traiter de ce qui le concerne seul
Si un composant a assez d’informations pour traiter un problème à son
niveau, il ne faut pas le traiter à un niveau plus global (celui du composite)
l’objet composite gère ce qui nécessite l’interaction entre composants
(les niveaux inférieurs) pour être traité ou ce qui concerne son seul
niveau
! il peut faire appel à ses composants pour traiter des sous problèmes
et faire la synthèse des solutions
PRINCIPE DE DÉLÉGATION
Exemples :
nombre de mots d’un livre =
somme des nombres de mots des chapitres du livre
! le livre n’accède pas aux contenus des chapitres pour compiler leur
nombre de mots ;
! il demande à chaque chapitre de calculer lui-même son nombre de mots
et somme les résultats.
nombre de mots d’un chapitre =
nombre de mots des paragraphes du chapitre
! qui est demandé à ces paragraphes de la même manière que pour le livre
nombre de mots d’un paragraphe =
! C’est le nombre de mots de la chaîne de caractères qui représente le
contenu textuel du paragraphe
PRINCIPE DE DÉLÉGATION
Exemples :
Pour calculer son périmètre,
Un triangle ne fait pas le calcul de la distance entre ses
sommets pris deux à deux, puis la somme de ces distances
Il demande à ses segments leur longueur et fait la somme de
ces longueurs
Téléchargement