Vous êtes sur la page 1sur 3

UniversitdessciencesetdelatechnologieHouariBoumediene(USTHB)

ProgrammationOrienteObjet

LicenceInformatique
Anne20082009

TD n2
Hritage et polymorphisme
Exercice 1
Indiquer ce qui est affich lors de l'excution du programme suivant :
public class ClassBase
{
public int a;
protected int b;
private int c;
public ClassBase() {
Console.WriteLine("A");
}
public virtual void doIt() {
Console.WriteLine("B"); // (1)
}
}
public class Tester
{
public int t;
public static void Main()
{
ClassBase x = new ClassBase();
ClassDerived y = new
ClassDerived(); // (2)
x.doIt(); y.doIt(); y.doIt(3);
}
}

public class ClassDerived:


ClassBase {
public int d;
private int e;
public ClassDerived() : base(){
Console.WriteLine("C");
}
public override void doIt(){
Console.WriteLine("D"); // (3)
base.doIt();
}
public void doIt(int i) {
Console.WriteLine("E");
d = 3;
doIt();
Console.ReadKey();
}
}

Pour le programme de l'ex. 1, ajouter un constructeur 3 paramtres pour la classe ClassBase, et un


constructeur 5 paramtres pour la classe ClassDerived, dans le but d'initialiser chaque attribut.
Indiquer s'il serait correct d'ajouter les instructions suivantes juste aprs la ligne indique pour le
programme de l'exercice 1 (voir n de ligne en commentaire).
Ligne

Instruction

Ligne

Instruction

Ligne

Instruction

(1)

this.doIt(3);

ok

(2)

x=y;

ok

(3)

b++;

(1)

doIt(3);

(2)

y=x;

(3)

c++;

(1)

ClassDerived.doIt(3);

(2)

x.doIt(2);

(3)

x.a++;

(1)

d++;

(2)

x.d++;

(3)

d++;

(2)

x.a++;

(2)

(3)

e++;

(2)

x.b++;

(2)

x=y;
x.doIt(2);
t++;

(3)

t++;

(2)

x.c++;

(3)

a++;

(3)

this.e++;

ok

Exercice 2
1. crire la classe Test possdant:
3 variables de type entier :
o La variable i1 accessible par toutes les autres classes et valant 10.
o La variable i2 accessible que par la classe Test elle-mme et valant 20
o La variable i3 ne pouvant tre accde que par les classes filles et valant 30.
1

UniversitdessciencesetdelatechnologieHouariBoumediene(USTHB)
ProgrammationOrienteObjet

LicenceInformatique
Anne20082009

3 mthodes :
o La mthode m1() statique et utilisable par toutes les classes. Cette mthode affiche i1
sur la sortie standard.
o La mthode m2() qui n'est utilisable que dans Test et qui ajoute 10 i2
o La mthode m3() qui est abstraite et renvoie void.

1 proprit :
o La proprit I2 permet daccder et de modifier la valeur de la variable prive i2.

Compilez puis corrigez le message que vous devez obtenir, l'expliquer.


2. crire la classe TestFille, drive de la classe Test.
Cette classe ne doit pas pouvoir tre drive. Comment procder?
Implmenter m3() qui tait une mthode abstraite et qui doit afficher i3 sur la sortie
standard.
Tenter de surcharger m1(). Que se passe-t-il? Pourquoi?
crire une mthode m4() qui ajoute 10 la variable i2 de Test. Pourquoi y a-t-il une
erreur de compilation? Essayer avec i3. Est-ce mieux? pourquoi?
Ajouter une mthode Main() dans la classe TestFille qui affiche l'cran les variables i1, i2 (avec la
proprit I2() ) et i3
Exercice 3
Examinons le programme suivant :
public class Figure{
double x, y;
public Figure(){
x = 0; y = 0;
}
public Figure(double x, double y){
this.x = x; this.y = y;
}
ublic override String ToString(){
return "Position : (" + x + "," +
y + ")";
}
}

public class TestFigure {


public static void Main() {
Cercle c1,c2 ;
c1 = new Cercle(1,1,3) ;
c2 = new Cercle() ;

public class Cercle : Figure {


const double PI = 3.141592564 ;
private double rayon ;
public Cercle() {
rayon = 0 ;
}
public Cercle(double x, double y, double r)
:base(x, y) {
rayon = r ;
}
public override String ToString ()
{
return base. ToString () + " Rayon : "
+ rayon;
}
}

Console.WriteLine(c1. ToString () +
"\n" + c2. ToString ());
Console.ReadKey();
}
}

1. De quelles variables dinstance de Figure hrite la classe Cercle ?


2. La variable rayon tant dclare private, on ne peut pas la modifier de lextrieur de la
classe. Ajoutez une proprit Rayon pour pouvoir fixer et lire la variable rayon.
3. Ajoutez une variable surface la classe Cercle. Modifiez la mthode ToString en
consquence. Ajoutez les mthodes getSurface daccs ce champ. On notera que le fait
2

UniversitdessciencesetdelatechnologieHouariBoumediene(USTHB)
ProgrammationOrienteObjet

LicenceInformatique
Anne20082009

de protger les variables par private et de restreindre leur accs lutilisation de mthode
permet de maintenir la cohrence dun tat.
4. crivez une mthode c1.estPlusGrand(Cercle c2) renvoyant true si le cercle c1
est plus grand que c2. Comment crire une mthode ayant un comportement similaire, mais
prenant les deux cercles en argument ?
5. tendez la classe Cercle avec une classe Cylindre ajoutant une variable h pour la hauteur
et une mthode volume. On ajoutera les constructeurs adquats et on surchargera
ToString en consquence.
6. tendez la classe Cercle avec une classe CercleDeCouleur. La classe Cylindre
hrite-t-elle de lattribut de coloration ?
Exercice 4
Pour chacune des classes demandes, vous crirez une mthode ToString()renvoyant les
caractristiques de lobjet sous forme de chane.
1. crivez une classe Vehicule contenant un champ :
private int nbPassager;
dans laquelle vous dfinirez un constructeur Vehicule(int n) initialisant le nombre de
passagers du vhicule, et une mthode ToString retournant une chane de caractres
indiquant le nombre de passager dun vhicule.
2. crivez maintenant une classe Avion tendant la classe Vhicule contenant un champ :
private int nbMoteur;
en utilisant les mthodes this et base, crivez un constructeur Avion(int nbP) puis
Avion(int nbP, nbM) initialisant le nombre nbP de passagers de lAvion et le nombre
nbM de moteurs.
Substituer la mthode ToString
Chaque objet en C# hrite de la mthode ToString, qui retourne une reprsentation de chane de cet
objet. Par exemple, toutes les variables de type int ont une mthode ToString, qui leur permet de
retourner leur contenu sous la forme d'une chane :
int x = 42;
string strx = x.ToString();
System.Console.WriteLine(strx);

Lorsque vous crez une classe ou une structure personnalise, vous devez substituer la mthode
ToString afin de fournir des informations sur votre type.
Pour substituer la mthode ToString dans votre classe ou structure :
1. Dclarez une mthode ToString avec les modificateurs et le type de retour suivants :
public override string ToString(){}

2. Implmentez la mthode de telle sorte qu'elle retourne une chane.


Exemple :
class Person{
string name; int age;
public override string ToString(){
string s = age.ToString();
return "Person: " + name + " " + s;
}
}