Vous êtes sur la page 1sur 5

TPProgrammationOrienteObjets

ProgrammationOrienteObjet
TPno3:
LicencementionISIL,semestre4

Exercice1:Membresstatiquesdeclasse

Attributsetmthodesdeclasse
Une classe est un type et chaque objet de la classe dtient sa propre copie des donnes
membres. Il peut tre intressant que des objets d'une mme classe partagent certaines
donnes.Onpeututilisercettefindesvariablesglobales:cesontlesattributsdeclasse.On
utilise le mot cl static pour dclarer un attribut de classe.
On utilise des mthodes statiques, appeles directement sur la classe, pour modifier les
attributsstatiques.

RevenonssurlaclassePointprcdemmentdclare.

public class Point


{
private int x, y;
public Point()
{
this.x = -1;
this.y = -1;
}

public Point(int x, int y)


{
this.x = x;
this.y = y;
}

public double DistanceTo(Point other)


{
int xDiff = this.x - other.x;
int yDiff = this.y - other.y;
return Math.Sqrt(xDiff * xDiff + yDiff * yDiff);
}
}

On dsire compterle nombre d'instances de classe (le nombre d'objets de cette classe). Pour
cela, on va dclarer un attribut de classe objectCount qui sera incrment la cration
d'unobjetPoint.Cetattributdeclassedoitpouvoirtrercuprdepuisl'extrieurmaisilne
faut surtout pas qu'on puisse le modifier : on le dclare donc en private et on dfinit une
1

TPProgrammationOrienteObjets

mthoded'accsgetObjectCount()quirenvoielavaleurducompteur.Cettemthodene
doitpastredtenuparchaqueinstancedelaclassePoint,c'estunemthodepartagepar
touslesobjetsdelaclassePoint:c'estunemthodedeclasse,dclareelleaussiaveclemot
clstatic.

1. ModifiezlaclassePointenyajoutantlattributetlamthodedeclasse
2. TestezlanouvelleclassePointenutilisantleprogrammedetestsuivant:

class Program
{
static void Main(string[] args)
{
Point origin = new Point();
Point bottomRight = new Point(1024, 1280);
double distance = origin.DistanceTo(bottomRight);
Console.WriteLine("Distance is :{0}", distance);
Console.WriteLine("No of Point objects :{0}",
Point.ObjectCount());
Console.ReadKey();
}
}

Exercice2:Gestiondesexceptions

Vos programmes doivent toujours tre capable de traiter les erreurs et ceci afin d'en
permettre une utilisation plus confortable. C# offre des possibilits sophistiques pour
traiterdiffrentstypesdeproblmes:ils'agitdumcanismedegestiondesexceptions.

Dans un programme sans gestion des exceptions, certaines actions imprvues peuvent
compromettre la fiabilit de notre programme. En effet une simple tentative de division
parzro,lcrituresurunfichierenlectureseuleouinexistantpeutfairetoutplanter.

Captured'exceptions

Pourcapturerdesexceptions,ilfaututiliserlesblocstry,catchetfinallydansun
ordrebienprcis:

