Licence Informatique 2ème année
Programmation Objet ITD n°4 - Encapsulation
1- Encapsulation et évolutivité du code
On veut numériser le catalogue d'étoiles HR (Harvard Observatory). Pour cela, un programmeur a écrit les classes suivantes :
class Etoile {
String nom, type;
// x,y,z sont des coordonnées cartésiennes float x,y,z,magnitude;
float distanceTerre() {
return Math.root(x*x+y*y+z*z);
} }
class CatalogueHR {
static ArrayList<Etoile> liste = new ArrayList<Etoile>();
void addEtoile(String nom, String type, float x, float y, float z, float magnitude) { Etoile e = new Etoile();
e.nom = nom;
e.type = type;
e.x = x; e.y = y; e.z = z;
e.magnitude = magnitude;
liste.add(e);
} }
Mais les astronomes veulent pouvoir donner les positions des étoiles soit en coordonnées cartésiennes, soit en coordonnées sphériques. Modifier le code pour permettre cette évolution et pour faciliter les évolutions ultérieures (par exemple l'utilisation de coordonnées cylindriques).
Sphérique vers cartésien : Cartésien vers sphérique : x = ρ × sin(φ) × cos(θ) ρ =
√
x²+y²+z² y = ρ × sin(φ) × sin(θ) φ = arcos(z/ρ)z = ρ × cos(φ) θ = arctan(y/x)
2- Niveaux d'encapsulation
Relever les erreurs de compilation dans les classes suivantes : 00 package p1;
01
02 class A {
03 public int w = 0;
04 protected int x = 1;
05 private int m() { return 2; } 06 }
07
08 class B extends A { 09 void testB() {
10 A unA = new A();
11 p2.C unC = new C();
12 int x = unA.w + unA.x + unA.m() + w + x;
13 m();
14 }
15 }
01 package p2;
02 import p1;
03
04 class A { } 05
06 public class C extends B { 07 void testC() {
08 A unA = new A();
09 B unB = new B();
10 p1.A unAA = new p1.A();
11 int y = unAA.x + x + unB.x;
12 }
13 }
3- Mono-instanciation
Dans certains cas, on n'a besoin que d'une seule instance d'une classe donnée. C'est par exemple le cas d'une classe qui gère la connection des utilisateurs à une application, la configuration d'une application, ou qui gère un accès partagé à une ressource. Écrire une classe qui n'autorise qu'une seule instanciation.
NB : il s'agit d'un patron de conception appelé Singleton