Académique Documents
Professionnel Documents
Culture Documents
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.
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:
Lebloctrycontientlecodequieffectuelesoprationsnormalesduprogramme,
maisquirisquederencontrerdeserreursplusoumoinsinattendues.
TPProgrammationOrienteObjets
Lebloccatchcontientlecodedetraitementdeserreurs,erreursquisont
apparueslorsdel'excutionduprogramme.
Leblocfinallycontientlecodequinettoielesressourcesouquevousvoulez
imprativementexcuteraprslebloc tryoucatch.Ceblocestexcutqu'une
exceptionssoitleveoupas!
1. Prenonsunexempledeprogrammesansgestiondexception,danslequelondemande
lutilisateurdentrersongepourensuitelafficherlaconsole:
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:
TPProgrammationOrienteObjets
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.
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