try { //Code d'excution normal }


catch { //Gestion des erreurs }
finally { //Nettoyage }

Lebloctrycontientlecodequieffectuelesoprationsnormalesduprogramme,
maisquirisquederencontrerdeserreursplusoumoinsinattendues.

TPProgrammationOrienteObjets

Lebloccatchcontientlecodedetraitementdeserreurs,erreursquisont
apparueslorsdel'excutionduprogramme.
Leblocfinallycontientlecodequinettoielesressourcesouquevousvoulez
imprativementexcuteraprslebloc tryoucatch.Ceblocestexcutqu'une
exceptionssoitleveoupas!

1. Prenonsunexempledeprogrammesansgestiondexception,danslequelondemande
lutilisateurdentrersongepourensuitelafficherlaconsole:

static void Main(string[] args) {


int age = 0;
Console.WriteLine("Quel ge avez-vous?");
age = int.Parse(Console.ReadLine());
Console.WriteLine("Vous avez " + age + " ans !");
Console.ReadLine();
}

Dansceprogrammeaucuneexceptionnattablie.Celaveutdoncdirequaucune
erreurnestpriseencharge.

Silutilisateurentreunnombreentier,leprogrammeneposeaucunproblmeettoutse
passecommeprvu.

Quesepassetilsilutilisateurentreunechainedecaractres?

Afindegrerlexception,utilisezlesmotsclstry,catch et finally.

Placezlecoderisquedanslebloctry.Lecodeplacdansceblocvasexcuter
tantquaucuneerreurnevientperturberledroulementduprogramme.
Le bloc catch va permettre de faire faire au programme une action, par
exempleunmessagederreur,quivaindiquerlinterlocuteurlanaturedeson
erreur.Lecatchsuitobligatoirementuntry.
Le bloc finally contient du code qui sera toujours excut, quil y est une
exception leve ou non. Ce bloc est facultatif.

2. Divisiondenombrespositifs:

Soitleprogrammesuivant:

static void Main(string[] args)


{
Console.WriteLine("Nous allons faire une division avec des nombres
positifs :");
3

TPProgrammationOrienteObjets

Console.Write("\nEntrez un premier nombre : ");


uint a = uint.Parse(Console.ReadLine());
Console.Write("Entrez un deuxieme nombre : ");
uint b = uint.Parse(Console.ReadLine());
uint c = a / b;
Console.WriteLine("Le rsultat de la division est " + c);
Console.ReadLine();

Ceprogrammeneseproccupepasdescasd'erreurspouvantseproduire.Essayez
successivementenexcutantleprogramme:

1. demettreunparamtrenonentier(unechainedecaractresparexemple)
2. demettreunparamtreentierngatif
3. demettreb=0

Vousdevezmodifierleprogrammepourque,danschacundecescas,l'erreursoit
attrapeparleprogrammeetsignalel'utilisateur(Vousallezdfinirtroisblocs
catchgrantlestroisexceptions).

Exercice3:Letypevaleuretletyperfrence

EnlangageC#,ilyadeuxgrandstypededonnes:lesdonnesdetypesvaleuretlesdonnes
detyperfrence.

Type valeur Type rfrence


TouslestypesNumriques Les String
Lescaractres Les tableaux
Lesboolens Les classes
Lesstructures Les dlgus
Lesnumrations

Passagedeparamtres:parvaleuretparrfrence
Ilexistedeuxmoyensdepasserdesparamtresunemthode:parvaleuretparrfrence.
1. Parvaleur
Lorsquelonpassedesparamtresparvaleur,lavariableauratoujourssavaleurinitiale,
ilestimpossibledelachangerlaracine.C'estdirequemmesionchangecette
valeurlintrieurdunemthode,onnemodifierapaslavaleurattribuelorsde
linitialisationduparamtre,maisseulementunecopiedecettevaleur.


4

TPProgrammationOrienteObjets

Exemple:
//Notre mthode
static int methode(int x) {
x = 7;
return x;
}
//La mthode principale "Main"
static void Main() {
int a = 2;
Console.WriteLine("Avant le passage de la mthode a = " + a);
Console.WriteLine("Au passage de la mthode\ta = " + methode(a));
Console.WriteLine("Aprs le passage de la mthode a = " + a);
Console.ReadLine();
}
}

Laconsolenousrenvoielaffichagesuivant:
Avant le passage de la mthode a = 2
Au passage de la mthode a = 7
Aprs le passage de la mthode a = 2
2. Parrfrence
Contrairementautypevaleur,lesparamtrespasssenrfrencesontpasssgrce
leuradressemmoirecequipermetauxmthodesdemodifierdirectementlavaleur
lasource.Pourpasserunparamtrepasrfrence,ilsuffitdajouterlemotcl ref
devantleparamtre,danslafonctionetdanslappel.Nousallonsreprendre
exactementlexempleprcdent,maiscettefoisciavecunpassageparrfrencepour
permettrenotremthodedemodifierlavaleurdea.
Exemple:
//Notre mthode
static int methode(ref int x) {
x = 7;
return x;
}
//La mthode principale "Main"
static void Main() {
int a = 2;
Console.WriteLine("Avant le passage de la mthode a = " + a);
Console.WriteLine("Au passage de la mthode\ta = " + methode(ref a));
Console.WriteLine("Aprs le passage de la mthode a = " + a);
Console.ReadLine();
}
}

Laconsolenousrenvoielaffichagesuivant:
Avant le passage de la mthode a = 2
Au passage de la mthode a = 7
Aprs le passage de la mthode a = 7

Fairelesexercices8.1et8.2LespracticesducoursVisualC#2.0)
5

Vous aimerez peut-être aussi