Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
Classecontenantleprogrammeprincipal
1. crire/complterunprogrammedetestcrantune(instancedelaclasse)voitureTwingo,achetecette
anne10000,immatricule1234AZ49,avecunautoradioetncessitantunpermisB.Puisafficherla
chanedecaractresreprsentantlavoiture.Lersultatestilceluiescompt?
1
LesclassesDateetCalendarexistentenJava,maislebutduTPn'estpasdelesutiliser.Nousreprsenteronsunedatesimplementpar
unentierreprsentantsonanne.
3. AfficherlecotdelocationdelaTwingoprcdemmentcre,ainsiqueceluiducamiondetypeJ9.
4. CrerunautocardetypeFRI,achet90000en2005,immatricul4567WX01,ncessitantunpermis
D,permettantdetransporter53passagersetdisposantd'unesoutebagagesde3m.Affichezsicet
autocarpeuttransporter40passagersayantchacun0,1mdebagages.
5. Lesclassesdel'applicationsontappelestrecompltesetutilisesparplusieursprogrammeurs.
Quellesolutionproposezvous,encequiconcerneleschamps(attributsetmthodes),pourassurercette
gestion?Implmentezl.
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.
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.
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