012345678901234567890123Universite Paul Cezanne - Licence de math-info 2e anneeI4 : Programmation objet - Notes de coursCe module est axe sur la programmation objet. Chaque notion de programmation objet sera introduiteen la justi ant par des motifs relatifs au genie logiciel et sera illustree en Java. La programmation objetrepond a des principes de genie logiciel, qui traite des methodologies a adopter lorsqu’on elabore un logiciel.Le langage Java est etudie dans le seul but d’illustrer la programmation objet mais l’apprentissage completde ce langage ne constitue pas l’objectif du cours.1 Notion d’objetJusqu’ a present, vous avez programme de maniere imperative en utilisant des langages proceduraux (C,Pascal, etc). Cette maniere de programmer est celle qui repose sur ce qui se deroule concretement lors-qu’un programme est execute en langage machine par le processeur : une suite d’instructions est executee ensequence et modi e de proche en proche l’etat global de la memoire. La memoire est une liste d’octets et uneinstruction va modi er un octet (ou un petit nombre xe d’octets) de la memoire. Les langages imperatifsdits evolues s’abstraient quelque peu de ce schema en de nissant les notions de structure de donnees (quiregroupe des octets) et de procedure ou fonction (qui regroupe des instructions) mais gardent cette ideefondamentale de sequence d’instructions modi ant un etat global. Dans les langages imperatifs ...
Cemoduleestaxe´surla programmation objet . Chaque notion de programmation objet sera introduite en la justifiant par des motifs relatifs au ge´nielogiciel etseraillustr´eeen Java . La programmation objet repond`adesprincipesdege´nielogiciel,quitraitedesme´thodologiesa`adopterlorsqu’one´laboreunlogiciel. ´ Le langage Java est´etudie´dansleseulbutd’illustrerlaprogrammationobjetmaisl’apprentissagecomplet de ce langage ne constitue pas l’objectif du cours.
1 Notion d’objet Jusqu’apresent,vousavezprogramme´demani`ere imp´erative en utilisant des langages proc´eduraux (C, ` ´ Pascal,etc).Cettemanie`redeprogrammerestcellequireposesurcequised´erouleconcre´tementlors-qu’unprogrammeestexe´cuteenlangagemachineparleprocesseur:unesuited’instructionsestex´ecute´een ´ sequenceetmodifiedeprocheenprochel’´etatglobaldelam´emoire.Lam´emoireestunelisted’octetsetune ´ instructionvamodifierunoctet(ouunpetitnombrefixed’octets)delame´moire.Leslangagesimpe´ratifs dits´evolu´ess’abstraientquelquepeudecesch´emaende´finissantlesnotionsde structurededonne´es (qui regroupe des octets) et de proc´edure ou fonction (quiregroupedesinstructions)maisgardentcetteid´ee fondamentaledes´equenced’instructionsmodifiantun´etatglobal.Dansleslangagesimpe´ratifsquevous connaissez,lesd´eclarationsdesstructuresdedonn´eesetlesde´clarationsdefonctionsrestentformellement separ´eesdansleprogrammememequanddesstructuresdedonn´eessontassocie´esa`desgroupesdefonc-´ ˆ tionsquilesmodifient.Ex:lesfonctionsd’ope´rationsurleslisteschaˆın´eesquivontservira`modifierla variablequim´emorisel’adressedupremierchaıˆnon.Or,plutˆotqueded´ecomposerunprogrammeendeux parties,uid´eclarelesstructuresdedonn´eesetunequide´finitlesfonctionsassoci´ees,laprogrammation une q objetd´ecomposeleprogrammeen classes regroupantchaquestructurededonne´esaveclesfonctionsqui lamodifient.Lesinstancesdecesclassessontappele´sdes objets . Un programme sera alors vu comme un ensembledecomposantsautonomes(lesobjets)quiinteragissententreeuxpourfairee´merger unre´sultatglobal . Unobjetsede´finitpar: – ses attributs (=variables)quicaracte´risentsone´tatquivarieaucoursdutempspendantl’exe´cution du programme, – ses m´ethodes (=fonctionsetproce´dures)quid´eterminentsoncomportement.Lesme´thodesd’unobjet ne modifient directement que ses attributs. Les objets interagissent entre eux par l’ envoi de messages .Lemessagequ’envoieunpremierobjet`aun deuxie`meobjetconsisteenl’appeld’uneme´thodedudeuxi`emeobjet.Ledeuxi`emeobjetvaalorseffectuer unecertainetaˆcheet,lecase´che´ant,retournerunre´sultataupremierobjet.Unmessagepermetdonca`un objet de modifier indirectement l’e´tatd’unautreobjet.Uneme´thodepeutelle-meˆmeenvoyerdesmessages `ad’autresobjetsetlesr´esultatsquiluisontretourne´sluipermettentdechangerl’´etatdel’objetauquelelle appartientetdeproduireelle-mˆemeunr´esultat. L’ex´ecutiond’unprogrammes´equentielproduitdoncunesuccessiond’envoisdemessagesquimodifient deprocheenprochelese´tatsdesobjetstandisquedesr´esultatspartielsduprobl`emege´ne´ralsonttransmis enretourd’objetenobjet.Maisl’autonomiedesobjetspeutfacilementpermettreded´efinirdesprogrammes distribu´eso`ulesobjetss’ex´ecutentets’envoientdesmessagesenparalle`le.
1
Pourquoi des objets ? Lamod´elisationd’unproble`mesouslaformed’objetseni¸epenter nteractionestunefaconnaturellederr´es denombreuxprobl`emescomplexes(organismes,organisationsd’individus,machinesre´alise´esparunassem-blagedecomposants,...).Exemplem´etaphorique:lesyst`emeimmunitaired’unorganismevivant(objets: cellules, messages : hormones). Parailleurs,l’autonomierelativedesobjetsestuneproprie´t´einte´ressantedupointdevueduge´nielogiciel. Lede´veloppementd’applicationslogiciellesconse´quentesre´unitungroupedepersonnesquidoiventtravailler enmˆemetemps.Ilfautdoncde´composerlestachesenmoduleslesplusinde´pendantspossiblelesunsdes autres.Unefoisquechaqueresponsabledemoduleconnaitl’interface(=lalistedesme´thodesqu’ilmet`a dispositiondesautresetleurssp´ecifications)desmodulesaveclesquelsilseraenrelation,ceresponsable pourra´ecriretoutseulsonpropremodulesanssepr´eoccuperdelafa¸condontlesautresmodulesseront e´crits.Parailleurs,lamodularit´epermetunegrandestabilite´ducode.Onpeuttesterunmoduleetchanger sesaspectsinternessanstoucherauxautresmodules.Sione´tendunprogrammeenrajoutantdesmodules, on ne modifiera que les anciens modules qui sont en relation avec les nouveaux modules. Cette organisation ducodeestd´ej`amiseenoeuvredanslaprogrammationimp´erativeparlede´coupaged’uneapplicationen multiplesfichiersetenbibliothe`quesdetypesetdefonctions.Leslangagesa`objets”officialisent”cettefa¸con deconcevoiruneapplicationenl’int´egrantformellementdanslelangage. Laconceptiondeprogrammesenprogrammationobjetdiffe`redecelledelaprogrammationproc´edurale. Enprogrammationproce´durale,onaaffairea`uneimbricationdemodulesfonctionnellesquiacc`edentcol-lectivement`aunensemblededonne´es.Onpenseentermesded´ecompositiondetaˆchesensous-taˆches.En programmationobjet,onidentifielesacteurs(=lesunite´scomportementales)duprobl`emepuisonde´termine lafacondontilsdoiventinteragirpourqueleproble`mesoitr´esolu. ¸ 2Aspectsimpe´ratifsdeJava Avant de voir comment Java permet de faire de la programmation objet, nous allons voir ses aspects impe´ratifs.Surcepoint,Javaesttr`esprochedulangageC.Pard´efaut,ilfautconsid´ererqueJavaetCsont identiques.Onnementionneraiciquelesdiffe´rencesessentiellesentrecesdeuxlangages. Voici une coquille de programme Java : public class Programme { public static void main(String args[]) { ... } }
Alaplacede...onplaceunesuited’instructionsquicorrespond`acequ’onplacedanslafonction main() deC.Lenomdufichiersourcedoiteˆtreidentique`aceluiquisuit public class dans le source mais avec l’extension .java . Ici, le nom de notre fichier source est donc Programme.java . Pour compiler le source, on utilise la commande javac quiproduituncodeobjetdontlenomdufichierestlemeˆmequelesourcemais avec l’extension .class . Ici, la commande javac Programme.java produit le fichier Programme.class . Pourexe´cuterlecodeobjet,onutiliselacommande java en mentionnant le nom du fichier objet sans son extension. Ici, la commande java Programme ex´ecuteleprogramme. Les instructions if , switch , while , for ,etcexistent,s’e´criventetfonctionnentcommeenC.Idempour lesop´erateursarithme´tiques,logiques,etc. Certainstypesprimitifsdiff`erent.Lestypesentiers(sign´es)sont byte (1 octet), short (2 octets), int (4 octets) et long (8 octets). Les types flottants sont float (4 octets) et double (8 octets). Les flottants permettentaussiderepre´senterl’infinipositifoune´gatifetlavaleurnonrepre´sentable(parexemple,le resultatde0divise´par0).Letypecaracte`re char estcode´sur2octets.Parailleurs,ilexisteletype ´