• Aucun résultat trouvé

Licence Informatique 2ème année Programmation Objet I

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 2ème année Programmation Objet I"

Copied!
2
0
0

Texte intégral

(1)

Licence Informatique 2ème année

Programmation Objet I

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

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

Références

Documents relatifs

Toutes les personnes qu'on veut afficher, en plus d'être des Displayable doivent avoir une direction et une vitesse. De plus, les personnes s'affichent sous forme d'un rond complété

Par exemple, pour trouver un entier dans un arbre, on devra faire un parcours exhaustif dans le cas d'un arbre général, alors qu'un parcours dichotomique suffira pour un arbre

On peut par exemple considérer que la vitesse d'un bateau est celle du courant local, plus un pourcentage de celle du vent selon l'angle entre le cap du bateau et la direction du

Chaque mois, les citoyens ayant un revenu mensuel supérieur à 850 euros payent à l'état un impôt sur le revenu égal à 14% de leurs revenus.. En plus, tous les citoyens payent à

Chaque partie peut être une chaine de caractères, mais aussi une histoire en elle-même : les 1001 Nuits racontent l'histoire de Shéhérazade, qui elle-même raconte des histoires

En outre, les acronymes doivent avoir une méthode String getSigle() qui renvoie la chaine de caractères constituée par les premières lettres de chacun des mots (NB : la méthode

Ces cotisant ont aussi une méthode qui calcule leur pension de retraite, égale à 75% du salaire moyen (somme des salaires / mois), plus le montant du compte pénibilité, moins 10%

Le code proposé doit comporter une classe Chiffres qui représente la numérotation avec uniquement des chiffres arabes (du genre 1.2.2) et implémente toutes les méthodes de