Vous êtes sur la page 1sur 5

Programmation oriente objet TP 1

L2 MPCIE Prise en main de lenvironnement Java

Exercice1
Nousdsironsdvelopperunprogrammepourlagestion(trssimplifie)d'unparcdevhiculesdestinsla
location.
Pourchaquevhicule,ilestdemandderenseignerle modle, l'anned'achat1,le prixd'achat (capablede
grerlescentimes),lenumrod'immatriculationetlepermis(unelettre)ncessairelaconduitedecevhicule.
Plusieurstypesdevhiculessontpossibleslalocation,certainsayantdescaractristiquesparticulires.Ainsi,
ilestdemanddereprsenterl'informationcommequoiunevoituredisposeounond'un autoradio.Pourla
locationd'uncamion,levolumedestockagepossibleducamiondoittreprcis.Enfin,desautocarspeuvent
aussi tre lous, et pour ces vhicules il est ncessaire de connatre leur volume(pas forcment entier) de
stockagepossiblesainsiquelenombredepassagersqu'ilspeuventtransporter.

Modlisation

1. Dessinerl'arbred'hritagedeclasses,ofigureralesnomsdesclasses,lesattributsetleurstypes,etles
liensd'hritage.
2. TraduireladfinitiondesclassesenJava.Prvoyezunconstructeurpertinentpourchaqueclasse.
3. Instancierdansunprogrammeprincipal(mthode main() d'uneclasse,laclasse Test parexemple)
chacunedecesclasses(voirladernirepartieduTPpourdesexemplesdevoitures,decamionset
d'autocars).

Codagedesmthodes
1. Dfinirunconstructeurquiinitialiselesdiffrentschampsdechacunedesclasses.
2. crire les mthodes ajouterAutoradio() et enleverAutoradio() qui permettent de fixer la
valeurdel'attributautoradiod'unevoiture.
3. crirelamthodeage()quiretournel'ged'unvhicule(ennombred'annes).L'anneactuellesera
criteendurdanslecode.
4. crirelamthode afficherVehicule() quiaffichesurlasortiestandard(enutilisantlamthode
System.out.println()) une chane de caractres caractrisant un vhicule. crire la mthode
afficherVoiture()quiafficheunechanedecaractrescaractrisantunevoiture.

5. crire une mthode peutTransporterVolume() qui, partir d'unvolume donn enparamtre,


retournevraioufauxselonquelecamionpeutounonpermettreletransportdecevolume.
6. crireunemthodecoutLocation()quicalculelecotquotidiendelocationd'unvhicule.Cecot
estcalculcommesuit:pourlesvhiculesdemoinsd'unan,lecotdelocationestleprixd'achatdu
vhicule/200,etpourlesvhiculesplusanciens,lecotdelocationestleprixd'achat/250.
7. crire une mthode peutTransporterPassagers() dans la classe adquate qui, partir d'un
nombredepassagersetd'unvolumemoyenparpassager(reprsentantlesbagages),retournevraiou
fauxselonquel'autocarpeutounontransportercespassagers.
8. crirelamthodeafficherCamion()quiafficheunechanedecaractrescaractrisantuncamion.
9. crirelamthodeafficherAutocar()quiafficheunechanedecaractrescaractrisantunautocar.

Classecontenantleprogrammeprincipal

1. crire/complterunprogrammedetestcrantune(instancedelaclasse)voitureTwingo,achetecette
anne10000,immatricule1234AZ49,avecunautoradioetncessitantunpermisB.Puisafficherla
chanedecaractresreprsentantlavoiture.Lersultatestilceluiescompt?

1
LesclassesDateetCalendarexistentenJava,maislebutduTPn'estpasdelesutiliser.Nousreprsenteronsunedatesimplementpar
unentierreprsentantsonanne.

L2MPCIEProgrammationorienteobjet TP1 1/5


2. CreruncamionJ9,achet20000ilya5ans,immatricul987BCD75,utilisableavecunpermisB,
etpouvanttransporter25m.Affichersurlasortiestandardlachanedecaractresreprsentant le
camion.Afficher sicecamionpeut transporter7m,onutiliserapourcelaunappel lamthode
peutTransporterVolume().

3. AfficherlecotdelocationdelaTwingoprcdemmentcre,ainsiqueceluiducamiondetypeJ9.
4. CrerunautocardetypeFRI,achet90000en2005,immatricul4567WX01,ncessitantunpermis
D,permettantdetransporter53passagersetdisposantd'unesoutebagagesde3m.Affichezsicet
autocarpeuttransporter40passagersayantchacun0,1mdebagages.
5. Lesclassesdel'applicationsontappelestrecompltesetutilisesparplusieursprogrammeurs.
Quellesolutionproposezvous,encequiconcerneleschamps(attributsetmthodes),pourassurercette
gestion?Implmentezl.

L2MPCIEProgrammationorienteobjet TP1 2/5


Annexes

Typesprimitifs
Unentiersenoteint,unentierlonglong,unrelfloatoudoubleetunboolensenotebooleanayant
pourvaleurtrueoufalse.UnechanedecaractresestreprsenteparuneinstancedelaclasseString...Il
nes'agitdoncpasd'untypeprimitif.

Commentaires
//ceciestuncommentairesuruneseuleligne
/*celaest
uncommentairesur
plusieurslignes*/

Classesetattributs
Uneclassesedfinitcommesuit:
classNomClasse{
//Attributs
TypeAttributnomAttribut;

//Mthodesdelaclasse

}

PourdfinirlhritageduneclasseparentCparuneclasseSC,ondfinitSCdelafaonsuivante:
classSCextendsC{
//dfinitiondelaclasse
}

Une classe dont le nom est NomClasse doit obligatoirement tre saisie dans un fichier de nom
NomClasse.java.PourcompileruntelfichiersourceJava,appelerlecompilateurdelafaonsuivante:
javacNomClasse.java

Unefoislacompilationexcute,silnyapasderreur(auquelcas,lescorriger),lecompilateuracrun
fichierNomClasse.classquicontientlaversioncompiledelaclasse.

Mthodes
Lesmthodessontdclaresetdfinieslintrieurdelaclasse.LasyntaxedeJavaesttrslargementinspire
decelleduC:
letypederetourdunemthodeestdclarjusteavantsonnom;
pourdfinirunemthodequineretournepasdersultat,letypederetourestvoid;
lesparamtressontsignalsparleurtypepuisleurnom,etsparsd'unevirgule;
laffectationsefaitpar =etletestdgalitpar==,lessyntaxesde if,switch,whileetforsont
identiques.
classExemple{
voidmethode1(){
System.out.println(essai);
}
intsomme(inta,intb){
returna+b;
}
booleanpositifP(inta){
if(a>0)
returntrue;
else
returnfalse;
}
}

Instanciation
Pourinstancieruneclasse,cestdirecrerunobjetdecetteclasse,ondoitdclarerunerfrencepuiscrer
linstanceenutilisantnewsuivid'unconstructeurdelaclasseinstancier.Notezqueladclarationetlacration
del'objetpeutsefairesuruneseuleligne.

L2MPCIEProgrammationorienteobjet TP1 3/5


NomClasseo; //dclaration2
o=newNomClasse(); //crationdel'objet
AutreClasseo2=newAutreClasse(...);

Ilestvidemmentpossibledutiliserunerfrencecommetypedunattributduneclasse,commetypedun
paramtredemthodeoucommetypederetourdunemthode.
classExemple{
AutreClasseobjetMemorise;
AutreClasseobtenirValeur(){
returnobjetMemorise;
}
voidfixerValeur(AutreClassei){
objetMemorise=i;
}
}

Rfrencenull
nullestunevaleurderfrenceparticulire(nontype,pouvantdonctreutiliseavectouttypederfrence)
qui ne repre aucun objet. Quand une rfrence est cre, elle est implicitement initialise null, sauf
indicationcontraire.Ilestvidemmentinterditdaccderdesattributsoudappelerdesmthodespartirdune
rfrencenull.Celagnreraunavertissementlacompilation.

Constructeursetappelduconstructeurdelasuperclasse
Lorsqu'ondfinituneclasse C,onpeutdfinirdesconstructeursavecousansparamtrespourinitialiserles
objetscrs.Toutconstructeurd'uneclasseautrequeceluidelaclasse Object(voirplusloin)faitappelsoit
unconstructeurdelasuperclasse,soitunconstructeurdelammeclasse.Cetappeldoittrelapremire
instructiondansladfinitionduconstructeur.Onutiliselasyntaxe super(arguments)(oargumentspeut
tre vide ou non) pour appeler un constructeur de la superclasse, et this(arguments) pour appeler un
constructeurdelammeclasse.Attention,cesintructionsdoiventtrelespremiresduconstructeur.
Siaucunconstructeurdelasuperclasseoudelammeclassenestappelexplicitement,lecompilateurgnre
implicitementunappelauconstructeurpardfaut super() quiestsansparamtre(ilfautqu'ilyaituntel
constructeurdanslasuperclassesinonuneerreurestdtecte).
classScextendsC{
publicSc(Strings){
//appelimpliciteauconstructeurC()
//initialisationpropreSc(gestiondesparexemple)
}
publicSc(inta,Strings){
super(a);//appelduconstructeurC(int)
//initialisationpropreSc(gestiondesparexemple)
}
}

Appeldelasupermthode
Quand une mthode est redfinie dans une sousclasse, il est souvent ncessaire dappeler la mthode
masque(mthodedemmesignaturedelasuperclasse).Cetappelpeuttrefaitnimporteodanslecodede
lemthodedelasousclasse.Lappelsefaitenutilisantlapseudovariable superqui,lamaniredethis,
reprelobjetsurlequellamthodeestentraindtreexcute,maisquiestdutypedelasuperclasse.Ainsi,
ellen'estpasncessairementlapremireinstructiondelamthode.
classScextendsC{
publicvoidmethode(inta){/*redfinitiondunemthode
dfiniedansC*/

super.methode(a);

}
}

LaclasseObject:racinedelarbredhritage
Siuneclasseestdclarecommenayantaucunesuperclasse,elleadmetimplicitement Objectcommesuper
classe.LaclasseObjectfaitpartiedupaquetagejava.lang,quicontientlesclassesetlesinterfaceslesplus
centralesdulangage.

2
Quand une rfrence est dclare, elle est (implicitement) initialise la valeurnull.

L2MPCIEProgrammationorienteobjet TP1 4/5


Getters/Setters
Afinderendrelesclassesplusrobustes,onpeutinterdirelamodificationlibrepourvrifierqueleschamps
correspondentbiencertainscritres.Pourcela,ondclareleschampsprivsgrcel'attribut privatequile
rendinaccessibleendehorsdelaclasse.Pourpouvoiraccderoumodifiersavaleur,onutilisedeuxmthodes
pourchacundeschamps:ungetterquipermetd'accdersavaleuretunsetterquipermetdemodifiersa
valeur.
classC{
privateintchamp1;
privateStringchamp2;

publicintgetChamp1(){
returnthis.champ1;
}

publicvoidsetChamp1(intchamp1){
this.champ1=champ1;
}
}

criredanslaconsole
Pourcriredanslaconsole,onutiliselesmthodesSystem.out.print()etSystem.out.println().Ces
mthodes sont identiques, si ce n'est que System.out.println() passe la ligne aprs l'crire dans la
console.Cesmthodesprennentn'importequeltypeenparamtre.
Pour crire des donnes de types diffrents lors du mme appel System.out.print() ou
System.out.println(), on construit une chane de caractres contenant toutes les donnes en les
concatnantavec+:
classC{

publicvoidafficher(){
System.out.println("champ1:"+champ1);
System.out.print("champ2:")
System.out.print(champ2);
System.out.println(); //passesimplementlaligne
}
}

Programmeprincipal
Pourcrireunprogrammedetest,ilestncessairedcrireunemthodeparticuliredansunenouvelleclasse
ouunedesclassesduprojet.Cettemthodedevraavoirlasignaturesuivante:
classNomClasse{
publicstaticvoidmain(String[]args){

}
}

Uneclassepossdantunetellemthodemainpeuttreexcute.Cestdirequilestpossibledelancer
lexcutiondecettemthodemainenappelantlamachinevirtuelleJavadelafaonsuivante(danslerpertoire
contenantlefichierNomClasse.classobtenuaprscompilation):
javaNomClasse

L2MPCIEProgrammationorienteobjet TP1 5/5